dijit-rails 0.11.0 → 0.14.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1043) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +3 -0
  3. data/README.md +54 -14
  4. data/dijit-rails.gemspec +1 -3
  5. data/lib/dijit/rails/version.rb +1 -1
  6. data/lib/dijit/version.rb +1 -1
  7. data/vendor/assets/{javascripts/dijit → images}/icons/images/commonIconsObjActDisabled.png +0 -0
  8. data/vendor/assets/{javascripts/dijit → images}/icons/images/commonIconsObjActDisabled_rtl.png +0 -0
  9. data/vendor/assets/{javascripts/dijit → images}/icons/images/commonIconsObjActEnabled.png +0 -0
  10. data/vendor/assets/{javascripts/dijit → images}/icons/images/commonIconsObjActEnabled8bit.png +0 -0
  11. data/vendor/assets/{javascripts/dijit → images}/icons/images/commonIconsObjActEnabled8bit_rtl.png +0 -0
  12. data/vendor/assets/{javascripts/dijit → images}/icons/images/commonIconsObjActEnabled_rtl.png +0 -0
  13. data/vendor/assets/{javascripts/dijit → images}/icons/images/editorIconsDisabled.png +0 -0
  14. data/vendor/assets/{javascripts/dijit → images}/icons/images/editorIconsDisabled_rtl.png +0 -0
  15. data/vendor/assets/{javascripts/dijit → images}/icons/images/editorIconsEnabled.png +0 -0
  16. data/vendor/assets/{javascripts/dijit → images}/icons/images/editorIconsEnabled_rtl.png +0 -0
  17. data/vendor/assets/{javascripts/dijit → images}/icons/images/loadingAnimation_rtl.gif +0 -0
  18. data/vendor/assets/images/{a11y → themes/a11y}/colors3x4.png +0 -0
  19. data/vendor/assets/images/{a11y → themes/a11y}/colors7x10.png +0 -0
  20. data/vendor/assets/images/{a11y → themes/a11y}/indeterminate_progress.gif +0 -0
  21. data/vendor/assets/images/{claro → themes/claro}/form/images/buttonArrows.png +0 -0
  22. data/vendor/assets/images/{claro → themes/claro}/form/images/buttonDisabled.png +0 -0
  23. data/vendor/assets/images/{claro → themes/claro}/form/images/buttonEnabled.png +0 -0
  24. data/vendor/assets/images/{claro → themes/claro}/form/images/checkboxAndRadioButtons_IE6.png +0 -0
  25. data/vendor/assets/images/{claro → themes/claro}/form/images/checkboxRadioButtonStates.png +0 -0
  26. data/vendor/assets/images/{claro → themes/claro}/form/images/commonFormArrows.png +0 -0
  27. data/vendor/assets/images/{claro → themes/claro}/form/images/error.png +0 -0
  28. data/vendor/assets/images/{claro → themes/claro}/form/images/sliderThumbs.png +0 -0
  29. data/vendor/assets/images/{claro → themes/claro/images}/activeGradient.png +0 -0
  30. data/vendor/assets/images/{claro → themes/claro/images}/calendar.png +0 -0
  31. data/vendor/assets/images/{claro → themes/claro/images}/calendarArrows.png +0 -0
  32. data/vendor/assets/images/{claro → themes/claro/images}/calendarArrows8bit.png +0 -0
  33. data/vendor/assets/images/{claro → themes/claro/images}/checkmarkNoBorder.gif +0 -0
  34. data/vendor/assets/images/{claro → themes/claro/images}/checkmarkNoBorder.png +0 -0
  35. data/vendor/assets/images/{claro → themes/claro/images}/dialogCloseIcon.png +0 -0
  36. data/vendor/assets/images/{claro → themes/claro/images}/dialogCloseIcon8bit.png +0 -0
  37. data/vendor/assets/images/{claro → themes/claro/images}/dnd.png +0 -0
  38. data/vendor/assets/images/{claro → themes/claro/images}/loadingAnimation.gif +0 -0
  39. data/vendor/assets/images/{claro → themes/claro/images}/progressBarAnim.gif +0 -0
  40. data/vendor/assets/images/{claro → themes/claro/images}/progressBarFull.png +0 -0
  41. data/vendor/assets/images/{claro → themes/claro/images}/spriteArrows.png +0 -0
  42. data/vendor/assets/images/{claro → themes/claro/images}/standardGradient.png +0 -0
  43. data/vendor/assets/images/{claro → themes/claro/images}/tooltip.png +0 -0
  44. data/vendor/assets/images/{claro → themes/claro/images}/tooltip8bit.png +0 -0
  45. data/vendor/assets/images/{claro → themes/claro/images}/treeExpandImages.png +0 -0
  46. data/vendor/assets/images/{claro → themes/claro/images}/treeExpandImages8bit.png +0 -0
  47. data/vendor/assets/{stylesheets → images/themes}/claro/layout/images/tabBottomSelected.png +0 -0
  48. data/vendor/assets/{stylesheets → images/themes}/claro/layout/images/tabBottomUnselected.png +0 -0
  49. data/vendor/assets/{stylesheets → images/themes}/claro/layout/images/tabClose.png +0 -0
  50. data/vendor/assets/{stylesheets → images/themes}/claro/layout/images/tabLeftSelected.png +0 -0
  51. data/vendor/assets/{stylesheets → images/themes}/claro/layout/images/tabLeftUnselected.png +0 -0
  52. data/vendor/assets/{stylesheets → images/themes}/claro/layout/images/tabNested.png +0 -0
  53. data/vendor/assets/{stylesheets → images/themes}/claro/layout/images/tabRightSelected.png +0 -0
  54. data/vendor/assets/{stylesheets → images/themes}/claro/layout/images/tabRightUnselected.png +0 -0
  55. data/vendor/assets/{stylesheets → images/themes}/claro/layout/images/tabTopSelected.png +0 -0
  56. data/vendor/assets/{stylesheets → images/themes}/claro/layout/images/tabTopUnselected.png +0 -0
  57. data/vendor/assets/images/{nihilo → themes/nihilo/images}/accordionItemActive.png +0 -0
  58. data/vendor/assets/images/{nihilo → themes/nihilo/images}/buttonActive.png +0 -0
  59. data/vendor/assets/images/{nihilo → themes/nihilo/images}/buttonDisabled.png +0 -0
  60. data/vendor/assets/images/{nihilo → themes/nihilo/images}/buttonEnabled.png +0 -0
  61. data/vendor/assets/images/{nihilo → themes/nihilo/images}/buttonHover.png +0 -0
  62. data/vendor/assets/images/{nihilo → themes/nihilo/images}/dndCopy.png +0 -0
  63. data/vendor/assets/images/{nihilo → themes/nihilo/images}/dndMove.png +0 -0
  64. data/vendor/assets/images/{nihilo → themes/nihilo/images}/dndNoCopy.png +0 -0
  65. data/vendor/assets/images/{nihilo → themes/nihilo/images}/dndNoMove.png +0 -0
  66. data/vendor/assets/images/{nihilo → themes/nihilo/images}/no.gif +0 -0
  67. data/vendor/assets/images/{nihilo → themes/nihilo/images}/preciseSliderThumb.gif +0 -0
  68. data/vendor/assets/images/{nihilo → themes/nihilo/images}/preciseSliderThumb.png +0 -0
  69. data/vendor/assets/images/{nihilo → themes/nihilo/images}/preciseSliderThumbFocus.gif +0 -0
  70. data/vendor/assets/images/{nihilo → themes/nihilo/images}/preciseSliderThumbFocus.png +0 -0
  71. data/vendor/assets/images/{nihilo → themes/nihilo/images}/progressBarAnim.gif +0 -0
  72. data/vendor/assets/images/{nihilo → themes/nihilo/images}/progressBarEmpty.png +0 -0
  73. data/vendor/assets/images/{nihilo → themes/nihilo/images}/progressBarFull.png +0 -0
  74. data/vendor/assets/images/{nihilo → themes/nihilo/images}/sliderEmpty.png +0 -0
  75. data/vendor/assets/images/{nihilo → themes/nihilo/images}/sliderEmptyVertical.png +0 -0
  76. data/vendor/assets/images/{nihilo → themes/nihilo/images}/sliderFull.png +0 -0
  77. data/vendor/assets/images/{nihilo → themes/nihilo/images}/sliderFullFocus.png +0 -0
  78. data/vendor/assets/images/{nihilo → themes/nihilo/images}/sliderFullVertical.png +0 -0
  79. data/vendor/assets/images/{nihilo → themes/nihilo/images}/sliderFullVerticalFocus.png +0 -0
  80. data/vendor/assets/images/{nihilo → themes/nihilo/images}/sliderThumb.gif +0 -0
  81. data/vendor/assets/images/{nihilo → themes/nihilo/images}/sliderThumb.png +0 -0
  82. data/vendor/assets/images/{nihilo → themes/nihilo/images}/sliderThumbFocus.gif +0 -0
  83. data/vendor/assets/images/{nihilo → themes/nihilo/images}/sliderThumbFocus.png +0 -0
  84. data/vendor/assets/images/{nihilo → themes/nihilo/images}/splitContainerSizerH-thumb.png +0 -0
  85. data/vendor/assets/images/{nihilo → themes/nihilo/images}/splitContainerSizerH.png +0 -0
  86. data/vendor/assets/images/{nihilo → themes/nihilo/images}/splitContainerSizerV-thumb.png +0 -0
  87. data/vendor/assets/images/{nihilo → themes/nihilo/images}/splitContainerSizerV.png +0 -0
  88. data/vendor/assets/images/{nihilo → themes/nihilo/images}/spriteArrows.gif +0 -0
  89. data/vendor/assets/images/{nihilo → themes/nihilo/images}/spriteArrows.png +0 -0
  90. data/vendor/assets/images/{nihilo → themes/nihilo/images}/spriteCheckbox.gif +0 -0
  91. data/vendor/assets/images/{nihilo → themes/nihilo/images}/spriteCheckbox.png +0 -0
  92. data/vendor/assets/images/{nihilo → themes/nihilo/images}/spriteDivIcons.gif +0 -0
  93. data/vendor/assets/images/{nihilo → themes/nihilo/images}/spriteDivIcons.png +0 -0
  94. data/vendor/assets/images/{nihilo → themes/nihilo/images}/spriteRadio.gif +0 -0
  95. data/vendor/assets/images/{nihilo → themes/nihilo/images}/spriteRadio.png +0 -0
  96. data/vendor/assets/images/{nihilo → themes/nihilo/images}/spriteRoundedIconsSmall.gif +0 -0
  97. data/vendor/assets/images/{nihilo → themes/nihilo/images}/spriteRoundedIconsSmall.png +0 -0
  98. data/vendor/assets/images/{nihilo → themes/nihilo/images}/spriteTree.gif +0 -0
  99. data/vendor/assets/images/{nihilo → themes/nihilo/images}/spriteTree.png +0 -0
  100. data/vendor/assets/images/{nihilo → themes/nihilo/images}/spriteTree_rtl.gif +0 -0
  101. data/vendor/assets/images/{nihilo → themes/nihilo/images}/spriteTree_rtl.png +0 -0
  102. data/vendor/assets/images/{nihilo → themes/nihilo/images}/tabBottomActiveC.gif +0 -0
  103. data/vendor/assets/images/{nihilo → themes/nihilo/images}/tabBottomEnabledC.gif +0 -0
  104. data/vendor/assets/images/{nihilo → themes/nihilo/images}/tabBottomHoverC.gif +0 -0
  105. data/vendor/assets/images/{nihilo → themes/nihilo/images}/tabContainerSprite.gif +0 -0
  106. data/vendor/assets/images/{nihilo → themes/nihilo/images}/titleBar.png +0 -0
  107. data/vendor/assets/images/{nihilo → themes/nihilo/images}/titleBarActive.png +0 -0
  108. data/vendor/assets/images/{nihilo → themes/nihilo/images}/tooltipConnectorDown.gif +0 -0
  109. data/vendor/assets/images/{nihilo → themes/nihilo/images}/tooltipConnectorDown.png +0 -0
  110. data/vendor/assets/images/{nihilo → themes/nihilo/images}/tooltipConnectorLeft.gif +0 -0
  111. data/vendor/assets/images/{nihilo → themes/nihilo/images}/tooltipConnectorLeft.png +0 -0
  112. data/vendor/assets/images/{nihilo → themes/nihilo/images}/tooltipConnectorRight.gif +0 -0
  113. data/vendor/assets/images/{nihilo → themes/nihilo/images}/tooltipConnectorRight.png +0 -0
  114. data/vendor/assets/images/{nihilo → themes/nihilo/images}/tooltipConnectorUp.gif +0 -0
  115. data/vendor/assets/images/{nihilo → themes/nihilo/images}/tooltipConnectorUp.png +0 -0
  116. data/vendor/assets/images/{nihilo → themes/nihilo/images}/treeExpand_loading.gif +0 -0
  117. data/vendor/assets/images/{nihilo → themes/nihilo/images}/treeHover.png +0 -0
  118. data/vendor/assets/images/{nihilo → themes/nihilo/images}/treeI.gif +0 -0
  119. data/vendor/assets/images/{nihilo → themes/nihilo/images}/treeI_half.gif +0 -0
  120. data/vendor/assets/images/{nihilo → themes/nihilo/images}/treeI_half_rtl.gif +0 -0
  121. data/vendor/assets/images/{nihilo → themes/nihilo/images}/treeI_rtl.gif +0 -0
  122. data/vendor/assets/images/{nihilo → themes/nihilo/images}/validationInputBg.gif +0 -0
  123. data/vendor/assets/images/{nihilo → themes/nihilo/images}/validationInputBg.png +0 -0
  124. data/vendor/assets/images/{nihilo → themes/nihilo/images}/warning.png +0 -0
  125. data/vendor/assets/images/{soria → themes/soria/images}/accordionItemActive.gif +0 -0
  126. data/vendor/assets/images/{soria → themes/soria/images}/accordionItemActive.png +0 -0
  127. data/vendor/assets/images/{soria → themes/soria/images}/buttonActive.png +0 -0
  128. data/vendor/assets/images/{soria → themes/soria/images}/buttonDisabled.png +0 -0
  129. data/vendor/assets/images/{soria → themes/soria/images}/buttonEnabled.png +0 -0
  130. data/vendor/assets/images/{soria → themes/soria/images}/buttonHover.png +0 -0
  131. data/vendor/assets/images/{soria → themes/soria/images}/dndCopy.png +0 -0
  132. data/vendor/assets/images/{soria → themes/soria/images}/dndMove.png +0 -0
  133. data/vendor/assets/images/{soria → themes/soria/images}/dndNoCopy.png +0 -0
  134. data/vendor/assets/images/{soria → themes/soria/images}/dndNoMove.png +0 -0
  135. data/vendor/assets/images/{soria → themes/soria/images}/preciseSliderThumb.gif +0 -0
  136. data/vendor/assets/images/{soria → themes/soria/images}/preciseSliderThumb.png +0 -0
  137. data/vendor/assets/images/{soria → themes/soria/images}/preciseSliderThumbFocus.gif +0 -0
  138. data/vendor/assets/images/{soria → themes/soria/images}/preciseSliderThumbFocus.png +0 -0
  139. data/vendor/assets/images/{soria → themes/soria/images}/progressBarAnim.gif +0 -0
  140. data/vendor/assets/images/{soria → themes/soria/images}/progressBarEmpty.png +0 -0
  141. data/vendor/assets/images/{soria → themes/soria/images}/progressBarFull.png +0 -0
  142. data/vendor/assets/images/{soria → themes/soria/images}/sliderEmpty.png +0 -0
  143. data/vendor/assets/images/{soria → themes/soria/images}/sliderEmptyVertical.png +0 -0
  144. data/vendor/assets/images/{soria → themes/soria/images}/sliderFull.png +0 -0
  145. data/vendor/assets/images/{soria → themes/soria/images}/sliderFullFocus.png +0 -0
  146. data/vendor/assets/images/{soria → themes/soria/images}/sliderFullVertical.png +0 -0
  147. data/vendor/assets/images/{soria → themes/soria/images}/sliderFullVerticalFocus.png +0 -0
  148. data/vendor/assets/images/{soria → themes/soria/images}/sliderThumb.gif +0 -0
  149. data/vendor/assets/images/{soria → themes/soria/images}/sliderThumb.png +0 -0
  150. data/vendor/assets/images/{soria → themes/soria/images}/sliderThumbFocus.gif +0 -0
  151. data/vendor/assets/images/{soria → themes/soria/images}/sliderThumbFocus.png +0 -0
  152. data/vendor/assets/images/{soria → themes/soria/images}/splitContainerSizerH-thumb.png +0 -0
  153. data/vendor/assets/images/{soria → themes/soria/images}/splitContainerSizerH.png +0 -0
  154. data/vendor/assets/images/{soria → themes/soria/images}/splitContainerSizerV-thumb.png +0 -0
  155. data/vendor/assets/images/{soria → themes/soria/images}/splitContainerSizerV.png +0 -0
  156. data/vendor/assets/images/{soria → themes/soria/images}/spriteArrows.gif +0 -0
  157. data/vendor/assets/images/{soria → themes/soria/images}/spriteArrows.png +0 -0
  158. data/vendor/assets/images/{soria → themes/soria/images}/spriteCheckbox.gif +0 -0
  159. data/vendor/assets/images/{soria → themes/soria/images}/spriteCheckbox.png +0 -0
  160. data/vendor/assets/images/{soria → themes/soria/images}/spriteDivIcons.gif +0 -0
  161. data/vendor/assets/images/{soria → themes/soria/images}/spriteDivIcons.png +0 -0
  162. data/vendor/assets/images/{soria → themes/soria/images}/spriteRadio.gif +0 -0
  163. data/vendor/assets/images/{soria → themes/soria/images}/spriteRadio.png +0 -0
  164. data/vendor/assets/images/{soria → themes/soria/images}/spriteRoundedIconsSmall.gif +0 -0
  165. data/vendor/assets/images/{soria → themes/soria/images}/spriteRoundedIconsSmall.png +0 -0
  166. data/vendor/assets/images/{soria → themes/soria/images}/spriteRoundedIconsSmallBl.gif +0 -0
  167. data/vendor/assets/images/{soria → themes/soria/images}/spriteRoundedIconsSmallBl.png +0 -0
  168. data/vendor/assets/images/{soria → themes/soria/images}/spriteTree.gif +0 -0
  169. data/vendor/assets/images/{soria → themes/soria/images}/spriteTree.png +0 -0
  170. data/vendor/assets/images/{soria → themes/soria/images}/spriteTree_rtl.gif +0 -0
  171. data/vendor/assets/images/{soria → themes/soria/images}/spriteTree_rtl.png +0 -0
  172. data/vendor/assets/images/{soria → themes/soria/images}/tabBottomActiveC.gif +0 -0
  173. data/vendor/assets/images/{soria → themes/soria/images}/tabBottomEnabledC.gif +0 -0
  174. data/vendor/assets/images/{soria → themes/soria/images}/tabBottomEnabledSpriteLR.gif +0 -0
  175. data/vendor/assets/images/{soria → themes/soria/images}/tabBottomHoverC.gif +0 -0
  176. data/vendor/assets/images/{soria → themes/soria/images}/tabContainerSprite.gif +0 -0
  177. data/vendor/assets/images/{soria → themes/soria/images}/tabLeftChecked.gif +0 -0
  178. data/vendor/assets/images/{soria → themes/soria/images}/tabRightChecked.gif +0 -0
  179. data/vendor/assets/images/{soria → themes/soria/images}/titleBar.png +0 -0
  180. data/vendor/assets/images/{soria → themes/soria/images}/titleBarActive.png +0 -0
  181. data/vendor/assets/images/{soria → themes/soria/images}/tooltipConnectorDown.gif +0 -0
  182. data/vendor/assets/images/{soria → themes/soria/images}/tooltipConnectorDown.png +0 -0
  183. data/vendor/assets/images/{soria → themes/soria/images}/tooltipConnectorLeft.gif +0 -0
  184. data/vendor/assets/images/{soria → themes/soria/images}/tooltipConnectorLeft.png +0 -0
  185. data/vendor/assets/images/{soria → themes/soria/images}/tooltipConnectorRight.gif +0 -0
  186. data/vendor/assets/images/{soria → themes/soria/images}/tooltipConnectorRight.png +0 -0
  187. data/vendor/assets/images/{soria → themes/soria/images}/tooltipConnectorUp.gif +0 -0
  188. data/vendor/assets/images/{soria → themes/soria/images}/tooltipConnectorUp.png +0 -0
  189. data/vendor/assets/images/{soria → themes/soria/images}/treeExpand_loading.gif +0 -0
  190. data/vendor/assets/images/{soria → themes/soria/images}/treeHover.png +0 -0
  191. data/vendor/assets/images/{soria → themes/soria/images}/treeI.gif +0 -0
  192. data/vendor/assets/images/{soria → themes/soria/images}/treeI_half.gif +0 -0
  193. data/vendor/assets/images/{soria → themes/soria/images}/treeI_half_rtl.gif +0 -0
  194. data/vendor/assets/images/{soria → themes/soria/images}/treeI_rtl.gif +0 -0
  195. data/vendor/assets/images/{soria → themes/soria/images}/validationInputBg.gif +0 -0
  196. data/vendor/assets/images/{soria → themes/soria/images}/validationInputBg.png +0 -0
  197. data/vendor/assets/images/{soria → themes/soria/images}/warning.png +0 -0
  198. data/vendor/assets/images/{tundra → themes/tundra/images}/accordionItemActive.gif +0 -0
  199. data/vendor/assets/images/{tundra → themes/tundra/images}/accordionItemHover.gif +0 -0
  200. data/vendor/assets/images/{tundra → themes/tundra/images}/buttonActive.png +0 -0
  201. data/vendor/assets/images/{tundra → themes/tundra/images}/buttonDisabled.png +0 -0
  202. data/vendor/assets/images/{tundra → themes/tundra/images}/buttonEnabled.png +0 -0
  203. data/vendor/assets/images/{tundra → themes/tundra/images}/buttonHover.png +0 -0
  204. data/vendor/assets/images/{tundra → themes/tundra/images}/calendarDayLabel.png +0 -0
  205. data/vendor/assets/images/{tundra → themes/tundra/images}/calendarMonthLabel.png +0 -0
  206. data/vendor/assets/images/{tundra → themes/tundra/images}/calendarYearLabel.png +0 -0
  207. data/vendor/assets/images/{tundra → themes/tundra/images}/checkmark.gif +0 -0
  208. data/vendor/assets/images/{tundra → themes/tundra/images}/checkmark.png +0 -0
  209. data/vendor/assets/images/{tundra → themes/tundra/images}/checkmarkNoBorder.gif +0 -0
  210. data/vendor/assets/images/{tundra → themes/tundra/images}/checkmarkNoBorder.png +0 -0
  211. data/vendor/assets/images/{tundra → themes/tundra/images}/circleIcon.gif +0 -0
  212. data/vendor/assets/images/{tundra → themes/tundra/images}/circleIcon.png +0 -0
  213. data/vendor/assets/images/{tundra → themes/tundra/images}/comboArrowDown.gif +0 -0
  214. data/vendor/assets/images/{tundra → themes/tundra/images}/dijitProgressBarAnim.gif +0 -0
  215. data/vendor/assets/images/{tundra → themes/tundra/images}/dndCopy.png +0 -0
  216. data/vendor/assets/images/{tundra → themes/tundra/images}/dndMove.png +0 -0
  217. data/vendor/assets/images/{tundra → themes/tundra/images}/dndNoCopy.png +0 -0
  218. data/vendor/assets/images/{tundra → themes/tundra/images}/dndNoMove.png +0 -0
  219. data/vendor/assets/images/{tundra → themes/tundra/images}/dojoTundraGradientBg.gif +0 -0
  220. data/vendor/assets/images/{tundra → themes/tundra/images}/dojoTundraGradientBg.png +0 -0
  221. data/vendor/assets/images/{tundra → themes/tundra/images}/doubleArrowDown.png +0 -0
  222. data/vendor/assets/images/{tundra → themes/tundra/images}/doubleArrowUp.png +0 -0
  223. data/vendor/assets/images/{tundra → themes/tundra/images}/folderClosed.gif +0 -0
  224. data/vendor/assets/images/{tundra → themes/tundra/images}/folderOpened.gif +0 -0
  225. data/vendor/assets/images/{tundra → themes/tundra/images}/i.gif +0 -0
  226. data/vendor/assets/images/{tundra → themes/tundra/images}/i_half.gif +0 -0
  227. data/vendor/assets/images/{tundra → themes/tundra/images}/i_half_rtl.gif +0 -0
  228. data/vendor/assets/images/{tundra → themes/tundra/images}/i_rtl.gif +0 -0
  229. data/vendor/assets/images/{tundra → themes/tundra/images}/leaf.gif +0 -0
  230. data/vendor/assets/images/{tundra → themes/tundra/images}/loading.gif +0 -0
  231. data/vendor/assets/images/{tundra → themes/tundra/images}/menu.png +0 -0
  232. data/vendor/assets/images/{tundra → themes/tundra/images}/minusButton.gif +0 -0
  233. data/vendor/assets/images/{tundra → themes/tundra/images}/no.gif +0 -0
  234. data/vendor/assets/images/{tundra → themes/tundra/images}/noX.gif +0 -0
  235. data/vendor/assets/images/{tundra → themes/tundra/images}/plusButton.gif +0 -0
  236. data/vendor/assets/images/{tundra → themes/tundra/images}/popupMenuBg.gif +0 -0
  237. data/vendor/assets/images/{tundra → themes/tundra/images}/preciseSliderThumb.gif +0 -0
  238. data/vendor/assets/images/{tundra → themes/tundra/images}/preciseSliderThumb.png +0 -0
  239. data/vendor/assets/images/{tundra → themes/tundra/images}/preciseSliderThumbFocus.gif +0 -0
  240. data/vendor/assets/images/{tundra → themes/tundra/images}/preciseSliderThumbFocus.png +0 -0
  241. data/vendor/assets/images/{tundra → themes/tundra/images}/progressBarAnim-1.png +0 -0
  242. data/vendor/assets/images/{tundra → themes/tundra/images}/progressBarAnim-2.png +0 -0
  243. data/vendor/assets/images/{tundra → themes/tundra/images}/progressBarAnim-3.png +0 -0
  244. data/vendor/assets/images/{tundra → themes/tundra/images}/progressBarAnim-4.png +0 -0
  245. data/vendor/assets/images/{tundra → themes/tundra/images}/progressBarAnim-5.png +0 -0
  246. data/vendor/assets/images/{tundra → themes/tundra/images}/progressBarAnim-6.png +0 -0
  247. data/vendor/assets/images/{tundra → themes/tundra/images}/progressBarAnim-7.png +0 -0
  248. data/vendor/assets/images/{tundra → themes/tundra/images}/progressBarAnim-8.png +0 -0
  249. data/vendor/assets/images/{tundra → themes/tundra/images}/progressBarAnim-9.png +0 -0
  250. data/vendor/assets/images/{tundra → themes/tundra/images}/progressBarAnim.gif +0 -0
  251. data/vendor/assets/images/{tundra → themes/tundra/images}/progressBarEmpty.png +0 -0
  252. data/vendor/assets/images/{tundra → themes/tundra/images}/progressBarFull.png +0 -0
  253. data/vendor/assets/images/{tundra → themes/tundra/images}/radioButtonActive.png +0 -0
  254. data/vendor/assets/images/{tundra → themes/tundra/images}/radioButtonActiveDisabled.png +0 -0
  255. data/vendor/assets/images/{tundra → themes/tundra/images}/radioButtonActiveHover.png +0 -0
  256. data/vendor/assets/images/{tundra → themes/tundra/images}/radioButtonDisabled.png +0 -0
  257. data/vendor/assets/images/{tundra → themes/tundra/images}/radioButtonEnabled.png +0 -0
  258. data/vendor/assets/images/{tundra → themes/tundra/images}/radioButtonHover.png +0 -0
  259. data/vendor/assets/images/{tundra → themes/tundra/images}/sliderEmpty.png +0 -0
  260. data/vendor/assets/images/{tundra → themes/tundra/images}/sliderEmptyVertical.png +0 -0
  261. data/vendor/assets/images/{tundra → themes/tundra/images}/sliderFull.png +0 -0
  262. data/vendor/assets/images/{tundra → themes/tundra/images}/sliderFullFocus.png +0 -0
  263. data/vendor/assets/images/{tundra → themes/tundra/images}/sliderFullVertical.png +0 -0
  264. data/vendor/assets/images/{tundra → themes/tundra/images}/sliderFullVerticalFocus.png +0 -0
  265. data/vendor/assets/images/{tundra → themes/tundra/images}/sliderThumb.png +0 -0
  266. data/vendor/assets/images/{tundra → themes/tundra/images}/sliderThumbFocus.gif +0 -0
  267. data/vendor/assets/images/{tundra → themes/tundra/images}/sliderThumbFocus.png +0 -0
  268. data/vendor/assets/images/{tundra → themes/tundra/images}/smallArrowDown.png +0 -0
  269. data/vendor/assets/images/{tundra → themes/tundra/images}/smallArrowUp.png +0 -0
  270. data/vendor/assets/images/{tundra → themes/tundra/images}/splitContainerSizerH-thumb.png +0 -0
  271. data/vendor/assets/images/{tundra → themes/tundra/images}/splitContainerSizerH.png +0 -0
  272. data/vendor/assets/images/{tundra → themes/tundra/images}/splitContainerSizerV-thumb.png +0 -0
  273. data/vendor/assets/images/{tundra → themes/tundra/images}/splitContainerSizerV.png +0 -0
  274. data/vendor/assets/images/{tundra → themes/tundra/images}/spriteArrows.gif +0 -0
  275. data/vendor/assets/images/{tundra → themes/tundra/images}/spriteArrows.png +0 -0
  276. data/vendor/assets/images/{tundra → themes/tundra/images}/spriteRoundedIconsSmall.gif +0 -0
  277. data/vendor/assets/images/{tundra → themes/tundra/images}/spriteRoundedIconsSmall.png +0 -0
  278. data/vendor/assets/images/{tundra → themes/tundra/images}/tabActive.png +0 -0
  279. data/vendor/assets/images/{tundra → themes/tundra/images}/tabClose.gif +0 -0
  280. data/vendor/assets/images/{tundra → themes/tundra/images}/tabClose.png +0 -0
  281. data/vendor/assets/images/{tundra → themes/tundra/images}/tabCloseHover.gif +0 -0
  282. data/vendor/assets/images/{tundra → themes/tundra/images}/tabCloseHover.png +0 -0
  283. data/vendor/assets/images/{tundra → themes/tundra/images}/tabDisabled.png +0 -0
  284. data/vendor/assets/images/{tundra → themes/tundra/images}/tabEnabled.png +0 -0
  285. data/vendor/assets/images/{tundra → themes/tundra/images}/tabHover.gif +0 -0
  286. data/vendor/assets/images/{tundra → themes/tundra/images}/tabHover.png +0 -0
  287. data/vendor/assets/images/{tundra → themes/tundra/images}/titleBar.png +0 -0
  288. data/vendor/assets/images/{tundra → themes/tundra/images}/titleBarBg.gif +0 -0
  289. data/vendor/assets/images/{tundra → themes/tundra/images}/tooltipConnectorDown.gif +0 -0
  290. data/vendor/assets/images/{tundra → themes/tundra/images}/tooltipConnectorDown.png +0 -0
  291. data/vendor/assets/images/{tundra → themes/tundra/images}/tooltipConnectorLeft.gif +0 -0
  292. data/vendor/assets/images/{tundra → themes/tundra/images}/tooltipConnectorLeft.png +0 -0
  293. data/vendor/assets/images/{tundra → themes/tundra/images}/tooltipConnectorRight.gif +0 -0
  294. data/vendor/assets/images/{tundra → themes/tundra/images}/tooltipConnectorRight.png +0 -0
  295. data/vendor/assets/images/{tundra → themes/tundra/images}/tooltipConnectorUp.gif +0 -0
  296. data/vendor/assets/images/{tundra → themes/tundra/images}/tooltipConnectorUp.png +0 -0
  297. data/vendor/assets/images/{tundra → themes/tundra/images}/treeExpand_leaf.gif +0 -0
  298. data/vendor/assets/images/{tundra → themes/tundra/images}/treeExpand_leaf_rtl.gif +0 -0
  299. data/vendor/assets/images/{tundra → themes/tundra/images}/treeExpand_loading.gif +0 -0
  300. data/vendor/assets/images/{tundra → themes/tundra/images}/treeExpand_minus.gif +0 -0
  301. data/vendor/assets/images/{tundra → themes/tundra/images}/treeExpand_minus_rtl.gif +0 -0
  302. data/vendor/assets/images/{tundra → themes/tundra/images}/treeExpand_mius.gif +0 -0
  303. data/vendor/assets/images/{tundra → themes/tundra/images}/treeExpand_plus.gif +0 -0
  304. data/vendor/assets/images/{tundra → themes/tundra/images}/treeExpand_plus_rtl.gif +0 -0
  305. data/vendor/assets/images/{tundra → themes/tundra/images}/treeHover.png +0 -0
  306. data/vendor/assets/images/{tundra → themes/tundra/images}/validationInputBg.gif +0 -0
  307. data/vendor/assets/images/{tundra → themes/tundra/images}/validationInputBg.png +0 -0
  308. data/vendor/assets/images/{tundra → themes/tundra/images}/warning.png +0 -0
  309. data/vendor/assets/javascripts/dijit/BackgroundIframe.js +2 -1
  310. data/vendor/assets/javascripts/dijit/CalendarLite.js +85 -81
  311. data/vendor/assets/javascripts/dijit/CheckedMenuItem.js +1 -1
  312. data/vendor/assets/javascripts/dijit/ColorPalette.js +1 -1
  313. data/vendor/assets/javascripts/dijit/Destroyable.js +6 -6
  314. data/vendor/assets/javascripts/dijit/Dialog.js +3 -1
  315. data/vendor/assets/javascripts/dijit/Editor.js +58 -58
  316. data/vendor/assets/javascripts/dijit/InlineEditBox.js +81 -81
  317. data/vendor/assets/javascripts/dijit/MenuSeparator.js +1 -1
  318. data/vendor/assets/javascripts/dijit/ProgressBar.js +2 -4
  319. data/vendor/assets/javascripts/dijit/TitlePane.js +5 -2
  320. data/vendor/assets/javascripts/dijit/TooltipDialog.js +1 -1
  321. data/vendor/assets/javascripts/dijit/Tree.js +10 -1
  322. data/vendor/assets/javascripts/dijit/_CssStateMixin.js +70 -70
  323. data/vendor/assets/javascripts/dijit/_HasDropDown.js +56 -49
  324. data/vendor/assets/javascripts/dijit/_MenuBase.js +68 -64
  325. data/vendor/assets/javascripts/dijit/_PaletteMixin.js +2 -2
  326. data/vendor/assets/javascripts/dijit/_TimePicker.js +5 -1
  327. data/vendor/assets/javascripts/dijit/_WidgetBase.js +10 -6
  328. data/vendor/assets/javascripts/dijit/_editor/RichText.js +645 -625
  329. data/vendor/assets/javascripts/dijit/_editor/plugins/EnterKeyHandling.js +2 -2
  330. data/vendor/assets/javascripts/dijit/_editor/plugins/FontChoice.js +2 -0
  331. data/vendor/assets/javascripts/dijit/_editor/plugins/LinkDialog.js +4 -0
  332. data/vendor/assets/javascripts/dijit/_editor/plugins/TextColor.js +1 -1
  333. data/vendor/assets/javascripts/dijit/_editor/plugins/ViewSource.js +3 -0
  334. data/vendor/assets/javascripts/dijit/a11y.js +1 -1
  335. data/vendor/assets/javascripts/dijit/dijit-all.js +2 -2
  336. data/vendor/assets/javascripts/dijit/dijit.js +2 -2
  337. data/vendor/assets/javascripts/dijit/form/CheckBox.js +2 -2
  338. data/vendor/assets/javascripts/dijit/form/ComboBoxMixin.js +1 -1
  339. data/vendor/assets/javascripts/dijit/form/DropDownButton.js +1 -1
  340. data/vendor/assets/javascripts/dijit/form/NumberSpinner.js +4 -1
  341. data/vendor/assets/javascripts/dijit/form/RangeBoundTextBox.js +0 -17
  342. data/vendor/assets/javascripts/dijit/form/Select.js +3 -3
  343. data/vendor/assets/javascripts/dijit/form/TextBox.js +3 -1
  344. data/vendor/assets/javascripts/dijit/form/ValidationTextBox.js +21 -19
  345. data/vendor/assets/javascripts/dijit/form/_AutoCompleterMixin.js +3 -4
  346. data/vendor/assets/javascripts/dijit/form/_CheckBoxMixin.js +2 -3
  347. data/vendor/assets/javascripts/dijit/form/_ComboBoxMenu.js +2 -1
  348. data/vendor/assets/javascripts/dijit/form/_DateTimeTextBox.js +1 -1
  349. data/vendor/assets/javascripts/dijit/form/_ExpandingTextAreaMixin.js +27 -31
  350. data/vendor/assets/javascripts/dijit/form/_FormSelectWidget.js +155 -170
  351. data/vendor/assets/javascripts/dijit/form/_FormValueMixin.js +0 -1
  352. data/vendor/assets/javascripts/dijit/form/_FormWidgetMixin.js +1 -1
  353. data/vendor/assets/javascripts/dijit/form/_RadioButtonMixin.js +1 -1
  354. data/vendor/assets/javascripts/dijit/form/_SearchMixin.js +1 -1
  355. data/vendor/assets/javascripts/dijit/form/_Spinner.js +17 -0
  356. data/vendor/assets/javascripts/dijit/form/_ToggleButtonMixin.js +13 -2
  357. data/vendor/assets/javascripts/dijit/layout/AccordionContainer.js +2 -1
  358. data/vendor/assets/javascripts/dijit/layout/ContentPane.js +80 -83
  359. data/vendor/assets/javascripts/dijit/layout/ScrollingTabController.js +4 -3
  360. data/vendor/assets/javascripts/dijit/layout/StackContainer.js +0 -1
  361. data/vendor/assets/javascripts/dijit/layout/StackController.js +0 -1
  362. data/vendor/assets/javascripts/dijit/nls/dijit-all_ROOT.js +1 -1
  363. data/vendor/assets/javascripts/dijit/nls/dijit-all_ar.js +1 -1
  364. data/vendor/assets/javascripts/dijit/nls/dijit-all_ca.js +1 -1
  365. data/vendor/assets/javascripts/dijit/nls/dijit-all_cs.js +1 -1
  366. data/vendor/assets/javascripts/dijit/nls/dijit-all_da.js +1 -1
  367. data/vendor/assets/javascripts/dijit/nls/dijit-all_de.js +1 -1
  368. data/vendor/assets/javascripts/dijit/nls/dijit-all_el.js +1 -1
  369. data/vendor/assets/javascripts/dijit/nls/dijit-all_en-gb.js +1 -1
  370. data/vendor/assets/javascripts/dijit/nls/dijit-all_en-us.js +1 -1
  371. data/vendor/assets/javascripts/dijit/nls/dijit-all_es-es.js +1 -1
  372. data/vendor/assets/javascripts/dijit/nls/dijit-all_fi-fi.js +1 -1
  373. data/vendor/assets/javascripts/dijit/nls/dijit-all_fr-fr.js +1 -1
  374. data/vendor/assets/javascripts/dijit/nls/dijit-all_he-il.js +1 -1
  375. data/vendor/assets/javascripts/dijit/nls/dijit-all_hu.js +1 -1
  376. data/vendor/assets/javascripts/dijit/nls/dijit-all_it-it.js +1 -1
  377. data/vendor/assets/javascripts/dijit/nls/dijit-all_ja-jp.js +1 -1
  378. data/vendor/assets/javascripts/dijit/nls/dijit-all_ko-kr.js +1 -1
  379. data/vendor/assets/javascripts/dijit/nls/dijit-all_nb.js +1 -1
  380. data/vendor/assets/javascripts/dijit/nls/dijit-all_nl-nl.js +1 -1
  381. data/vendor/assets/javascripts/dijit/nls/dijit-all_pl.js +1 -1
  382. data/vendor/assets/javascripts/dijit/nls/dijit-all_pt-br.js +1 -1
  383. data/vendor/assets/javascripts/dijit/nls/dijit-all_pt-pt.js +1 -1
  384. data/vendor/assets/javascripts/dijit/nls/dijit-all_ru.js +1 -1
  385. data/vendor/assets/javascripts/dijit/nls/dijit-all_sk.js +1 -1
  386. data/vendor/assets/javascripts/dijit/nls/dijit-all_sl.js +1 -1
  387. data/vendor/assets/javascripts/dijit/nls/dijit-all_sv.js +1 -1
  388. data/vendor/assets/javascripts/dijit/nls/dijit-all_th.js +1 -1
  389. data/vendor/assets/javascripts/dijit/nls/dijit-all_tr.js +1 -1
  390. data/vendor/assets/javascripts/dijit/nls/dijit-all_zh-cn.js +1 -1
  391. data/vendor/assets/javascripts/dijit/nls/dijit-all_zh-tw.js +1 -1
  392. data/vendor/assets/javascripts/dijit/package.json +2 -2
  393. data/vendor/assets/javascripts/dijit/popup.js +8 -10
  394. data/vendor/assets/javascripts/dijit/registry.js +1 -1
  395. data/vendor/assets/javascripts/dijit/themes/claro/compile.js +52 -0
  396. data/vendor/assets/{images → javascripts/dijit/themes}/claro/form/images/buttonDisabled.svg +0 -0
  397. data/vendor/assets/{images → javascripts/dijit/themes}/claro/form/images/buttonEnabled.svg +0 -0
  398. data/vendor/assets/{images/claro → javascripts/dijit/themes/claro/images}/activeGradient.svg +0 -0
  399. data/vendor/assets/{images/claro → javascripts/dijit/themes/claro/images}/standardGradient.svg +0 -0
  400. data/vendor/assets/{stylesheets → javascripts/dijit/themes}/claro/layout/images/tabBottomSelected.svg +0 -0
  401. data/vendor/assets/{stylesheets → javascripts/dijit/themes}/claro/layout/images/tabBottomUnselected.svg +0 -0
  402. data/vendor/assets/{stylesheets → javascripts/dijit/themes}/claro/layout/images/tabLeftSelected.svg +0 -0
  403. data/vendor/assets/{stylesheets → javascripts/dijit/themes}/claro/layout/images/tabLeftUnselected.svg +0 -0
  404. data/vendor/assets/{stylesheets → javascripts/dijit/themes}/claro/layout/images/tabRightSelected.svg +0 -0
  405. data/vendor/assets/{stylesheets → javascripts/dijit/themes}/claro/layout/images/tabRightUnselected.svg +0 -0
  406. data/vendor/assets/{stylesheets → javascripts/dijit/themes}/claro/layout/images/tabTopSelected.svg +0 -0
  407. data/vendor/assets/{stylesheets → javascripts/dijit/themes}/claro/layout/images/tabTopUnselected.svg +0 -0
  408. data/vendor/assets/{images/tundra → javascripts/dijit/themes/tundra/images}/dijitProgressBarAnim.psd +0 -0
  409. data/vendor/assets/{images/tundra → javascripts/dijit/themes/tundra/images}/progressBarAnim.psd +0 -0
  410. data/vendor/assets/javascripts/dijit/tree/ObjectStoreModel.js +3 -4
  411. data/vendor/assets/javascripts/dijit/tree/_dndSelector.js +5 -2
  412. data/vendor/assets/{javascripts/dijit → stylesheets}/icons/commonIcons.css +1 -1
  413. data/vendor/assets/{javascripts/dijit → stylesheets}/icons/commonIcons_rtl.css +0 -0
  414. data/vendor/assets/{javascripts/dijit → stylesheets}/icons/editorIcons.css +0 -0
  415. data/vendor/assets/{javascripts/dijit → stylesheets}/icons/editorIcons_rtl.css +0 -0
  416. data/vendor/assets/stylesheets/{claro → themes/claro}/Calendar.css +2 -2
  417. data/vendor/assets/stylesheets/themes/claro/Calendar.less +277 -0
  418. data/vendor/assets/stylesheets/{claro → themes/claro}/Calendar_rtl.css +0 -0
  419. data/vendor/assets/stylesheets/themes/claro/Calendar_rtl.less +19 -0
  420. data/vendor/assets/stylesheets/{claro → themes/claro}/ColorPalette.css +0 -0
  421. data/vendor/assets/stylesheets/themes/claro/ColorPalette.less +44 -0
  422. data/vendor/assets/stylesheets/{claro → themes/claro}/Common.css +2 -2
  423. data/vendor/assets/stylesheets/themes/claro/Common.less +86 -0
  424. data/vendor/assets/stylesheets/{claro → themes/claro}/Dialog.css +2 -2
  425. data/vendor/assets/stylesheets/themes/claro/Dialog.less +209 -0
  426. data/vendor/assets/stylesheets/{claro → themes/claro}/Dialog_rtl.css +0 -0
  427. data/vendor/assets/stylesheets/themes/claro/Dialog_rtl.less +13 -0
  428. data/vendor/assets/stylesheets/{claro → themes/claro}/Editor.css +1 -1
  429. data/vendor/assets/stylesheets/themes/claro/Editor.less +57 -0
  430. data/vendor/assets/stylesheets/{claro → themes/claro}/Editor_rtl.css +0 -0
  431. data/vendor/assets/stylesheets/{claro → themes/claro}/Editor_rtl.less +0 -0
  432. data/vendor/assets/stylesheets/{claro → themes/claro}/InlineEditBox.css +0 -0
  433. data/vendor/assets/stylesheets/themes/claro/InlineEditBox.less +25 -0
  434. data/vendor/assets/stylesheets/{claro → themes/claro}/Menu.css +3 -3
  435. data/vendor/assets/stylesheets/themes/claro/Menu.less +179 -0
  436. data/vendor/assets/stylesheets/{claro → themes/claro}/Menu_rtl.css +0 -0
  437. data/vendor/assets/stylesheets/themes/claro/Menu_rtl.less +11 -0
  438. data/vendor/assets/stylesheets/{claro → themes/claro}/ProgressBar.css +1 -1
  439. data/vendor/assets/stylesheets/themes/claro/ProgressBar.less +64 -0
  440. data/vendor/assets/stylesheets/{claro → themes/claro}/TimePicker.css +2 -2
  441. data/vendor/assets/stylesheets/themes/claro/TimePicker.less +115 -0
  442. data/vendor/assets/stylesheets/{claro → themes/claro}/TimePicker_rtl.css +0 -0
  443. data/vendor/assets/stylesheets/themes/claro/TimePicker_rtl.less +12 -0
  444. data/vendor/assets/stylesheets/{claro → themes/claro}/TitlePane.css +2 -2
  445. data/vendor/assets/stylesheets/themes/claro/TitlePane.less +70 -0
  446. data/vendor/assets/stylesheets/{claro → themes/claro}/TitlePane_rtl.css +0 -0
  447. data/vendor/assets/stylesheets/themes/claro/TitlePane_rtl.less +7 -0
  448. data/vendor/assets/stylesheets/{claro → themes/claro}/Toolbar.css +13 -11
  449. data/vendor/assets/stylesheets/themes/claro/Toolbar.less +173 -0
  450. data/vendor/assets/stylesheets/{claro → themes/claro}/Toolbar_rtl.css +0 -0
  451. data/vendor/assets/stylesheets/themes/claro/Toolbar_rtl.less +32 -0
  452. data/vendor/assets/stylesheets/{claro → themes/claro}/Tree.css +3 -3
  453. data/vendor/assets/stylesheets/themes/claro/Tree.less +127 -0
  454. data/vendor/assets/stylesheets/{claro → themes/claro}/claro.css +86 -69
  455. data/vendor/assets/stylesheets/{claro → themes/claro}/claro_rtl.css +3 -0
  456. data/vendor/assets/stylesheets/{claro → themes/claro}/document.css +0 -0
  457. data/vendor/assets/stylesheets/themes/claro/document.less +45 -0
  458. data/vendor/assets/stylesheets/{claro → themes/claro}/form/Button.css +2 -2
  459. data/vendor/assets/stylesheets/themes/claro/form/Button.less +164 -0
  460. data/vendor/assets/stylesheets/{claro → themes/claro}/form/Button_rtl.css +0 -0
  461. data/vendor/assets/stylesheets/themes/claro/form/Button_rtl.less +16 -0
  462. data/vendor/assets/stylesheets/{claro → themes/claro}/form/Checkbox.css +0 -0
  463. data/vendor/assets/stylesheets/themes/claro/form/Checkbox.less +79 -0
  464. data/vendor/assets/stylesheets/{claro → themes/claro}/form/Common.css +4 -4
  465. data/vendor/assets/stylesheets/themes/claro/form/Common.less +241 -0
  466. data/vendor/assets/stylesheets/{claro → themes/claro}/form/Common_rtl.css +0 -0
  467. data/vendor/assets/stylesheets/themes/claro/form/Common_rtl.less +8 -0
  468. data/vendor/assets/stylesheets/{claro → themes/claro}/form/NumberSpinner.css +2 -2
  469. data/vendor/assets/stylesheets/themes/claro/form/NumberSpinner.less +150 -0
  470. data/vendor/assets/stylesheets/{claro → themes/claro}/form/RadioButton.css +0 -0
  471. data/vendor/assets/stylesheets/themes/claro/form/RadioButton.less +84 -0
  472. data/vendor/assets/stylesheets/{claro → themes/claro}/form/Select.css +3 -3
  473. data/vendor/assets/stylesheets/themes/claro/form/Select.less +98 -0
  474. data/vendor/assets/stylesheets/{claro → themes/claro}/form/Slider.css +2 -2
  475. data/vendor/assets/stylesheets/themes/claro/form/Slider.less +344 -0
  476. data/vendor/assets/stylesheets/{claro → themes/claro}/form/Slider_rtl.css +0 -0
  477. data/vendor/assets/stylesheets/themes/claro/form/Slider_rtl.less +33 -0
  478. data/vendor/assets/stylesheets/{claro → themes/claro}/layout/AccordionContainer.css +4 -4
  479. data/vendor/assets/stylesheets/{claro → themes/claro}/layout/AccordionContainer.less +3 -1
  480. data/vendor/assets/stylesheets/{claro → themes/claro}/layout/BorderContainer.css +2 -2
  481. data/vendor/assets/stylesheets/{claro → themes/claro}/layout/BorderContainer.less +0 -0
  482. data/vendor/assets/stylesheets/{claro → themes/claro}/layout/ContentPane.css +0 -0
  483. data/vendor/assets/stylesheets/{claro → themes/claro}/layout/ContentPane.less +0 -0
  484. data/vendor/assets/stylesheets/{claro → themes/claro}/layout/TabContainer.css +11 -11
  485. data/vendor/assets/stylesheets/{claro → themes/claro}/layout/TabContainer.less +0 -0
  486. data/vendor/assets/stylesheets/{claro → themes/claro}/layout/TabContainer_rtl.css +0 -0
  487. data/vendor/assets/stylesheets/{claro → themes/claro}/layout/TabContainer_rtl.less +0 -0
  488. data/vendor/assets/stylesheets/themes/claro/variables.less +378 -0
  489. data/vendor/assets/stylesheets/{dijit.css → themes/dijit.css} +21 -9
  490. data/vendor/assets/stylesheets/{dijit_rtl.css → themes/dijit_rtl.css} +3 -0
  491. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/Calendar.css +0 -0
  492. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/Calendar_rtl.css +0 -0
  493. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/ColorPalette.css +0 -0
  494. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/Common.css +0 -0
  495. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/Dialog.css +0 -0
  496. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/Dialog_rtl.css +0 -0
  497. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/Editor.css +0 -0
  498. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/Editor_rtl.css +0 -0
  499. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/Menu.css +0 -0
  500. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/Menu_rtl.css +0 -0
  501. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/ProgressBar.css +0 -0
  502. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/TimePicker.css +0 -0
  503. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/TimePicker_rtl.css +0 -0
  504. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/TitlePane.css +0 -0
  505. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/TitlePane_rtl.css +0 -0
  506. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/Toolbar.css +0 -0
  507. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/Tree.css +0 -0
  508. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/Tree_rtl.css +0 -0
  509. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/form/Button.css +0 -0
  510. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/form/Button_rtl.css +0 -0
  511. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/form/Checkbox.css +0 -0
  512. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/form/Common.css +0 -0
  513. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/form/RadioButton.css +0 -0
  514. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/form/Select.css +0 -0
  515. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/form/Slider.css +0 -0
  516. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/form/Slider_rtl.css +0 -0
  517. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/form/TimeTextBox.css +0 -0
  518. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/layout/AccordionContainer.css +0 -0
  519. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/layout/AccordionContainer_rtl.css +0 -0
  520. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/layout/BorderContainer.css +0 -0
  521. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/layout/ContentPane.css +0 -0
  522. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/layout/SplitContainer.css +0 -0
  523. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/layout/TabContainer.css +0 -0
  524. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/layout/TabContainer_rtl.css +0 -0
  525. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/nihilo.css +22 -10
  526. data/vendor/assets/stylesheets/{nihilo → themes/nihilo}/nihilo_rtl.css +3 -0
  527. data/vendor/assets/stylesheets/{soria → themes/soria}/Calendar.css +0 -0
  528. data/vendor/assets/stylesheets/{soria → themes/soria}/Calendar_rtl.css +0 -0
  529. data/vendor/assets/stylesheets/{soria → themes/soria}/ColorPalette.css +0 -0
  530. data/vendor/assets/stylesheets/{soria → themes/soria}/Common.css +0 -0
  531. data/vendor/assets/stylesheets/{soria → themes/soria}/Dialog.css +0 -0
  532. data/vendor/assets/stylesheets/{soria → themes/soria}/Dialog_rtl.css +0 -0
  533. data/vendor/assets/stylesheets/{soria → themes/soria}/Editor.css +0 -0
  534. data/vendor/assets/stylesheets/{soria → themes/soria}/Editor_rtl.css +0 -0
  535. data/vendor/assets/stylesheets/{soria → themes/soria}/Menu.css +0 -0
  536. data/vendor/assets/stylesheets/{soria → themes/soria}/Menu_rtl.css +0 -0
  537. data/vendor/assets/stylesheets/{soria → themes/soria}/ProgressBar.css +0 -0
  538. data/vendor/assets/stylesheets/{soria → themes/soria}/TimePicker.css +0 -0
  539. data/vendor/assets/stylesheets/{soria → themes/soria}/TimePicker_rtl.css +0 -0
  540. data/vendor/assets/stylesheets/{soria → themes/soria}/TitlePane.css +0 -0
  541. data/vendor/assets/stylesheets/{soria → themes/soria}/TitlePane_rtl.css +0 -0
  542. data/vendor/assets/stylesheets/{soria → themes/soria}/Toolbar.css +0 -0
  543. data/vendor/assets/stylesheets/{soria → themes/soria}/Tree.css +0 -0
  544. data/vendor/assets/stylesheets/{soria → themes/soria}/Tree_rtl.css +0 -0
  545. data/vendor/assets/stylesheets/{soria → themes/soria}/form/Button.css +0 -0
  546. data/vendor/assets/stylesheets/{soria → themes/soria}/form/Button_rtl.css +0 -0
  547. data/vendor/assets/stylesheets/{soria → themes/soria}/form/Checkbox.css +0 -0
  548. data/vendor/assets/stylesheets/{soria → themes/soria}/form/Common.css +0 -0
  549. data/vendor/assets/stylesheets/{soria → themes/soria}/form/RadioButton.css +0 -0
  550. data/vendor/assets/stylesheets/{soria → themes/soria}/form/Select.css +0 -0
  551. data/vendor/assets/stylesheets/{soria → themes/soria}/form/Slider.css +0 -0
  552. data/vendor/assets/stylesheets/{soria → themes/soria}/form/Slider_rtl.css +0 -0
  553. data/vendor/assets/stylesheets/{soria → themes/soria}/form/TimeTextBox.css +0 -0
  554. data/vendor/assets/stylesheets/{soria → themes/soria}/layout/AccordionContainer.css +0 -0
  555. data/vendor/assets/stylesheets/{soria → themes/soria}/layout/AccordionContainer_rtl.css +0 -0
  556. data/vendor/assets/stylesheets/{soria → themes/soria}/layout/BorderContainer.css +0 -0
  557. data/vendor/assets/stylesheets/{soria → themes/soria}/layout/ContentPane.css +0 -0
  558. data/vendor/assets/stylesheets/{soria → themes/soria}/layout/SplitContainer.css +0 -0
  559. data/vendor/assets/stylesheets/{soria → themes/soria}/layout/TabContainer.css +0 -0
  560. data/vendor/assets/stylesheets/{soria → themes/soria}/layout/TabContainer_rtl.css +0 -0
  561. data/vendor/assets/stylesheets/{soria → themes/soria}/soria.css +22 -10
  562. data/vendor/assets/stylesheets/{soria → themes/soria}/soria_rtl.css +3 -0
  563. data/vendor/assets/stylesheets/{tundra → themes/tundra}/Calendar.css +0 -0
  564. data/vendor/assets/stylesheets/{tundra → themes/tundra}/Calendar_rtl.css +0 -0
  565. data/vendor/assets/stylesheets/{tundra → themes/tundra}/ColorPalette.css +0 -0
  566. data/vendor/assets/stylesheets/{tundra → themes/tundra}/Common.css +0 -0
  567. data/vendor/assets/stylesheets/{tundra → themes/tundra}/Dialog.css +0 -0
  568. data/vendor/assets/stylesheets/{tundra → themes/tundra}/Dialog_rtl.css +0 -0
  569. data/vendor/assets/stylesheets/{tundra → themes/tundra}/Editor.css +0 -0
  570. data/vendor/assets/stylesheets/{tundra → themes/tundra}/Editor_rtl.css +0 -0
  571. data/vendor/assets/stylesheets/{tundra → themes/tundra}/Menu.css +0 -0
  572. data/vendor/assets/stylesheets/{tundra → themes/tundra}/Menu_rtl.css +0 -0
  573. data/vendor/assets/stylesheets/{tundra → themes/tundra}/ProgressBar.css +0 -0
  574. data/vendor/assets/stylesheets/{tundra → themes/tundra}/TimePicker.css +0 -0
  575. data/vendor/assets/stylesheets/{tundra → themes/tundra}/TimePicker_rtl.css +0 -0
  576. data/vendor/assets/stylesheets/{tundra → themes/tundra}/TitlePane.css +0 -0
  577. data/vendor/assets/stylesheets/{tundra → themes/tundra}/TitlePane_rtl.css +0 -0
  578. data/vendor/assets/stylesheets/{tundra → themes/tundra}/Toolbar.css +0 -0
  579. data/vendor/assets/stylesheets/{tundra → themes/tundra}/Tree.css +0 -0
  580. data/vendor/assets/stylesheets/{tundra → themes/tundra}/Tree_rtl.css +0 -0
  581. data/vendor/assets/stylesheets/{tundra → themes/tundra}/form/Button.css +0 -0
  582. data/vendor/assets/stylesheets/{tundra → themes/tundra}/form/Checkbox.css +0 -0
  583. data/vendor/assets/stylesheets/{tundra → themes/tundra}/form/Common.css +0 -0
  584. data/vendor/assets/stylesheets/{tundra → themes/tundra}/form/RadioButton.css +0 -0
  585. data/vendor/assets/stylesheets/{tundra → themes/tundra}/form/Select.css +0 -0
  586. data/vendor/assets/stylesheets/{tundra → themes/tundra}/form/Slider.css +0 -0
  587. data/vendor/assets/stylesheets/{tundra → themes/tundra}/form/Slider_rtl.css +0 -0
  588. data/vendor/assets/stylesheets/{tundra → themes/tundra}/layout/AccordionContainer.css +0 -0
  589. data/vendor/assets/stylesheets/{tundra → themes/tundra}/layout/BorderContainer.css +0 -0
  590. data/vendor/assets/stylesheets/{tundra → themes/tundra}/layout/ContentPane.css +0 -0
  591. data/vendor/assets/stylesheets/{tundra → themes/tundra}/layout/SplitContainer.css +0 -0
  592. data/vendor/assets/stylesheets/{tundra → themes/tundra}/layout/TabContainer.css +0 -0
  593. data/vendor/assets/stylesheets/{tundra → themes/tundra}/layout/TabContainer_rtl.css +0 -0
  594. data/vendor/assets/stylesheets/{tundra → themes/tundra}/tundra.css +25 -10
  595. data/vendor/assets/stylesheets/{tundra → themes/tundra}/tundra_rtl.css +3 -0
  596. metadata +510 -928
  597. data/LICENSE +0 -19
  598. data/vendor/assets/javascripts/dijit/BackgroundIframe.js.uncompressed.js +0 -110
  599. data/vendor/assets/javascripts/dijit/Calendar.js.uncompressed.js +0 -312
  600. data/vendor/assets/javascripts/dijit/CalendarLite.js.uncompressed.js +0 -500
  601. data/vendor/assets/javascripts/dijit/CheckedMenuItem.js.uncompressed.js +0 -53
  602. data/vendor/assets/javascripts/dijit/ColorPalette.js.uncompressed.js +0 -161
  603. data/vendor/assets/javascripts/dijit/Declaration.js.uncompressed.js +0 -105
  604. data/vendor/assets/javascripts/dijit/Destroyable.js.uncompressed.js +0 -59
  605. data/vendor/assets/javascripts/dijit/Dialog.js.uncompressed.js +0 -640
  606. data/vendor/assets/javascripts/dijit/DialogUnderlay.js.uncompressed.js +0 -102
  607. data/vendor/assets/javascripts/dijit/DropDownMenu.js.uncompressed.js +0 -58
  608. data/vendor/assets/javascripts/dijit/Editor.js.uncompressed.js +0 -864
  609. data/vendor/assets/javascripts/dijit/InlineEditBox.js.uncompressed.js +0 -656
  610. data/vendor/assets/javascripts/dijit/LICENSE +0 -195
  611. data/vendor/assets/javascripts/dijit/Menu.js.uncompressed.js +0 -348
  612. data/vendor/assets/javascripts/dijit/MenuBar.js.uncompressed.js +0 -92
  613. data/vendor/assets/javascripts/dijit/MenuBarItem.js.uncompressed.js +0 -28
  614. data/vendor/assets/javascripts/dijit/MenuItem.js.uncompressed.js +0 -187
  615. data/vendor/assets/javascripts/dijit/MenuSeparator.js.uncompressed.js +0 -35
  616. data/vendor/assets/javascripts/dijit/PopupMenuBarItem.js.uncompressed.js +0 -16
  617. data/vendor/assets/javascripts/dijit/PopupMenuItem.js.uncompressed.js +0 -73
  618. data/vendor/assets/javascripts/dijit/ProgressBar.js.uncompressed.js +0 -171
  619. data/vendor/assets/javascripts/dijit/TitlePane.js.uncompressed.js +0 -266
  620. data/vendor/assets/javascripts/dijit/Toolbar.js.uncompressed.js +0 -43
  621. data/vendor/assets/javascripts/dijit/ToolbarSeparator.js.uncompressed.js +0 -31
  622. data/vendor/assets/javascripts/dijit/Tooltip.js.uncompressed.js +0 -542
  623. data/vendor/assets/javascripts/dijit/TooltipDialog.js.uncompressed.js +0 -174
  624. data/vendor/assets/javascripts/dijit/Tree.js.uncompressed.js +0 -1909
  625. data/vendor/assets/javascripts/dijit/Viewport.js.uncompressed.js +0 -50
  626. data/vendor/assets/javascripts/dijit/WidgetSet.js.uncompressed.js +0 -247
  627. data/vendor/assets/javascripts/dijit/_BidiSupport.js.uncompressed.js +0 -113
  628. data/vendor/assets/javascripts/dijit/_Calendar.js.uncompressed.js +0 -22
  629. data/vendor/assets/javascripts/dijit/_Contained.js.uncompressed.js +0 -60
  630. data/vendor/assets/javascripts/dijit/_Container.js.uncompressed.js +0 -94
  631. data/vendor/assets/javascripts/dijit/_CssStateMixin.js.uncompressed.js +0 -320
  632. data/vendor/assets/javascripts/dijit/_DialogMixin.js.uncompressed.js +0 -70
  633. data/vendor/assets/javascripts/dijit/_FocusMixin.js.uncompressed.js +0 -66
  634. data/vendor/assets/javascripts/dijit/_HasDropDown.js.uncompressed.js +0 -508
  635. data/vendor/assets/javascripts/dijit/_KeyNavContainer.js.uncompressed.js +0 -257
  636. data/vendor/assets/javascripts/dijit/_MenuBase.js.uncompressed.js +0 -418
  637. data/vendor/assets/javascripts/dijit/_OnDijitClickMixin.js.uncompressed.js +0 -50
  638. data/vendor/assets/javascripts/dijit/_PaletteMixin.js.uncompressed.js +0 -340
  639. data/vendor/assets/javascripts/dijit/_Templated.js.uncompressed.js +0 -64
  640. data/vendor/assets/javascripts/dijit/_TemplatedMixin.js.uncompressed.js +0 -308
  641. data/vendor/assets/javascripts/dijit/_TimePicker.js.uncompressed.js +0 -519
  642. data/vendor/assets/javascripts/dijit/_Widget.js.uncompressed.js +0 -362
  643. data/vendor/assets/javascripts/dijit/_WidgetBase.js.uncompressed.js +0 -1123
  644. data/vendor/assets/javascripts/dijit/_WidgetsInTemplateMixin.js.uncompressed.js +0 -65
  645. data/vendor/assets/javascripts/dijit/_base.js.uncompressed.js +0 -27
  646. data/vendor/assets/javascripts/dijit/_base/focus.js.uncompressed.js +0 -323
  647. data/vendor/assets/javascripts/dijit/_base/manager.js.uncompressed.js +0 -35
  648. data/vendor/assets/javascripts/dijit/_base/place.js.uncompressed.js +0 -131
  649. data/vendor/assets/javascripts/dijit/_base/popup.js.uncompressed.js +0 -58
  650. data/vendor/assets/javascripts/dijit/_base/scroll.js.uncompressed.js +0 -22
  651. data/vendor/assets/javascripts/dijit/_base/sniff.js.uncompressed.js +0 -12
  652. data/vendor/assets/javascripts/dijit/_base/typematic.js.uncompressed.js +0 -10
  653. data/vendor/assets/javascripts/dijit/_base/wai.js.uncompressed.js +0 -109
  654. data/vendor/assets/javascripts/dijit/_base/window.js.uncompressed.js +0 -18
  655. data/vendor/assets/javascripts/dijit/_editor/RichText.js.uncompressed.js +0 -2874
  656. data/vendor/assets/javascripts/dijit/_editor/_Plugin.js.uncompressed.js +0 -302
  657. data/vendor/assets/javascripts/dijit/_editor/html.js.uncompressed.js +0 -223
  658. data/vendor/assets/javascripts/dijit/_editor/nls/FontChoice.js.uncompressed.js +0 -62
  659. data/vendor/assets/javascripts/dijit/_editor/nls/LinkDialog.js.uncompressed.js +0 -48
  660. data/vendor/assets/javascripts/dijit/_editor/nls/ar/FontChoice.js.uncompressed.js +0 -25
  661. data/vendor/assets/javascripts/dijit/_editor/nls/ar/LinkDialog.js.uncompressed.js +0 -14
  662. data/vendor/assets/javascripts/dijit/_editor/nls/ar/commands.js.uncompressed.js +0 -51
  663. data/vendor/assets/javascripts/dijit/_editor/nls/az/FontChoice.js.uncompressed.js +0 -25
  664. data/vendor/assets/javascripts/dijit/_editor/nls/az/LinkDialog.js.uncompressed.js +0 -14
  665. data/vendor/assets/javascripts/dijit/_editor/nls/az/commands.js.uncompressed.js +0 -50
  666. data/vendor/assets/javascripts/dijit/_editor/nls/ca/FontChoice.js.uncompressed.js +0 -25
  667. data/vendor/assets/javascripts/dijit/_editor/nls/ca/LinkDialog.js.uncompressed.js +0 -14
  668. data/vendor/assets/javascripts/dijit/_editor/nls/ca/commands.js.uncompressed.js +0 -51
  669. data/vendor/assets/javascripts/dijit/_editor/nls/commands.js.uncompressed.js +0 -85
  670. data/vendor/assets/javascripts/dijit/_editor/nls/cs/FontChoice.js.uncompressed.js +0 -25
  671. data/vendor/assets/javascripts/dijit/_editor/nls/cs/LinkDialog.js.uncompressed.js +0 -14
  672. data/vendor/assets/javascripts/dijit/_editor/nls/cs/commands.js.uncompressed.js +0 -51
  673. data/vendor/assets/javascripts/dijit/_editor/nls/da/FontChoice.js.uncompressed.js +0 -25
  674. data/vendor/assets/javascripts/dijit/_editor/nls/da/LinkDialog.js.uncompressed.js +0 -14
  675. data/vendor/assets/javascripts/dijit/_editor/nls/da/commands.js.uncompressed.js +0 -51
  676. data/vendor/assets/javascripts/dijit/_editor/nls/de/FontChoice.js.uncompressed.js +0 -25
  677. data/vendor/assets/javascripts/dijit/_editor/nls/de/LinkDialog.js.uncompressed.js +0 -14
  678. data/vendor/assets/javascripts/dijit/_editor/nls/de/commands.js.uncompressed.js +0 -51
  679. data/vendor/assets/javascripts/dijit/_editor/nls/el/FontChoice.js.uncompressed.js +0 -25
  680. data/vendor/assets/javascripts/dijit/_editor/nls/el/LinkDialog.js.uncompressed.js +0 -14
  681. data/vendor/assets/javascripts/dijit/_editor/nls/el/commands.js.uncompressed.js +0 -51
  682. data/vendor/assets/javascripts/dijit/_editor/nls/es/FontChoice.js.uncompressed.js +0 -25
  683. data/vendor/assets/javascripts/dijit/_editor/nls/es/LinkDialog.js.uncompressed.js +0 -14
  684. data/vendor/assets/javascripts/dijit/_editor/nls/es/commands.js.uncompressed.js +0 -51
  685. data/vendor/assets/javascripts/dijit/_editor/nls/fi/FontChoice.js.uncompressed.js +0 -25
  686. data/vendor/assets/javascripts/dijit/_editor/nls/fi/LinkDialog.js.uncompressed.js +0 -14
  687. data/vendor/assets/javascripts/dijit/_editor/nls/fi/commands.js.uncompressed.js +0 -51
  688. data/vendor/assets/javascripts/dijit/_editor/nls/fr/FontChoice.js.uncompressed.js +0 -25
  689. data/vendor/assets/javascripts/dijit/_editor/nls/fr/LinkDialog.js.uncompressed.js +0 -14
  690. data/vendor/assets/javascripts/dijit/_editor/nls/fr/commands.js.uncompressed.js +0 -51
  691. data/vendor/assets/javascripts/dijit/_editor/nls/he/FontChoice.js.uncompressed.js +0 -25
  692. data/vendor/assets/javascripts/dijit/_editor/nls/he/LinkDialog.js.uncompressed.js +0 -14
  693. data/vendor/assets/javascripts/dijit/_editor/nls/he/commands.js.uncompressed.js +0 -51
  694. data/vendor/assets/javascripts/dijit/_editor/nls/hr/FontChoice.js.uncompressed.js +0 -25
  695. data/vendor/assets/javascripts/dijit/_editor/nls/hr/LinkDialog.js.uncompressed.js +0 -14
  696. data/vendor/assets/javascripts/dijit/_editor/nls/hr/commands.js.uncompressed.js +0 -51
  697. data/vendor/assets/javascripts/dijit/_editor/nls/hu/FontChoice.js.uncompressed.js +0 -25
  698. data/vendor/assets/javascripts/dijit/_editor/nls/hu/LinkDialog.js.uncompressed.js +0 -14
  699. data/vendor/assets/javascripts/dijit/_editor/nls/hu/commands.js.uncompressed.js +0 -51
  700. data/vendor/assets/javascripts/dijit/_editor/nls/it/FontChoice.js.uncompressed.js +0 -25
  701. data/vendor/assets/javascripts/dijit/_editor/nls/it/LinkDialog.js.uncompressed.js +0 -14
  702. data/vendor/assets/javascripts/dijit/_editor/nls/it/commands.js.uncompressed.js +0 -51
  703. data/vendor/assets/javascripts/dijit/_editor/nls/ja/FontChoice.js.uncompressed.js +0 -25
  704. data/vendor/assets/javascripts/dijit/_editor/nls/ja/LinkDialog.js.uncompressed.js +0 -14
  705. data/vendor/assets/javascripts/dijit/_editor/nls/ja/commands.js.uncompressed.js +0 -51
  706. data/vendor/assets/javascripts/dijit/_editor/nls/kk/FontChoice.js.uncompressed.js +0 -25
  707. data/vendor/assets/javascripts/dijit/_editor/nls/kk/LinkDialog.js.uncompressed.js +0 -14
  708. data/vendor/assets/javascripts/dijit/_editor/nls/kk/commands.js.uncompressed.js +0 -51
  709. data/vendor/assets/javascripts/dijit/_editor/nls/ko/FontChoice.js.uncompressed.js +0 -25
  710. data/vendor/assets/javascripts/dijit/_editor/nls/ko/LinkDialog.js.uncompressed.js +0 -14
  711. data/vendor/assets/javascripts/dijit/_editor/nls/ko/commands.js.uncompressed.js +0 -51
  712. data/vendor/assets/javascripts/dijit/_editor/nls/nb/FontChoice.js.uncompressed.js +0 -25
  713. data/vendor/assets/javascripts/dijit/_editor/nls/nb/LinkDialog.js.uncompressed.js +0 -14
  714. data/vendor/assets/javascripts/dijit/_editor/nls/nb/commands.js.uncompressed.js +0 -51
  715. data/vendor/assets/javascripts/dijit/_editor/nls/nl/FontChoice.js.uncompressed.js +0 -25
  716. data/vendor/assets/javascripts/dijit/_editor/nls/nl/LinkDialog.js.uncompressed.js +0 -14
  717. data/vendor/assets/javascripts/dijit/_editor/nls/nl/commands.js.uncompressed.js +0 -51
  718. data/vendor/assets/javascripts/dijit/_editor/nls/pl/FontChoice.js.uncompressed.js +0 -25
  719. data/vendor/assets/javascripts/dijit/_editor/nls/pl/LinkDialog.js.uncompressed.js +0 -14
  720. data/vendor/assets/javascripts/dijit/_editor/nls/pl/commands.js.uncompressed.js +0 -51
  721. data/vendor/assets/javascripts/dijit/_editor/nls/pt-pt/FontChoice.js.uncompressed.js +0 -25
  722. data/vendor/assets/javascripts/dijit/_editor/nls/pt-pt/LinkDialog.js.uncompressed.js +0 -14
  723. data/vendor/assets/javascripts/dijit/_editor/nls/pt-pt/commands.js.uncompressed.js +0 -49
  724. data/vendor/assets/javascripts/dijit/_editor/nls/pt/FontChoice.js.uncompressed.js +0 -25
  725. data/vendor/assets/javascripts/dijit/_editor/nls/pt/LinkDialog.js.uncompressed.js +0 -14
  726. data/vendor/assets/javascripts/dijit/_editor/nls/pt/commands.js.uncompressed.js +0 -51
  727. data/vendor/assets/javascripts/dijit/_editor/nls/ro/FontChoice.js.uncompressed.js +0 -25
  728. data/vendor/assets/javascripts/dijit/_editor/nls/ro/LinkDialog.js.uncompressed.js +0 -14
  729. data/vendor/assets/javascripts/dijit/_editor/nls/ro/commands.js.uncompressed.js +0 -51
  730. data/vendor/assets/javascripts/dijit/_editor/nls/ru/FontChoice.js.uncompressed.js +0 -25
  731. data/vendor/assets/javascripts/dijit/_editor/nls/ru/LinkDialog.js.uncompressed.js +0 -14
  732. data/vendor/assets/javascripts/dijit/_editor/nls/ru/commands.js.uncompressed.js +0 -51
  733. data/vendor/assets/javascripts/dijit/_editor/nls/sk/FontChoice.js.uncompressed.js +0 -25
  734. data/vendor/assets/javascripts/dijit/_editor/nls/sk/LinkDialog.js.uncompressed.js +0 -14
  735. data/vendor/assets/javascripts/dijit/_editor/nls/sk/commands.js.uncompressed.js +0 -51
  736. data/vendor/assets/javascripts/dijit/_editor/nls/sl/FontChoice.js.uncompressed.js +0 -25
  737. data/vendor/assets/javascripts/dijit/_editor/nls/sl/LinkDialog.js.uncompressed.js +0 -14
  738. data/vendor/assets/javascripts/dijit/_editor/nls/sl/commands.js.uncompressed.js +0 -49
  739. data/vendor/assets/javascripts/dijit/_editor/nls/sv/FontChoice.js.uncompressed.js +0 -25
  740. data/vendor/assets/javascripts/dijit/_editor/nls/sv/LinkDialog.js.uncompressed.js +0 -14
  741. data/vendor/assets/javascripts/dijit/_editor/nls/sv/commands.js.uncompressed.js +0 -51
  742. data/vendor/assets/javascripts/dijit/_editor/nls/th/FontChoice.js.uncompressed.js +0 -25
  743. data/vendor/assets/javascripts/dijit/_editor/nls/th/LinkDialog.js.uncompressed.js +0 -14
  744. data/vendor/assets/javascripts/dijit/_editor/nls/th/commands.js.uncompressed.js +0 -51
  745. data/vendor/assets/javascripts/dijit/_editor/nls/tr/FontChoice.js.uncompressed.js +0 -25
  746. data/vendor/assets/javascripts/dijit/_editor/nls/tr/LinkDialog.js.uncompressed.js +0 -14
  747. data/vendor/assets/javascripts/dijit/_editor/nls/tr/commands.js.uncompressed.js +0 -51
  748. data/vendor/assets/javascripts/dijit/_editor/nls/zh-tw/FontChoice.js.uncompressed.js +0 -25
  749. data/vendor/assets/javascripts/dijit/_editor/nls/zh-tw/LinkDialog.js.uncompressed.js +0 -14
  750. data/vendor/assets/javascripts/dijit/_editor/nls/zh-tw/commands.js.uncompressed.js +0 -51
  751. data/vendor/assets/javascripts/dijit/_editor/nls/zh/FontChoice.js.uncompressed.js +0 -25
  752. data/vendor/assets/javascripts/dijit/_editor/nls/zh/LinkDialog.js.uncompressed.js +0 -14
  753. data/vendor/assets/javascripts/dijit/_editor/nls/zh/commands.js.uncompressed.js +0 -51
  754. data/vendor/assets/javascripts/dijit/_editor/plugins/AlwaysShowToolbar.js.uncompressed.js +0 -191
  755. data/vendor/assets/javascripts/dijit/_editor/plugins/EnterKeyHandling.js.uncompressed.js +0 -622
  756. data/vendor/assets/javascripts/dijit/_editor/plugins/FontChoice.js.uncompressed.js +0 -583
  757. data/vendor/assets/javascripts/dijit/_editor/plugins/FullScreen.js.uncompressed.js +0 -450
  758. data/vendor/assets/javascripts/dijit/_editor/plugins/LinkDialog.js.uncompressed.js +0 -607
  759. data/vendor/assets/javascripts/dijit/_editor/plugins/NewPage.js.uncompressed.js +0 -77
  760. data/vendor/assets/javascripts/dijit/_editor/plugins/Print.js.uncompressed.js +0 -123
  761. data/vendor/assets/javascripts/dijit/_editor/plugins/TabIndent.js.uncompressed.js +0 -60
  762. data/vendor/assets/javascripts/dijit/_editor/plugins/TextColor.js.uncompressed.js +0 -114
  763. data/vendor/assets/javascripts/dijit/_editor/plugins/ToggleDir.js.uncompressed.js +0 -69
  764. data/vendor/assets/javascripts/dijit/_editor/plugins/ViewSource.js.uncompressed.js +0 -577
  765. data/vendor/assets/javascripts/dijit/_editor/range.js.uncompressed.js +0 -559
  766. data/vendor/assets/javascripts/dijit/_editor/selection.js.uncompressed.js +0 -383
  767. data/vendor/assets/javascripts/dijit/_tree/dndSource.js.uncompressed.js +0 -15
  768. data/vendor/assets/javascripts/dijit/a11y.js.uncompressed.js +0 -177
  769. data/vendor/assets/javascripts/dijit/a11yclick.js.uncompressed.js +0 -131
  770. data/vendor/assets/javascripts/dijit/dijit-all.js.uncompressed.js +0 -33581
  771. data/vendor/assets/javascripts/dijit/dijit.js.uncompressed.js +0 -8131
  772. data/vendor/assets/javascripts/dijit/focus.js.uncompressed.js +0 -364
  773. data/vendor/assets/javascripts/dijit/form/Button.js.uncompressed.js +0 -121
  774. data/vendor/assets/javascripts/dijit/form/CheckBox.js.uncompressed.js +0 -116
  775. data/vendor/assets/javascripts/dijit/form/ComboBox.js.uncompressed.js +0 -27
  776. data/vendor/assets/javascripts/dijit/form/ComboBoxMixin.js.uncompressed.js +0 -143
  777. data/vendor/assets/javascripts/dijit/form/ComboButton.js.uncompressed.js +0 -85
  778. data/vendor/assets/javascripts/dijit/form/CurrencyTextBox.js.uncompressed.js +0 -85
  779. data/vendor/assets/javascripts/dijit/form/DataList.js.uncompressed.js +0 -69
  780. data/vendor/assets/javascripts/dijit/form/DateTextBox.js.uncompressed.js +0 -28
  781. data/vendor/assets/javascripts/dijit/form/DropDownButton.js.uncompressed.js +0 -99
  782. data/vendor/assets/javascripts/dijit/form/FilteringSelect.js.uncompressed.js +0 -234
  783. data/vendor/assets/javascripts/dijit/form/Form.js.uncompressed.js +0 -163
  784. data/vendor/assets/javascripts/dijit/form/HorizontalRule.js.uncompressed.js +0 -69
  785. data/vendor/assets/javascripts/dijit/form/HorizontalRuleLabels.js.uncompressed.js +0 -92
  786. data/vendor/assets/javascripts/dijit/form/HorizontalSlider.js.uncompressed.js +0 -349
  787. data/vendor/assets/javascripts/dijit/form/MappedTextBox.js.uncompressed.js +0 -81
  788. data/vendor/assets/javascripts/dijit/form/MultiSelect.js.uncompressed.js +0 -134
  789. data/vendor/assets/javascripts/dijit/form/NumberSpinner.js.uncompressed.js +0 -67
  790. data/vendor/assets/javascripts/dijit/form/NumberTextBox.js.uncompressed.js +0 -275
  791. data/vendor/assets/javascripts/dijit/form/RadioButton.js.uncompressed.js +0 -16
  792. data/vendor/assets/javascripts/dijit/form/RangeBoundTextBox.js.uncompressed.js +0 -134
  793. data/vendor/assets/javascripts/dijit/form/Select.js.uncompressed.js +0 -406
  794. data/vendor/assets/javascripts/dijit/form/SimpleTextarea.js.uncompressed.js +0 -92
  795. data/vendor/assets/javascripts/dijit/form/Slider.js.uncompressed.js +0 -23
  796. data/vendor/assets/javascripts/dijit/form/TextBox.js.uncompressed.js +0 -157
  797. data/vendor/assets/javascripts/dijit/form/Textarea.js.uncompressed.js +0 -42
  798. data/vendor/assets/javascripts/dijit/form/TimeTextBox.js.uncompressed.js +0 -79
  799. data/vendor/assets/javascripts/dijit/form/ToggleButton.js.uncompressed.js +0 -26
  800. data/vendor/assets/javascripts/dijit/form/ValidationTextBox.js.uncompressed.js +0 -327
  801. data/vendor/assets/javascripts/dijit/form/VerticalRule.js.uncompressed.js +0 -28
  802. data/vendor/assets/javascripts/dijit/form/VerticalRuleLabels.js.uncompressed.js +0 -26
  803. data/vendor/assets/javascripts/dijit/form/VerticalSlider.js.uncompressed.js +0 -35
  804. data/vendor/assets/javascripts/dijit/form/_AutoCompleterMixin.js.uncompressed.js +0 -581
  805. data/vendor/assets/javascripts/dijit/form/_ButtonMixin.js.uncompressed.js +0 -84
  806. data/vendor/assets/javascripts/dijit/form/_CheckBoxMixin.js.uncompressed.js +0 -78
  807. data/vendor/assets/javascripts/dijit/form/_ComboBoxMenu.js.uncompressed.js +0 -131
  808. data/vendor/assets/javascripts/dijit/form/_ComboBoxMenuMixin.js.uncompressed.js +0 -189
  809. data/vendor/assets/javascripts/dijit/form/_DateTimeTextBox.js.uncompressed.js +0 -259
  810. data/vendor/assets/javascripts/dijit/form/_ExpandingTextAreaMixin.js.uncompressed.js +0 -136
  811. data/vendor/assets/javascripts/dijit/form/_FormMixin.js.uncompressed.js +0 -456
  812. data/vendor/assets/javascripts/dijit/form/_FormSelectWidget.js.uncompressed.js +0 -706
  813. data/vendor/assets/javascripts/dijit/form/_FormValueMixin.js.uncompressed.js +0 -90
  814. data/vendor/assets/javascripts/dijit/form/_FormValueWidget.js.uncompressed.js +0 -51
  815. data/vendor/assets/javascripts/dijit/form/_FormWidget.js.uncompressed.js +0 -71
  816. data/vendor/assets/javascripts/dijit/form/_FormWidgetMixin.js.uncompressed.js +0 -223
  817. data/vendor/assets/javascripts/dijit/form/_ListBase.js.uncompressed.js +0 -135
  818. data/vendor/assets/javascripts/dijit/form/_ListMouseMixin.js.uncompressed.js +0 -79
  819. data/vendor/assets/javascripts/dijit/form/_RadioButtonMixin.js.uncompressed.js +0 -71
  820. data/vendor/assets/javascripts/dijit/form/_SearchMixin.js.uncompressed.js +0 -264
  821. data/vendor/assets/javascripts/dijit/form/_Spinner.js.uncompressed.js +0 -137
  822. data/vendor/assets/javascripts/dijit/form/_TextBoxMixin.js.uncompressed.js +0 -474
  823. data/vendor/assets/javascripts/dijit/form/_ToggleButtonMixin.js.uncompressed.js +0 -49
  824. data/vendor/assets/javascripts/dijit/form/nls/ComboBox.js.uncompressed.js +0 -40
  825. data/vendor/assets/javascripts/dijit/form/nls/Textarea.js.uncompressed.js +0 -43
  826. data/vendor/assets/javascripts/dijit/form/nls/ar/ComboBox.js.uncompressed.js +0 -6
  827. data/vendor/assets/javascripts/dijit/form/nls/ar/Textarea.js.uncompressed.js +0 -9
  828. data/vendor/assets/javascripts/dijit/form/nls/ar/validate.js.uncompressed.js +0 -7
  829. data/vendor/assets/javascripts/dijit/form/nls/az/ComboBox.js.uncompressed.js +0 -6
  830. data/vendor/assets/javascripts/dijit/form/nls/az/Textarea.js.uncompressed.js +0 -7
  831. data/vendor/assets/javascripts/dijit/form/nls/az/validate.js.uncompressed.js +0 -7
  832. data/vendor/assets/javascripts/dijit/form/nls/ca/ComboBox.js.uncompressed.js +0 -6
  833. data/vendor/assets/javascripts/dijit/form/nls/ca/Textarea.js.uncompressed.js +0 -9
  834. data/vendor/assets/javascripts/dijit/form/nls/ca/validate.js.uncompressed.js +0 -7
  835. data/vendor/assets/javascripts/dijit/form/nls/cs/ComboBox.js.uncompressed.js +0 -6
  836. data/vendor/assets/javascripts/dijit/form/nls/cs/Textarea.js.uncompressed.js +0 -9
  837. data/vendor/assets/javascripts/dijit/form/nls/cs/validate.js.uncompressed.js +0 -7
  838. data/vendor/assets/javascripts/dijit/form/nls/da/ComboBox.js.uncompressed.js +0 -6
  839. data/vendor/assets/javascripts/dijit/form/nls/da/Textarea.js.uncompressed.js +0 -9
  840. data/vendor/assets/javascripts/dijit/form/nls/da/validate.js.uncompressed.js +0 -7
  841. data/vendor/assets/javascripts/dijit/form/nls/de/ComboBox.js.uncompressed.js +0 -6
  842. data/vendor/assets/javascripts/dijit/form/nls/de/Textarea.js.uncompressed.js +0 -9
  843. data/vendor/assets/javascripts/dijit/form/nls/de/validate.js.uncompressed.js +0 -7
  844. data/vendor/assets/javascripts/dijit/form/nls/el/ComboBox.js.uncompressed.js +0 -6
  845. data/vendor/assets/javascripts/dijit/form/nls/el/Textarea.js.uncompressed.js +0 -9
  846. data/vendor/assets/javascripts/dijit/form/nls/el/validate.js.uncompressed.js +0 -7
  847. data/vendor/assets/javascripts/dijit/form/nls/es/ComboBox.js.uncompressed.js +0 -6
  848. data/vendor/assets/javascripts/dijit/form/nls/es/Textarea.js.uncompressed.js +0 -9
  849. data/vendor/assets/javascripts/dijit/form/nls/es/validate.js.uncompressed.js +0 -7
  850. data/vendor/assets/javascripts/dijit/form/nls/fi/ComboBox.js.uncompressed.js +0 -6
  851. data/vendor/assets/javascripts/dijit/form/nls/fi/Textarea.js.uncompressed.js +0 -9
  852. data/vendor/assets/javascripts/dijit/form/nls/fi/validate.js.uncompressed.js +0 -7
  853. data/vendor/assets/javascripts/dijit/form/nls/fr/ComboBox.js.uncompressed.js +0 -6
  854. data/vendor/assets/javascripts/dijit/form/nls/fr/Textarea.js.uncompressed.js +0 -9
  855. data/vendor/assets/javascripts/dijit/form/nls/fr/validate.js.uncompressed.js +0 -7
  856. data/vendor/assets/javascripts/dijit/form/nls/he/ComboBox.js.uncompressed.js +0 -6
  857. data/vendor/assets/javascripts/dijit/form/nls/he/Textarea.js.uncompressed.js +0 -9
  858. data/vendor/assets/javascripts/dijit/form/nls/he/validate.js.uncompressed.js +0 -7
  859. data/vendor/assets/javascripts/dijit/form/nls/hr/ComboBox.js.uncompressed.js +0 -6
  860. data/vendor/assets/javascripts/dijit/form/nls/hr/Textarea.js.uncompressed.js +0 -9
  861. data/vendor/assets/javascripts/dijit/form/nls/hr/validate.js.uncompressed.js +0 -7
  862. data/vendor/assets/javascripts/dijit/form/nls/hu/ComboBox.js.uncompressed.js +0 -6
  863. data/vendor/assets/javascripts/dijit/form/nls/hu/Textarea.js.uncompressed.js +0 -9
  864. data/vendor/assets/javascripts/dijit/form/nls/hu/validate.js.uncompressed.js +0 -7
  865. data/vendor/assets/javascripts/dijit/form/nls/it/ComboBox.js.uncompressed.js +0 -6
  866. data/vendor/assets/javascripts/dijit/form/nls/it/Textarea.js.uncompressed.js +0 -9
  867. data/vendor/assets/javascripts/dijit/form/nls/it/validate.js.uncompressed.js +0 -7
  868. data/vendor/assets/javascripts/dijit/form/nls/ja/ComboBox.js.uncompressed.js +0 -6
  869. data/vendor/assets/javascripts/dijit/form/nls/ja/Textarea.js.uncompressed.js +0 -9
  870. data/vendor/assets/javascripts/dijit/form/nls/ja/validate.js.uncompressed.js +0 -7
  871. data/vendor/assets/javascripts/dijit/form/nls/kk/ComboBox.js.uncompressed.js +0 -6
  872. data/vendor/assets/javascripts/dijit/form/nls/kk/Textarea.js.uncompressed.js +0 -9
  873. data/vendor/assets/javascripts/dijit/form/nls/kk/validate.js.uncompressed.js +0 -7
  874. data/vendor/assets/javascripts/dijit/form/nls/ko/ComboBox.js.uncompressed.js +0 -6
  875. data/vendor/assets/javascripts/dijit/form/nls/ko/Textarea.js.uncompressed.js +0 -9
  876. data/vendor/assets/javascripts/dijit/form/nls/ko/validate.js.uncompressed.js +0 -7
  877. data/vendor/assets/javascripts/dijit/form/nls/nb/ComboBox.js.uncompressed.js +0 -6
  878. data/vendor/assets/javascripts/dijit/form/nls/nb/Textarea.js.uncompressed.js +0 -9
  879. data/vendor/assets/javascripts/dijit/form/nls/nb/validate.js.uncompressed.js +0 -7
  880. data/vendor/assets/javascripts/dijit/form/nls/nl/ComboBox.js.uncompressed.js +0 -6
  881. data/vendor/assets/javascripts/dijit/form/nls/nl/Textarea.js.uncompressed.js +0 -9
  882. data/vendor/assets/javascripts/dijit/form/nls/nl/validate.js.uncompressed.js +0 -7
  883. data/vendor/assets/javascripts/dijit/form/nls/pl/ComboBox.js.uncompressed.js +0 -6
  884. data/vendor/assets/javascripts/dijit/form/nls/pl/Textarea.js.uncompressed.js +0 -9
  885. data/vendor/assets/javascripts/dijit/form/nls/pl/validate.js.uncompressed.js +0 -7
  886. data/vendor/assets/javascripts/dijit/form/nls/pt-pt/ComboBox.js.uncompressed.js +0 -6
  887. data/vendor/assets/javascripts/dijit/form/nls/pt-pt/Textarea.js.uncompressed.js +0 -9
  888. data/vendor/assets/javascripts/dijit/form/nls/pt-pt/validate.js.uncompressed.js +0 -7
  889. data/vendor/assets/javascripts/dijit/form/nls/pt/ComboBox.js.uncompressed.js +0 -6
  890. data/vendor/assets/javascripts/dijit/form/nls/pt/Textarea.js.uncompressed.js +0 -9
  891. data/vendor/assets/javascripts/dijit/form/nls/pt/validate.js.uncompressed.js +0 -7
  892. data/vendor/assets/javascripts/dijit/form/nls/ro/ComboBox.js.uncompressed.js +0 -6
  893. data/vendor/assets/javascripts/dijit/form/nls/ro/Textarea.js.uncompressed.js +0 -9
  894. data/vendor/assets/javascripts/dijit/form/nls/ro/validate.js.uncompressed.js +0 -7
  895. data/vendor/assets/javascripts/dijit/form/nls/ru/ComboBox.js.uncompressed.js +0 -6
  896. data/vendor/assets/javascripts/dijit/form/nls/ru/Textarea.js.uncompressed.js +0 -9
  897. data/vendor/assets/javascripts/dijit/form/nls/ru/validate.js.uncompressed.js +0 -7
  898. data/vendor/assets/javascripts/dijit/form/nls/sk/ComboBox.js.uncompressed.js +0 -6
  899. data/vendor/assets/javascripts/dijit/form/nls/sk/Textarea.js.uncompressed.js +0 -9
  900. data/vendor/assets/javascripts/dijit/form/nls/sk/validate.js.uncompressed.js +0 -7
  901. data/vendor/assets/javascripts/dijit/form/nls/sl/ComboBox.js.uncompressed.js +0 -6
  902. data/vendor/assets/javascripts/dijit/form/nls/sl/Textarea.js.uncompressed.js +0 -9
  903. data/vendor/assets/javascripts/dijit/form/nls/sl/validate.js.uncompressed.js +0 -7
  904. data/vendor/assets/javascripts/dijit/form/nls/sv/ComboBox.js.uncompressed.js +0 -6
  905. data/vendor/assets/javascripts/dijit/form/nls/sv/Textarea.js.uncompressed.js +0 -9
  906. data/vendor/assets/javascripts/dijit/form/nls/sv/validate.js.uncompressed.js +0 -7
  907. data/vendor/assets/javascripts/dijit/form/nls/th/ComboBox.js.uncompressed.js +0 -6
  908. data/vendor/assets/javascripts/dijit/form/nls/th/Textarea.js.uncompressed.js +0 -9
  909. data/vendor/assets/javascripts/dijit/form/nls/th/validate.js.uncompressed.js +0 -7
  910. data/vendor/assets/javascripts/dijit/form/nls/tr/ComboBox.js.uncompressed.js +0 -6
  911. data/vendor/assets/javascripts/dijit/form/nls/tr/Textarea.js.uncompressed.js +0 -9
  912. data/vendor/assets/javascripts/dijit/form/nls/tr/validate.js.uncompressed.js +0 -7
  913. data/vendor/assets/javascripts/dijit/form/nls/validate.js.uncompressed.js +0 -41
  914. data/vendor/assets/javascripts/dijit/form/nls/zh-tw/ComboBox.js.uncompressed.js +0 -6
  915. data/vendor/assets/javascripts/dijit/form/nls/zh-tw/Textarea.js.uncompressed.js +0 -9
  916. data/vendor/assets/javascripts/dijit/form/nls/zh-tw/validate.js.uncompressed.js +0 -7
  917. data/vendor/assets/javascripts/dijit/form/nls/zh/ComboBox.js.uncompressed.js +0 -6
  918. data/vendor/assets/javascripts/dijit/form/nls/zh/Textarea.js.uncompressed.js +0 -9
  919. data/vendor/assets/javascripts/dijit/form/nls/zh/validate.js.uncompressed.js +0 -7
  920. data/vendor/assets/javascripts/dijit/hccss.js.uncompressed.js +0 -23
  921. data/vendor/assets/javascripts/dijit/layout/AccordionContainer.js.uncompressed.js +0 -540
  922. data/vendor/assets/javascripts/dijit/layout/AccordionPane.js.uncompressed.js +0 -25
  923. data/vendor/assets/javascripts/dijit/layout/BorderContainer.js.uncompressed.js +0 -547
  924. data/vendor/assets/javascripts/dijit/layout/ContentPane.js.uncompressed.js +0 -645
  925. data/vendor/assets/javascripts/dijit/layout/LayoutContainer.js.uncompressed.js +0 -91
  926. data/vendor/assets/javascripts/dijit/layout/LinkPane.js.uncompressed.js +0 -44
  927. data/vendor/assets/javascripts/dijit/layout/ScrollingTabController.js.uncompressed.js +0 -500
  928. data/vendor/assets/javascripts/dijit/layout/SplitContainer.js.uncompressed.js +0 -584
  929. data/vendor/assets/javascripts/dijit/layout/StackContainer.js.uncompressed.js +0 -374
  930. data/vendor/assets/javascripts/dijit/layout/StackController.js.uncompressed.js +0 -389
  931. data/vendor/assets/javascripts/dijit/layout/TabContainer.js.uncompressed.js +0 -77
  932. data/vendor/assets/javascripts/dijit/layout/TabController.js.uncompressed.js +0 -171
  933. data/vendor/assets/javascripts/dijit/layout/_ContentPaneResizeMixin.js.uncompressed.js +0 -234
  934. data/vendor/assets/javascripts/dijit/layout/_LayoutWidget.js.uncompressed.js +0 -185
  935. data/vendor/assets/javascripts/dijit/layout/_TabContainerBase.js.uncompressed.js +0 -146
  936. data/vendor/assets/javascripts/dijit/layout/utils.js.uncompressed.js +0 -145
  937. data/vendor/assets/javascripts/dijit/main.js.uncompressed.js +0 -16
  938. data/vendor/assets/javascripts/dijit/nls/ar/common.js.uncompressed.js +0 -8
  939. data/vendor/assets/javascripts/dijit/nls/ar/loading.js.uncompressed.js +0 -6
  940. data/vendor/assets/javascripts/dijit/nls/az/common.js.uncompressed.js +0 -8
  941. data/vendor/assets/javascripts/dijit/nls/az/loading.js.uncompressed.js +0 -6
  942. data/vendor/assets/javascripts/dijit/nls/ca/common.js.uncompressed.js +0 -8
  943. data/vendor/assets/javascripts/dijit/nls/ca/loading.js.uncompressed.js +0 -6
  944. data/vendor/assets/javascripts/dijit/nls/common.js.uncompressed.js +0 -42
  945. data/vendor/assets/javascripts/dijit/nls/cs/common.js.uncompressed.js +0 -8
  946. data/vendor/assets/javascripts/dijit/nls/cs/loading.js.uncompressed.js +0 -6
  947. data/vendor/assets/javascripts/dijit/nls/da/common.js.uncompressed.js +0 -8
  948. data/vendor/assets/javascripts/dijit/nls/da/loading.js.uncompressed.js +0 -6
  949. data/vendor/assets/javascripts/dijit/nls/de/common.js.uncompressed.js +0 -8
  950. data/vendor/assets/javascripts/dijit/nls/de/loading.js.uncompressed.js +0 -6
  951. data/vendor/assets/javascripts/dijit/nls/dijit-all_ROOT.js.uncompressed.js +0 -21
  952. data/vendor/assets/javascripts/dijit/nls/dijit-all_ar.js.uncompressed.js +0 -21
  953. data/vendor/assets/javascripts/dijit/nls/dijit-all_ca.js.uncompressed.js +0 -21
  954. data/vendor/assets/javascripts/dijit/nls/dijit-all_cs.js.uncompressed.js +0 -21
  955. data/vendor/assets/javascripts/dijit/nls/dijit-all_da.js.uncompressed.js +0 -21
  956. data/vendor/assets/javascripts/dijit/nls/dijit-all_de.js.uncompressed.js +0 -21
  957. data/vendor/assets/javascripts/dijit/nls/dijit-all_el.js.uncompressed.js +0 -21
  958. data/vendor/assets/javascripts/dijit/nls/dijit-all_en-gb.js.uncompressed.js +0 -21
  959. data/vendor/assets/javascripts/dijit/nls/dijit-all_en-us.js.uncompressed.js +0 -21
  960. data/vendor/assets/javascripts/dijit/nls/dijit-all_es-es.js.uncompressed.js +0 -21
  961. data/vendor/assets/javascripts/dijit/nls/dijit-all_fi-fi.js.uncompressed.js +0 -21
  962. data/vendor/assets/javascripts/dijit/nls/dijit-all_fr-fr.js.uncompressed.js +0 -21
  963. data/vendor/assets/javascripts/dijit/nls/dijit-all_he-il.js.uncompressed.js +0 -21
  964. data/vendor/assets/javascripts/dijit/nls/dijit-all_hu.js.uncompressed.js +0 -21
  965. data/vendor/assets/javascripts/dijit/nls/dijit-all_it-it.js.uncompressed.js +0 -21
  966. data/vendor/assets/javascripts/dijit/nls/dijit-all_ja-jp.js.uncompressed.js +0 -21
  967. data/vendor/assets/javascripts/dijit/nls/dijit-all_ko-kr.js.uncompressed.js +0 -21
  968. data/vendor/assets/javascripts/dijit/nls/dijit-all_nb.js.uncompressed.js +0 -21
  969. data/vendor/assets/javascripts/dijit/nls/dijit-all_nl-nl.js.uncompressed.js +0 -21
  970. data/vendor/assets/javascripts/dijit/nls/dijit-all_pl.js.uncompressed.js +0 -21
  971. data/vendor/assets/javascripts/dijit/nls/dijit-all_pt-br.js.uncompressed.js +0 -21
  972. data/vendor/assets/javascripts/dijit/nls/dijit-all_pt-pt.js.uncompressed.js +0 -21
  973. data/vendor/assets/javascripts/dijit/nls/dijit-all_ru.js.uncompressed.js +0 -21
  974. data/vendor/assets/javascripts/dijit/nls/dijit-all_sk.js.uncompressed.js +0 -21
  975. data/vendor/assets/javascripts/dijit/nls/dijit-all_sl.js.uncompressed.js +0 -21
  976. data/vendor/assets/javascripts/dijit/nls/dijit-all_sv.js.uncompressed.js +0 -21
  977. data/vendor/assets/javascripts/dijit/nls/dijit-all_th.js.uncompressed.js +0 -21
  978. data/vendor/assets/javascripts/dijit/nls/dijit-all_tr.js.uncompressed.js +0 -21
  979. data/vendor/assets/javascripts/dijit/nls/dijit-all_zh-cn.js.uncompressed.js +0 -21
  980. data/vendor/assets/javascripts/dijit/nls/dijit-all_zh-tw.js.uncompressed.js +0 -21
  981. data/vendor/assets/javascripts/dijit/nls/el/common.js.uncompressed.js +0 -8
  982. data/vendor/assets/javascripts/dijit/nls/el/loading.js.uncompressed.js +0 -6
  983. data/vendor/assets/javascripts/dijit/nls/es/common.js.uncompressed.js +0 -8
  984. data/vendor/assets/javascripts/dijit/nls/es/loading.js.uncompressed.js +0 -6
  985. data/vendor/assets/javascripts/dijit/nls/fi/common.js.uncompressed.js +0 -8
  986. data/vendor/assets/javascripts/dijit/nls/fi/loading.js.uncompressed.js +0 -6
  987. data/vendor/assets/javascripts/dijit/nls/fr/common.js.uncompressed.js +0 -8
  988. data/vendor/assets/javascripts/dijit/nls/fr/loading.js.uncompressed.js +0 -6
  989. data/vendor/assets/javascripts/dijit/nls/he/common.js.uncompressed.js +0 -8
  990. data/vendor/assets/javascripts/dijit/nls/he/loading.js.uncompressed.js +0 -6
  991. data/vendor/assets/javascripts/dijit/nls/hr/common.js.uncompressed.js +0 -8
  992. data/vendor/assets/javascripts/dijit/nls/hr/loading.js.uncompressed.js +0 -6
  993. data/vendor/assets/javascripts/dijit/nls/hu/common.js.uncompressed.js +0 -8
  994. data/vendor/assets/javascripts/dijit/nls/hu/loading.js.uncompressed.js +0 -6
  995. data/vendor/assets/javascripts/dijit/nls/it/common.js.uncompressed.js +0 -8
  996. data/vendor/assets/javascripts/dijit/nls/it/loading.js.uncompressed.js +0 -6
  997. data/vendor/assets/javascripts/dijit/nls/ja/common.js.uncompressed.js +0 -8
  998. data/vendor/assets/javascripts/dijit/nls/ja/loading.js.uncompressed.js +0 -6
  999. data/vendor/assets/javascripts/dijit/nls/kk/common.js.uncompressed.js +0 -8
  1000. data/vendor/assets/javascripts/dijit/nls/kk/loading.js.uncompressed.js +0 -6
  1001. data/vendor/assets/javascripts/dijit/nls/ko/common.js.uncompressed.js +0 -8
  1002. data/vendor/assets/javascripts/dijit/nls/ko/loading.js.uncompressed.js +0 -6
  1003. data/vendor/assets/javascripts/dijit/nls/loading.js.uncompressed.js +0 -40
  1004. data/vendor/assets/javascripts/dijit/nls/nb/common.js.uncompressed.js +0 -8
  1005. data/vendor/assets/javascripts/dijit/nls/nb/loading.js.uncompressed.js +0 -6
  1006. data/vendor/assets/javascripts/dijit/nls/nl/common.js.uncompressed.js +0 -8
  1007. data/vendor/assets/javascripts/dijit/nls/nl/loading.js.uncompressed.js +0 -6
  1008. data/vendor/assets/javascripts/dijit/nls/pl/common.js.uncompressed.js +0 -8
  1009. data/vendor/assets/javascripts/dijit/nls/pl/loading.js.uncompressed.js +0 -6
  1010. data/vendor/assets/javascripts/dijit/nls/pt-pt/common.js.uncompressed.js +0 -8
  1011. data/vendor/assets/javascripts/dijit/nls/pt-pt/loading.js.uncompressed.js +0 -6
  1012. data/vendor/assets/javascripts/dijit/nls/pt/common.js.uncompressed.js +0 -8
  1013. data/vendor/assets/javascripts/dijit/nls/pt/loading.js.uncompressed.js +0 -6
  1014. data/vendor/assets/javascripts/dijit/nls/ro/common.js.uncompressed.js +0 -8
  1015. data/vendor/assets/javascripts/dijit/nls/ro/loading.js.uncompressed.js +0 -6
  1016. data/vendor/assets/javascripts/dijit/nls/ru/common.js.uncompressed.js +0 -8
  1017. data/vendor/assets/javascripts/dijit/nls/ru/loading.js.uncompressed.js +0 -6
  1018. data/vendor/assets/javascripts/dijit/nls/sk/common.js.uncompressed.js +0 -8
  1019. data/vendor/assets/javascripts/dijit/nls/sk/loading.js.uncompressed.js +0 -6
  1020. data/vendor/assets/javascripts/dijit/nls/sl/common.js.uncompressed.js +0 -8
  1021. data/vendor/assets/javascripts/dijit/nls/sl/loading.js.uncompressed.js +0 -6
  1022. data/vendor/assets/javascripts/dijit/nls/sv/common.js.uncompressed.js +0 -8
  1023. data/vendor/assets/javascripts/dijit/nls/sv/loading.js.uncompressed.js +0 -6
  1024. data/vendor/assets/javascripts/dijit/nls/th/common.js.uncompressed.js +0 -8
  1025. data/vendor/assets/javascripts/dijit/nls/th/loading.js.uncompressed.js +0 -6
  1026. data/vendor/assets/javascripts/dijit/nls/tr/common.js.uncompressed.js +0 -8
  1027. data/vendor/assets/javascripts/dijit/nls/tr/loading.js.uncompressed.js +0 -6
  1028. data/vendor/assets/javascripts/dijit/nls/zh-tw/common.js.uncompressed.js +0 -8
  1029. data/vendor/assets/javascripts/dijit/nls/zh-tw/loading.js.uncompressed.js +0 -6
  1030. data/vendor/assets/javascripts/dijit/nls/zh/common.js.uncompressed.js +0 -8
  1031. data/vendor/assets/javascripts/dijit/nls/zh/loading.js.uncompressed.js +0 -6
  1032. data/vendor/assets/javascripts/dijit/place.js.uncompressed.js +0 -367
  1033. data/vendor/assets/javascripts/dijit/popup.js.uncompressed.js +0 -318
  1034. data/vendor/assets/javascripts/dijit/registry.js.uncompressed.js +0 -161
  1035. data/vendor/assets/javascripts/dijit/tree/ForestStoreModel.js.uncompressed.js +0 -279
  1036. data/vendor/assets/javascripts/dijit/tree/ObjectStoreModel.js.uncompressed.js +0 -252
  1037. data/vendor/assets/javascripts/dijit/tree/TreeStoreModel.js.uncompressed.js +0 -379
  1038. data/vendor/assets/javascripts/dijit/tree/_dndContainer.js.uncompressed.js +0 -165
  1039. data/vendor/assets/javascripts/dijit/tree/_dndSelector.js.uncompressed.js +0 -352
  1040. data/vendor/assets/javascripts/dijit/tree/dndSource.js.uncompressed.js +0 -564
  1041. data/vendor/assets/javascripts/dijit/tree/model.js.uncompressed.js +0 -150
  1042. data/vendor/assets/javascripts/dijit/typematic.js.uncompressed.js +0 -201
  1043. data/vendor/assets/stylesheets/claro/README +0 -11
@@ -1,131 +0,0 @@
1
- define("dijit/_base/place", [
2
- "dojo/_base/array", // array.forEach
3
- "dojo/_base/lang", // lang.isArray, lang.mixin
4
- "dojo/window", // windowUtils.getBox
5
- "../place",
6
- "../main" // export to dijit namespace
7
- ], function(array, lang, windowUtils, place, dijit){
8
-
9
- // module:
10
- // dijit/_base/place
11
-
12
-
13
- var exports = {
14
- // summary:
15
- // Deprecated back compatibility module, new code should use dijit/place directly instead of using this module.
16
- };
17
-
18
- exports.getViewport = function(){
19
- // summary:
20
- // Deprecated method to return the dimensions and scroll position of the viewable area of a browser window.
21
- // New code should use windowUtils.getBox()
22
-
23
- return windowUtils.getBox();
24
- };
25
-
26
- exports.placeOnScreen = place.at;
27
-
28
- exports.placeOnScreenAroundElement = function(node, aroundNode, aroundCorners, layoutNode){
29
- // summary:
30
- // Like dijit.placeOnScreenAroundNode(), except it accepts an arbitrary object
31
- // for the "around" argument and finds a proper processor to place a node.
32
- // Deprecated, new code should use dijit/place.around() instead.
33
-
34
- // Convert old style {"BL": "TL", "BR": "TR"} type argument
35
- // to style needed by dijit.place code:
36
- // [
37
- // {aroundCorner: "BL", corner: "TL" },
38
- // {aroundCorner: "BR", corner: "TR" }
39
- // ]
40
- var positions;
41
- if(lang.isArray(aroundCorners)){
42
- positions = aroundCorners;
43
- }else{
44
- positions = [];
45
- for(var key in aroundCorners){
46
- positions.push({aroundCorner: key, corner: aroundCorners[key]});
47
- }
48
- }
49
-
50
- return place.around(node, aroundNode, positions, true, layoutNode);
51
- };
52
-
53
- exports.placeOnScreenAroundNode = exports.placeOnScreenAroundElement;
54
- /*=====
55
- exports.placeOnScreenAroundNode = function(node, aroundNode, aroundCorners, layoutNode){
56
- // summary:
57
- // Position node adjacent or kitty-corner to aroundNode
58
- // such that it's fully visible in viewport.
59
- // Deprecated, new code should use dijit/place.around() instead.
60
- };
61
- =====*/
62
-
63
- exports.placeOnScreenAroundRectangle = exports.placeOnScreenAroundElement;
64
- /*=====
65
- exports.placeOnScreenAroundRectangle = function(node, aroundRect, aroundCorners, layoutNode){
66
- // summary:
67
- // Like dijit.placeOnScreenAroundNode(), except that the "around"
68
- // parameter is an arbitrary rectangle on the screen (x, y, width, height)
69
- // instead of a dom node.
70
- // Deprecated, new code should use dijit/place.around() instead.
71
- };
72
- =====*/
73
-
74
- exports.getPopupAroundAlignment = function(/*Array*/ position, /*Boolean*/ leftToRight){
75
- // summary:
76
- // Deprecated method, unneeded when using dijit/place directly.
77
- // Transforms the passed array of preferred positions into a format suitable for
78
- // passing as the aroundCorners argument to dijit/place.placeOnScreenAroundElement.
79
- // position: String[]
80
- // This variable controls the position of the drop down.
81
- // It's an array of strings with the following values:
82
- //
83
- // - before: places drop down to the left of the target node/widget, or to the right in
84
- // the case of RTL scripts like Hebrew and Arabic
85
- // - after: places drop down to the right of the target node/widget, or to the left in
86
- // the case of RTL scripts like Hebrew and Arabic
87
- // - above: drop down goes above target node
88
- // - below: drop down goes below target node
89
- //
90
- // The list is positions is tried, in order, until a position is found where the drop down fits
91
- // within the viewport.
92
- // leftToRight: Boolean
93
- // Whether the popup will be displaying in leftToRight mode.
94
-
95
- var align = {};
96
- array.forEach(position, function(pos){
97
- var ltr = leftToRight;
98
- switch(pos){
99
- case "after":
100
- align[leftToRight ? "BR" : "BL"] = leftToRight ? "BL" : "BR";
101
- break;
102
- case "before":
103
- align[leftToRight ? "BL" : "BR"] = leftToRight ? "BR" : "BL";
104
- break;
105
- case "below-alt":
106
- ltr = !ltr;
107
- // fall through
108
- case "below":
109
- // first try to align left borders, next try to align right borders (or reverse for RTL mode)
110
- align[ltr ? "BL" : "BR"] = ltr ? "TL" : "TR";
111
- align[ltr ? "BR" : "BL"] = ltr ? "TR" : "TL";
112
- break;
113
- case "above-alt":
114
- ltr = !ltr;
115
- // fall through
116
- case "above":
117
- default:
118
- // first try to align left borders, next try to align right borders (or reverse for RTL mode)
119
- align[ltr ? "TL" : "TR"] = ltr ? "BL" : "BR";
120
- align[ltr ? "TR" : "TL"] = ltr ? "BR" : "BL";
121
- break;
122
- }
123
- });
124
- return align;
125
- };
126
-
127
- lang.mixin(dijit, exports);
128
-
129
- /*===== return exports; =====*/
130
- return dijit; // for back compat :-(
131
- });
@@ -1,58 +0,0 @@
1
- define("dijit/_base/popup", [
2
- "dojo/dom-class", // domClass.contains
3
- "dojo/_base/window",
4
- "../popup",
5
- "../BackgroundIframe" // just loading for back-compat, in case client code is referencing it
6
- ], function(domClass, win, popup){
7
-
8
- // module:
9
- // dijit/_base/popup
10
-
11
- /*=====
12
- return {
13
- // summary:
14
- // Deprecated. Old module for popups, new code should use dijit/popup directly.
15
- };
16
- =====*/
17
-
18
-
19
- // Hack support for old API passing in node instead of a widget (to various methods)
20
- var origCreateWrapper = popup._createWrapper;
21
- popup._createWrapper = function(widget){
22
- if(!widget.declaredClass){
23
- // make fake widget to pass to new API
24
- widget = {
25
- _popupWrapper: (widget.parentNode && domClass.contains(widget.parentNode, "dijitPopup")) ?
26
- widget.parentNode : null,
27
- domNode: widget,
28
- destroy: function(){},
29
- ownerDocument: widget.ownerDocument,
30
- ownerDocumentBody: win.body(widget.ownerDocument)
31
- };
32
- }
33
- return origCreateWrapper.call(this, widget);
34
- };
35
-
36
- // Support old format of orient parameter
37
- var origOpen = popup.open;
38
- popup.open = function(/*__OpenArgs*/ args){
39
- // Convert old hash structure (ex: {"BL": "TL", ...}) of orient to format compatible w/new popup.open() API.
40
- // Don't do conversion for:
41
- // - null parameter (that means to use the default positioning)
42
- // - "R" or "L" strings used to indicate positioning for context menus (when there is no around node)
43
- // - new format, ex: ["below", "above"]
44
- // - return value from deprecated dijit.getPopupAroundAlignment() method,
45
- // ex: ["below", "above"]
46
- if(args.orient && typeof args.orient != "string" && !("length" in args.orient)){
47
- var ary = [];
48
- for(var key in args.orient){
49
- ary.push({aroundCorner: key, corner: args.orient[key]});
50
- }
51
- args.orient = ary;
52
- }
53
-
54
- return origOpen.call(this, args);
55
- };
56
-
57
- return popup;
58
- });
@@ -1,22 +0,0 @@
1
- define("dijit/_base/scroll", [
2
- "dojo/window", // windowUtils.scrollIntoView
3
- "../main" // export symbol to dijit
4
- ], function(windowUtils, dijit){
5
- // module:
6
- // dijit/_base/scroll
7
-
8
- /*=====
9
- return {
10
- // summary:
11
- // Back compatibility module, new code should use windowUtils directly instead of using this module.
12
- };
13
- =====*/
14
-
15
- dijit.scrollIntoView = function(/*DomNode*/ node, /*Object?*/ pos){
16
- // summary:
17
- // Scroll the passed node into view, if it is not already.
18
- // Deprecated, use `windowUtils.scrollIntoView` instead.
19
-
20
- windowUtils.scrollIntoView(node, pos);
21
- };
22
- });
@@ -1,12 +0,0 @@
1
- define("dijit/_base/sniff", [ "dojo/uacss" ], function(){
2
-
3
- // module:
4
- // dijit/_base/sniff
5
-
6
- /*=====
7
- return {
8
- // summary:
9
- // Deprecated, back compatibility module, new code should require dojo/uacss directly instead of this module.
10
- };
11
- =====*/
12
- });
@@ -1,10 +0,0 @@
1
- define("dijit/_base/typematic", ["../typematic"], function(){
2
-
3
- /*=====
4
- return {
5
- // summary:
6
- // Deprecated, for back-compat, just loads top level module
7
- };
8
- =====*/
9
-
10
- });
@@ -1,109 +0,0 @@
1
- define("dijit/_base/wai", [
2
- "dojo/dom-attr", // domAttr.attr
3
- "dojo/_base/lang", // lang.mixin
4
- "../main", // export symbols to dijit
5
- "../hccss" // not using this module directly, but loading it sets CSS flag on <html>
6
- ], function(domAttr, lang, dijit){
7
-
8
- // module:
9
- // dijit/_base/wai
10
-
11
- var exports = {
12
- // summary:
13
- // Deprecated methods for setting/getting wai roles and states.
14
- // New code should call setAttribute()/getAttribute() directly.
15
- //
16
- // Also loads hccss to apply dj_a11y class to root node if machine is in high-contrast mode.
17
-
18
- hasWaiRole: function(/*Element*/ elem, /*String?*/ role){
19
- // summary:
20
- // Determines if an element has a particular role.
21
- // returns:
22
- // True if elem has the specific role attribute and false if not.
23
- // For backwards compatibility if role parameter not provided,
24
- // returns true if has a role
25
- var waiRole = this.getWaiRole(elem);
26
- return role ? (waiRole.indexOf(role) > -1) : (waiRole.length > 0);
27
- },
28
-
29
- getWaiRole: function(/*Element*/ elem){
30
- // summary:
31
- // Gets the role for an element (which should be a wai role).
32
- // returns:
33
- // The role of elem or an empty string if elem
34
- // does not have a role.
35
- return lang.trim((domAttr.get(elem, "role") || "").replace("wairole:",""));
36
- },
37
-
38
- setWaiRole: function(/*Element*/ elem, /*String*/ role){
39
- // summary:
40
- // Sets the role on an element.
41
- // description:
42
- // Replace existing role attribute with new role.
43
-
44
- domAttr.set(elem, "role", role);
45
- },
46
-
47
- removeWaiRole: function(/*Element*/ elem, /*String*/ role){
48
- // summary:
49
- // Removes the specified role from an element.
50
- // Removes role attribute if no specific role provided (for backwards compat.)
51
-
52
- var roleValue = domAttr.get(elem, "role");
53
- if(!roleValue){ return; }
54
- if(role){
55
- var t = lang.trim((" " + roleValue + " ").replace(" " + role + " ", " "));
56
- domAttr.set(elem, "role", t);
57
- }else{
58
- elem.removeAttribute("role");
59
- }
60
- },
61
-
62
- hasWaiState: function(/*Element*/ elem, /*String*/ state){
63
- // summary:
64
- // Determines if an element has a given state.
65
- // description:
66
- // Checks for an attribute called "aria-"+state.
67
- // returns:
68
- // true if elem has a value for the given state and
69
- // false if it does not.
70
-
71
- return elem.hasAttribute ? elem.hasAttribute("aria-"+state) : !!elem.getAttribute("aria-"+state);
72
- },
73
-
74
- getWaiState: function(/*Element*/ elem, /*String*/ state){
75
- // summary:
76
- // Gets the value of a state on an element.
77
- // description:
78
- // Checks for an attribute called "aria-"+state.
79
- // returns:
80
- // The value of the requested state on elem
81
- // or an empty string if elem has no value for state.
82
-
83
- return elem.getAttribute("aria-"+state) || "";
84
- },
85
-
86
- setWaiState: function(/*Element*/ elem, /*String*/ state, /*String*/ value){
87
- // summary:
88
- // Sets a state on an element.
89
- // description:
90
- // Sets an attribute called "aria-"+state.
91
-
92
- elem.setAttribute("aria-"+state, value);
93
- },
94
-
95
- removeWaiState: function(/*Element*/ elem, /*String*/ state){
96
- // summary:
97
- // Removes a state from an element.
98
- // description:
99
- // Sets an attribute called "aria-"+state.
100
-
101
- elem.removeAttribute("aria-"+state);
102
- }
103
- };
104
-
105
- lang.mixin(dijit, exports);
106
-
107
- /*===== return exports; =====*/
108
- return dijit; // for back compat :-(
109
- });
@@ -1,18 +0,0 @@
1
- define("dijit/_base/window", [
2
- "dojo/window", // windowUtils.get
3
- "../main" // export symbol to dijit
4
- ], function(windowUtils, dijit){
5
- // module:
6
- // dijit/_base/window
7
-
8
- /*=====
9
- return {
10
- // summary:
11
- // Back compatibility module, new code should use windowUtils directly instead of using this module.
12
- };
13
- =====*/
14
-
15
- dijit.getDocumentWindow = function(doc){
16
- return windowUtils.get(doc);
17
- };
18
- });
@@ -1,2874 +0,0 @@
1
- define("dijit/_editor/RichText", [
2
- "dojo/_base/array", // array.forEach array.indexOf array.some
3
- "dojo/_base/config", // config
4
- "dojo/_base/declare", // declare
5
- "dojo/_base/Deferred", // Deferred
6
- "dojo/dom", // dom.byId
7
- "dojo/dom-attr", // domAttr.set or get
8
- "dojo/dom-class", // domClass.add domClass.remove
9
- "dojo/dom-construct", // domConstruct.create domConstruct.destroy domConstruct.place
10
- "dojo/dom-geometry", // domGeometry.position
11
- "dojo/dom-style", // domStyle.getComputedStyle domStyle.set
12
- "dojo/_base/event", // event.stop
13
- "dojo/_base/kernel", // kernel.deprecated
14
- "dojo/keys", // keys.BACKSPACE keys.TAB
15
- "dojo/_base/lang", // lang.clone lang.hitch lang.isArray lang.isFunction lang.isString lang.trim
16
- "dojo/on", // on()
17
- "dojo/query", // query
18
- "dojo/ready", // ready
19
- "dojo/sniff", // has("ie") has("mozilla") has("opera") has("safari") has("webkit")
20
- "dojo/topic", // topic.publish() (publish)
21
- "dojo/_base/unload", // unload
22
- "dojo/_base/url", // url
23
- "dojo/_base/window", // win.global
24
- "../_Widget",
25
- "../_CssStateMixin",
26
- "./selection",
27
- "./range",
28
- "./html",
29
- "../focus",
30
- "../main" // dijit._scopeName
31
- ], function(array, config, declare, Deferred, dom, domAttr, domClass, domConstruct, domGeometry, domStyle,
32
- event, kernel, keys, lang, on, query, ready, has, topic, unload, _Url, win,
33
- _Widget, _CssStateMixin, selectionapi, rangeapi, htmlapi, focus, dijit){
34
-
35
- // module:
36
- // dijit/_editor/RichText
37
- // summary:
38
- // dijit/_editor/RichText is the core of dijit/Editor, which provides basic
39
- // WYSIWYG editing features.
40
-
41
- // if you want to allow for rich text saving with back/forward actions, you must add a text area to your page with
42
- // the id==dijit._scopeName + "._editor.RichText.value" (typically "dijit/_editor/RichText.value). For example,
43
- // something like this will work:
44
- //
45
- // <textarea id="dijit._editor.RichText.value" style="display:none;position:absolute;top:-100px;left:-100px;height:3px;width:3px;overflow:hidden;"></textarea>
46
- //
47
-
48
- var RichText = declare("dijit._editor.RichText", [_Widget, _CssStateMixin], {
49
- // summary:
50
- // dijit/_editor/RichText is the core of dijit.Editor, which provides basic
51
- // WYSIWYG editing features.
52
- //
53
- // description:
54
- // dijit/_editor/RichText is the core of dijit.Editor, which provides basic
55
- // WYSIWYG editing features. It also encapsulates the differences
56
- // of different js engines for various browsers. Do not use this widget
57
- // with an HTML &lt;TEXTAREA&gt; tag, since the browser unescapes XML escape characters,
58
- // like &lt;. This can have unexpected behavior and lead to security issues
59
- // such as scripting attacks.
60
- //
61
- // tags:
62
- // private
63
-
64
- constructor: function(params /*===== , srcNodeRef =====*/){
65
- // summary:
66
- // Create the widget.
67
- // params: Object|null
68
- // Initial settings for any of the widget attributes, except readonly attributes.
69
- // srcNodeRef: DOMNode
70
- // The widget replaces the specified DOMNode.
71
-
72
- // contentPreFilters: Function(String)[]
73
- // Pre content filter function register array.
74
- // these filters will be executed before the actual
75
- // editing area gets the html content.
76
- this.contentPreFilters = [];
77
-
78
- // contentPostFilters: Function(String)[]
79
- // post content filter function register array.
80
- // These will be used on the resulting html
81
- // from contentDomPostFilters. The resulting
82
- // content is the final html (returned by getValue()).
83
- this.contentPostFilters = [];
84
-
85
- // contentDomPreFilters: Function(DomNode)[]
86
- // Pre content dom filter function register array.
87
- // These filters are applied after the result from
88
- // contentPreFilters are set to the editing area.
89
- this.contentDomPreFilters = [];
90
-
91
- // contentDomPostFilters: Function(DomNode)[]
92
- // Post content dom filter function register array.
93
- // These filters are executed on the editing area dom.
94
- // The result from these will be passed to contentPostFilters.
95
- this.contentDomPostFilters = [];
96
-
97
- // editingAreaStyleSheets: dojo._URL[]
98
- // array to store all the stylesheets applied to the editing area
99
- this.editingAreaStyleSheets = [];
100
-
101
- // Make a copy of this.events before we start writing into it, otherwise we
102
- // will modify the prototype which leads to bad things on pages w/multiple editors
103
- this.events = [].concat(this.events);
104
-
105
- this._keyHandlers = {};
106
-
107
- if(params && lang.isString(params.value)){
108
- this.value = params.value;
109
- }
110
-
111
- this.onLoadDeferred = new Deferred();
112
- },
113
-
114
- baseClass: "dijitEditor",
115
-
116
- // inheritWidth: Boolean
117
- // whether to inherit the parent's width or simply use 100%
118
- inheritWidth: false,
119
-
120
- // focusOnLoad: [deprecated] Boolean
121
- // Focus into this widget when the page is loaded
122
- focusOnLoad: false,
123
-
124
- // name: String?
125
- // Specifies the name of a (hidden) `<textarea>` node on the page that's used to save
126
- // the editor content on page leave. Used to restore editor contents after navigating
127
- // to a new page and then hitting the back button.
128
- name: "",
129
-
130
- // styleSheets: [const] String
131
- // semicolon (";") separated list of css files for the editing area
132
- styleSheets: "",
133
-
134
- // height: String
135
- // Set height to fix the editor at a specific height, with scrolling.
136
- // By default, this is 300px. If you want to have the editor always
137
- // resizes to accommodate the content, use AlwaysShowToolbar plugin
138
- // and set height="". If this editor is used within a layout widget,
139
- // set height="100%".
140
- height: "300px",
141
-
142
- // minHeight: String
143
- // The minimum height that the editor should have.
144
- minHeight: "1em",
145
-
146
- // isClosed: [private] Boolean
147
- isClosed: true,
148
-
149
- // isLoaded: [private] Boolean
150
- isLoaded: false,
151
-
152
- // _SEPARATOR: [private] String
153
- // Used to concat contents from multiple editors into a single string,
154
- // so they can be saved into a single `<textarea>` node. See "name" attribute.
155
- _SEPARATOR: "@@**%%__RICHTEXTBOUNDRY__%%**@@",
156
-
157
- // _NAME_CONTENT_SEP: [private] String
158
- // USed to separate name from content. Just a colon isn't safe.
159
- _NAME_CONTENT_SEP: "@@**%%:%%**@@",
160
-
161
- // onLoadDeferred: [readonly] dojo.Deferred
162
- // Deferred which is fired when the editor finishes loading.
163
- // Call myEditor.onLoadDeferred.then(callback) it to be informed
164
- // when the rich-text area initialization is finalized.
165
- onLoadDeferred: null,
166
-
167
- // isTabIndent: Boolean
168
- // Make tab key and shift-tab indent and outdent rather than navigating.
169
- // Caution: sing this makes web pages inaccessible to users unable to use a mouse.
170
- isTabIndent: false,
171
-
172
- // disableSpellCheck: [const] Boolean
173
- // When true, disables the browser's native spell checking, if supported.
174
- // Works only in Firefox.
175
- disableSpellCheck: false,
176
-
177
- postCreate: function(){
178
- if("textarea" === this.domNode.tagName.toLowerCase()){
179
- console.warn("RichText should not be used with the TEXTAREA tag. See dijit._editor.RichText docs.");
180
- }
181
-
182
- // Push in the builtin filters now, making them the first executed, but not over-riding anything
183
- // users passed in. See: #6062
184
- this.contentPreFilters = [lang.hitch(this, "_preFixUrlAttributes")].concat(this.contentPreFilters);
185
- if(has("mozilla")){
186
- this.contentPreFilters = [this._normalizeFontStyle].concat(this.contentPreFilters);
187
- this.contentPostFilters = [this._removeMozBogus].concat(this.contentPostFilters);
188
- }
189
- if(has("webkit")){
190
- // Try to clean up WebKit bogus artifacts. The inserted classes
191
- // made by WebKit sometimes messes things up.
192
- this.contentPreFilters = [this._removeWebkitBogus].concat(this.contentPreFilters);
193
- this.contentPostFilters = [this._removeWebkitBogus].concat(this.contentPostFilters);
194
- }
195
- if(has("ie")){
196
- // IE generates <strong> and <em> but we want to normalize to <b> and <i>
197
- this.contentPostFilters = [this._normalizeFontStyle].concat(this.contentPostFilters);
198
- this.contentDomPostFilters = [lang.hitch(this, this._stripBreakerNodes)].concat(this.contentDomPostFilters);
199
- }
200
- this.inherited(arguments);
201
-
202
- topic.publish(dijit._scopeName + "._editor.RichText::init", this);
203
- this.open();
204
- this.setupDefaultShortcuts();
205
- },
206
-
207
- setupDefaultShortcuts: function(){
208
- // summary:
209
- // Add some default key handlers
210
- // description:
211
- // Overwrite this to setup your own handlers. The default
212
- // implementation does not use Editor commands, but directly
213
- // executes the builtin commands within the underlying browser
214
- // support.
215
- // tags:
216
- // protected
217
- var exec = lang.hitch(this, function(cmd, arg){
218
- return function(){
219
- return !this.execCommand(cmd,arg);
220
- };
221
- });
222
-
223
- var ctrlKeyHandlers = {
224
- b: exec("bold"),
225
- i: exec("italic"),
226
- u: exec("underline"),
227
- a: exec("selectall"),
228
- s: function(){ this.save(true); },
229
- m: function(){ this.isTabIndent = !this.isTabIndent; },
230
-
231
- "1": exec("formatblock", "h1"),
232
- "2": exec("formatblock", "h2"),
233
- "3": exec("formatblock", "h3"),
234
- "4": exec("formatblock", "h4"),
235
-
236
- "\\": exec("insertunorderedlist")
237
- };
238
-
239
- if(!has("ie")){
240
- ctrlKeyHandlers.Z = exec("redo"); //FIXME: undo?
241
- }
242
-
243
- var key;
244
- for(key in ctrlKeyHandlers){
245
- this.addKeyHandler(key, true, false, ctrlKeyHandlers[key]);
246
- }
247
- },
248
-
249
- // events: [private] String[]
250
- // events which should be connected to the underlying editing area
251
- events: ["onKeyPress", "onKeyDown", "onKeyUp"], // onClick handled specially
252
-
253
- // captureEvents: [deprecated] String[]
254
- // Events which should be connected to the underlying editing
255
- // area, events in this array will be addListener with
256
- // capture=true.
257
- // TODO: looking at the code I don't see any distinction between events and captureEvents,
258
- // so get rid of this for 2.0 if not sooner
259
- captureEvents: [],
260
-
261
- _editorCommandsLocalized: false,
262
- _localizeEditorCommands: function(){
263
- // summary:
264
- // When IE is running in a non-English locale, the API actually changes,
265
- // so that we have to say (for example) danraku instead of p (for paragraph).
266
- // Handle that here.
267
- // tags:
268
- // private
269
- if(RichText._editorCommandsLocalized){
270
- // Use the already generate cache of mappings.
271
- this._local2NativeFormatNames = RichText._local2NativeFormatNames;
272
- this._native2LocalFormatNames = RichText._native2LocalFormatNames;
273
- return;
274
- }
275
- RichText._editorCommandsLocalized = true;
276
- RichText._local2NativeFormatNames = {};
277
- RichText._native2LocalFormatNames = {};
278
- this._local2NativeFormatNames = RichText._local2NativeFormatNames;
279
- this._native2LocalFormatNames = RichText._native2LocalFormatNames;
280
- //in IE, names for blockformat is locale dependent, so we cache the values here
281
-
282
- //put p after div, so if IE returns Normal, we show it as paragraph
283
- //We can distinguish p and div if IE returns Normal, however, in order to detect that,
284
- //we have to call this.document.selection.createRange().parentElement() or such, which
285
- //could slow things down. Leave it as it is for now
286
- var formats = ['div', 'p', 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'ol', 'ul', 'address'];
287
- var localhtml = "", format, i=0;
288
- while((format=formats[i++])){
289
- //append a <br> after each element to separate the elements more reliably
290
- if(format.charAt(1) !== 'l'){
291
- localhtml += "<"+format+"><span>content</span></"+format+"><br/>";
292
- }else{
293
- localhtml += "<"+format+"><li>content</li></"+format+"><br/>";
294
- }
295
- }
296
- // queryCommandValue returns empty if we hide editNode, so move it out of screen temporary
297
- // Also, IE9 does weird stuff unless we do it inside the editor iframe.
298
- var style = { position: "absolute", top: "0px", zIndex: 10, opacity: 0.01 };
299
- var div = domConstruct.create('div', {style: style, innerHTML: localhtml});
300
- this.ownerDocumentBody.appendChild(div);
301
-
302
- // IE9 has a timing issue with doing this right after setting
303
- // the inner HTML, so put a delay in.
304
- var inject = lang.hitch(this, function(){
305
- var node = div.firstChild;
306
- while(node){
307
- try{
308
- this._sCall("selectElement", [node.firstChild]);
309
- var nativename = node.tagName.toLowerCase();
310
- this._local2NativeFormatNames[nativename] = document.queryCommandValue("formatblock");
311
- this._native2LocalFormatNames[this._local2NativeFormatNames[nativename]] = nativename;
312
- node = node.nextSibling.nextSibling;
313
- //console.log("Mapped: ", nativename, " to: ", this._local2NativeFormatNames[nativename]);
314
- }catch(e){ /*Sqelch the occasional IE9 error */ }
315
- }
316
- domConstruct.destroy(div);
317
- });
318
- this.defer(inject);
319
- },
320
-
321
- open: function(/*DomNode?*/ element){
322
- // summary:
323
- // Transforms the node referenced in this.domNode into a rich text editing
324
- // node.
325
- // description:
326
- // Sets up the editing area asynchronously. This will result in
327
- // the creation and replacement with an iframe.
328
- // tags:
329
- // private
330
-
331
- if(!this.onLoadDeferred || this.onLoadDeferred.fired >= 0){
332
- this.onLoadDeferred = new Deferred();
333
- }
334
-
335
- if(!this.isClosed){ this.close(); }
336
- topic.publish(dijit._scopeName + "._editor.RichText::open", this);
337
-
338
- if(arguments.length === 1 && element.nodeName){ // else unchanged
339
- this.domNode = element;
340
- }
341
-
342
- var dn = this.domNode;
343
-
344
- // "html" will hold the innerHTML of the srcNodeRef and will be used to
345
- // initialize the editor.
346
- var html;
347
-
348
- if(lang.isString(this.value)){
349
- // Allow setting the editor content programmatically instead of
350
- // relying on the initial content being contained within the target
351
- // domNode.
352
- html = this.value;
353
- delete this.value;
354
- dn.innerHTML = "";
355
- }else if(dn.nodeName && dn.nodeName.toLowerCase() == "textarea"){
356
- // if we were created from a textarea, then we need to create a
357
- // new editing harness node.
358
- var ta = (this.textarea = dn);
359
- this.name = ta.name;
360
- html = ta.value;
361
- dn = this.domNode = this.ownerDocument.createElement("div");
362
- dn.setAttribute('widgetId', this.id);
363
- ta.removeAttribute('widgetId');
364
- dn.cssText = ta.cssText;
365
- dn.className += " " + ta.className;
366
- domConstruct.place(dn, ta, "before");
367
- var tmpFunc = lang.hitch(this, function(){
368
- //some browsers refuse to submit display=none textarea, so
369
- //move the textarea off screen instead
370
- domStyle.set(ta, {
371
- display: "block",
372
- position: "absolute",
373
- top: "-1000px"
374
- });
375
-
376
- if(has("ie")){ //nasty IE bug: abnormal formatting if overflow is not hidden
377
- var s = ta.style;
378
- this.__overflow = s.overflow;
379
- s.overflow = "hidden";
380
- }
381
- });
382
- if(has("ie")){
383
- this.defer(tmpFunc, 10);
384
- }else{
385
- tmpFunc();
386
- }
387
-
388
- if(ta.form){
389
- var resetValue = ta.value;
390
- this.reset = function(){
391
- var current = this.getValue();
392
- if(current !== resetValue){
393
- this.replaceValue(resetValue);
394
- }
395
- };
396
- on(ta.form, "submit", lang.hitch(this, function(){
397
- // Copy value to the <textarea> so it gets submitted along with form.
398
- // FIXME: should we be calling close() here instead?
399
- domAttr.set(ta, 'disabled', this.disabled); // don't submit the value if disabled
400
- ta.value = this.getValue();
401
- }));
402
- }
403
- }else{
404
- html = htmlapi.getChildrenHtml(dn);
405
- dn.innerHTML = "";
406
- }
407
-
408
- this.value = html;
409
-
410
- // If we're a list item we have to put in a blank line to force the
411
- // bullet to nicely align at the top of text
412
- if(dn.nodeName && dn.nodeName === "LI"){
413
- dn.innerHTML = " <br>";
414
- }
415
-
416
- // Construct the editor div structure.
417
- this.header = dn.ownerDocument.createElement("div");
418
- dn.appendChild(this.header);
419
- this.editingArea = dn.ownerDocument.createElement("div");
420
- dn.appendChild(this.editingArea);
421
- this.footer = dn.ownerDocument.createElement("div");
422
- dn.appendChild(this.footer);
423
-
424
- if(!this.name){
425
- this.name = this.id + "_AUTOGEN";
426
- }
427
-
428
- // User has pressed back/forward button so we lost the text in the editor, but it's saved
429
- // in a hidden <textarea> (which contains the data for all the editors on this page),
430
- // so get editor value from there
431
- if(this.name !== "" && (!config["useXDomain"] || config["allowXdRichTextSave"])){
432
- var saveTextarea = dom.byId(dijit._scopeName + "._editor.RichText.value");
433
- if(saveTextarea && saveTextarea.value !== ""){
434
- var datas = saveTextarea.value.split(this._SEPARATOR), i=0, dat;
435
- while((dat=datas[i++])){
436
- var data = dat.split(this._NAME_CONTENT_SEP);
437
- if(data[0] === this.name){
438
- html = data[1];
439
- datas = datas.splice(i, 1);
440
- saveTextarea.value = datas.join(this._SEPARATOR);
441
- break;
442
- }
443
- }
444
- }
445
-
446
- if(!RichText._globalSaveHandler){
447
- RichText._globalSaveHandler = {};
448
- unload.addOnUnload(function(){
449
- var id;
450
- for(id in RichText._globalSaveHandler){
451
- var f = RichText._globalSaveHandler[id];
452
- if(lang.isFunction(f)){
453
- f();
454
- }
455
- }
456
- });
457
- }
458
- RichText._globalSaveHandler[this.id] = lang.hitch(this, "_saveContent");
459
- }
460
-
461
- this.isClosed = false;
462
-
463
- var ifr = (this.editorObject = this.iframe = this.ownerDocument.createElement('iframe'));
464
- ifr.id = this.id+"_iframe";
465
- ifr.style.border = "none";
466
- ifr.style.width = "100%";
467
- if(this._layoutMode){
468
- // iframe should be 100% height, thus getting it's height from surrounding
469
- // <div> (which has the correct height set by Editor)
470
- ifr.style.height = "100%";
471
- }else{
472
- if(has("ie") >= 7){
473
- if(this.height){
474
- ifr.style.height = this.height;
475
- }
476
- if(this.minHeight){
477
- ifr.style.minHeight = this.minHeight;
478
- }
479
- }else{
480
- ifr.style.height = this.height ? this.height : this.minHeight;
481
- }
482
- }
483
- ifr.frameBorder = 0;
484
- ifr._loadFunc = lang.hitch( this, function(w){
485
- this.window = w;
486
- this.document = this.window.document;
487
-
488
- if(has("ie")){
489
- this._localizeEditorCommands();
490
- }
491
-
492
- // Do final setup and set initial contents of editor
493
- this.onLoad(html);
494
- });
495
-
496
- // Set the iframe's initial (blank) content.
497
- var src = this._getIframeDocTxt(),
498
- s = "javascript: '" + src.replace(/\\/g, "\\\\").replace(/'/g, "\\'") + "'";
499
- ifr.setAttribute('src', s);
500
- this.editingArea.appendChild(ifr);
501
-
502
- if(has("safari") <= 4){
503
- src = ifr.getAttribute("src");
504
- if(!src || src.indexOf("javascript") === -1){
505
- // Safari 4 and earlier sometimes act oddly
506
- // So we have to set it again.
507
- this.defer(function(){ ifr.setAttribute('src', s); });
508
- }
509
- }
510
-
511
- // TODO: this is a guess at the default line-height, kinda works
512
- if(dn.nodeName === "LI"){
513
- dn.lastChild.style.marginTop = "-1.2em";
514
- }
515
-
516
- domClass.add(this.domNode, this.baseClass);
517
- },
518
-
519
- //static cache variables shared among all instance of this class
520
- _local2NativeFormatNames: {},
521
- _native2LocalFormatNames: {},
522
-
523
- _getIframeDocTxt: function(){
524
- // summary:
525
- // Generates the boilerplate text of the document inside the iframe (ie, `<html><head>...</head><body/></html>`).
526
- // Editor content (if not blank) should be added afterwards.
527
- // tags:
528
- // private
529
- var _cs = domStyle.getComputedStyle(this.domNode);
530
-
531
- // The contents inside of <body>. The real contents are set later via a call to setValue().
532
- var html = "";
533
- var setBodyId = true;
534
- if(has("ie") || has("webkit") || (!this.height && !has("mozilla"))){
535
- // In auto-expand mode, need a wrapper div for AlwaysShowToolbar plugin to correctly
536
- // expand/contract the editor as the content changes.
537
- html = "<div id='dijitEditorBody'></div>";
538
- setBodyId = false;
539
- }else if(has("mozilla")){
540
- // workaround bug where can't select then delete text (until user types something
541
- // into the editor)... and/or issue where typing doesn't erase selected text
542
- this._cursorToStart = true;
543
- html = "&#160;"; // &nbsp;
544
- }
545
-
546
- var font = [ _cs.fontWeight, _cs.fontSize, _cs.fontFamily ].join(" ");
547
-
548
- // line height is tricky - applying a units value will mess things up.
549
- // if we can't get a non-units value, bail out.
550
- var lineHeight = _cs.lineHeight;
551
- if(lineHeight.indexOf("px") >= 0){
552
- lineHeight = parseFloat(lineHeight)/parseFloat(_cs.fontSize);
553
- // console.debug(lineHeight);
554
- }else if(lineHeight.indexOf("em")>=0){
555
- lineHeight = parseFloat(lineHeight);
556
- }else{
557
- // If we can't get a non-units value, just default
558
- // it to the CSS spec default of 'normal'. Seems to
559
- // work better, esp on IE, than '1.0'
560
- lineHeight = "normal";
561
- }
562
- var userStyle = "";
563
- var self = this;
564
- this.style.replace(/(^|;)\s*(line-|font-?)[^;]+/ig, function(match){
565
- match = match.replace(/^;/ig,"") + ';';
566
- var s = match.split(":")[0];
567
- if(s){
568
- s = lang.trim(s);
569
- s = s.toLowerCase();
570
- var i;
571
- var sC = "";
572
- for(i = 0; i < s.length; i++){
573
- var c = s.charAt(i);
574
- switch(c){
575
- case "-":
576
- i++;
577
- c = s.charAt(i).toUpperCase();
578
- default:
579
- sC += c;
580
- }
581
- }
582
- domStyle.set(self.domNode, sC, "");
583
- }
584
- userStyle += match + ';';
585
- });
586
-
587
-
588
- // need to find any associated label element and update iframe document title
589
- var label=query('label[for="'+this.id+'"]');
590
-
591
- return [
592
- this.isLeftToRight() ? "<html>\n<head>\n" : "<html dir='rtl'>\n<head>\n",
593
- (has("mozilla") && label.length ? "<title>" + label[0].innerHTML + "</title>\n" : ""),
594
- "<meta http-equiv='Content-Type' content='text/html'>\n",
595
- "<style>\n",
596
- "\tbody,html {\n",
597
- "\t\tbackground:transparent;\n",
598
- "\t\tpadding: 1px 0 0 0;\n",
599
- "\t\tmargin: -1px 0 0 0;\n", // remove extraneous vertical scrollbar on safari and firefox
600
-
601
- // Set the html/body sizing. Webkit always needs this, other browsers
602
- // only set it when height is defined (not auto-expanding), otherwise
603
- // scrollers do not appear.
604
- ((has("webkit"))?"\t\twidth: 100%;\n":""),
605
- ((has("webkit"))?"\t\theight: 100%;\n":""),
606
- "\t}\n",
607
-
608
- // TODO: left positioning will cause contents to disappear out of view
609
- // if it gets too wide for the visible area
610
- "\tbody{\n",
611
- "\t\ttop:0px;\n",
612
- "\t\tleft:0px;\n",
613
- "\t\tright:0px;\n",
614
- "\t\tfont:", font, ";\n",
615
- ((this.height||has("opera")) ? "" : "\t\tposition: fixed;\n"),
616
- // FIXME: IE 6 won't understand min-height?
617
- "\t\tmin-height:", this.minHeight, ";\n",
618
- "\t\tline-height:", lineHeight,";\n",
619
- "\t}\n",
620
- "\tp{ margin: 1em 0; }\n",
621
-
622
- // Determine how scrollers should be applied. In autoexpand mode (height = "") no scrollers on y at all.
623
- // But in fixed height mode we want both x/y scrollers. Also, if it's using wrapping div and in auto-expand
624
- // (Mainly IE) we need to kill the y scroller on body and html.
625
- (!setBodyId && !this.height ? "\tbody,html {overflow-y: hidden;}\n" : ""),
626
- "\t#dijitEditorBody{overflow-x: auto; overflow-y:" + (this.height ? "auto;" : "hidden;") + " outline: 0px;}\n",
627
- "\tli > ul:-moz-first-node, li > ol:-moz-first-node{ padding-top: 1.2em; }\n",
628
- // Can't set min-height in IE9, it puts layout on li, which puts move/resize handles.
629
- (!has("ie") ? "\tli{ min-height:1.2em; }\n" : ""),
630
- "</style>\n",
631
- this._applyEditingAreaStyleSheets(),"\n",
632
- "</head>\n<body ",
633
- (setBodyId?"id='dijitEditorBody' ":""),
634
-
635
- // Onload handler fills in real editor content.
636
- // On IE9, sometimes onload is called twice, and the first time frameElement is null (test_FullScreen.html)
637
- "onload='frameElement && frameElement._loadFunc(window,document)' ",
638
- "style='"+userStyle+"'>", html, "</body>\n</html>"
639
- ].join(""); // String
640
- },
641
-
642
- _applyEditingAreaStyleSheets: function(){
643
- // summary:
644
- // apply the specified css files in styleSheets
645
- // tags:
646
- // private
647
- var files = [];
648
- if(this.styleSheets){
649
- files = this.styleSheets.split(';');
650
- this.styleSheets = '';
651
- }
652
-
653
- //empty this.editingAreaStyleSheets here, as it will be filled in addStyleSheet
654
- files = files.concat(this.editingAreaStyleSheets);
655
- this.editingAreaStyleSheets = [];
656
-
657
- var text='', i=0, url;
658
- while((url=files[i++])){
659
- var abstring = (new _Url(win.global.location, url)).toString();
660
- this.editingAreaStyleSheets.push(abstring);
661
- text += '<link rel="stylesheet" type="text/css" href="'+abstring+'"/>';
662
- }
663
- return text;
664
- },
665
-
666
- addStyleSheet: function(/*dojo/_base/url*/ uri){
667
- // summary:
668
- // add an external stylesheet for the editing area
669
- // uri:
670
- // Url of the external css file
671
- var url=uri.toString();
672
-
673
- //if uri is relative, then convert it to absolute so that it can be resolved correctly in iframe
674
- if(url.charAt(0) === '.' || (url.charAt(0) !== '/' && !uri.host)){
675
- url = (new _Url(win.global.location, url)).toString();
676
- }
677
-
678
- if(array.indexOf(this.editingAreaStyleSheets, url) > -1){
679
- // console.debug("dijit/_editor/RichText.addStyleSheet(): Style sheet "+url+" is already applied");
680
- return;
681
- }
682
-
683
- this.editingAreaStyleSheets.push(url);
684
- this.onLoadDeferred.then(lang.hitch(this, function(){
685
- if(this.document.createStyleSheet){ //IE
686
- this.document.createStyleSheet(url);
687
- }else{ //other browser
688
- var head = this.document.getElementsByTagName("head")[0];
689
- var stylesheet = this.document.createElement("link");
690
- stylesheet.rel="stylesheet";
691
- stylesheet.type="text/css";
692
- stylesheet.href=url;
693
- head.appendChild(stylesheet);
694
- }
695
- }));
696
- },
697
-
698
- removeStyleSheet: function(/*dojo/_base/url*/ uri){
699
- // summary:
700
- // remove an external stylesheet for the editing area
701
- var url=uri.toString();
702
- //if uri is relative, then convert it to absolute so that it can be resolved correctly in iframe
703
- if(url.charAt(0) === '.' || (url.charAt(0) !== '/' && !uri.host)){
704
- url = (new _Url(win.global.location, url)).toString();
705
- }
706
- var index = array.indexOf(this.editingAreaStyleSheets, url);
707
- if(index === -1){
708
- // console.debug("dijit/_editor/RichText.removeStyleSheet(): Style sheet "+url+" has not been applied");
709
- return;
710
- }
711
- delete this.editingAreaStyleSheets[index];
712
- query('link:[href="'+url+'"]', this.window.document).orphan();
713
- },
714
-
715
- // disabled: Boolean
716
- // The editor is disabled; the text cannot be changed.
717
- disabled: false,
718
-
719
- _mozSettingProps: {'styleWithCSS':false},
720
- _setDisabledAttr: function(/*Boolean*/ value){
721
- value = !!value;
722
- this._set("disabled", value);
723
- if(!this.isLoaded){ return; } // this method requires init to be complete
724
- if(has("ie") || has("webkit") || has("opera")){
725
- var preventIEfocus = has("ie") && (this.isLoaded || !this.focusOnLoad);
726
- if(preventIEfocus){ this.editNode.unselectable = "on"; }
727
- this.editNode.contentEditable = !value;
728
- if(preventIEfocus){
729
- this.defer(function(){
730
- if(this.editNode){ // guard in case widget destroyed before timeout
731
- this.editNode.unselectable = "off";
732
- }
733
- });
734
- }
735
- }else{ //moz
736
- try{
737
- this.document.designMode=(value?'off':'on');
738
- }catch(e){ return; } // ! _disabledOK
739
- if(!value && this._mozSettingProps){
740
- var ps = this._mozSettingProps;
741
- var n;
742
- for(n in ps){
743
- if(ps.hasOwnProperty(n)){
744
- try{
745
- this.document.execCommand(n,false,ps[n]);
746
- }catch(e2){}
747
- }
748
- }
749
- }
750
- // this.document.execCommand('contentReadOnly', false, value);
751
- // if(value){
752
- // this.blur(); //to remove the blinking caret
753
- // }
754
- }
755
- this._disabledOK = true;
756
- },
757
-
758
- /* Event handlers
759
- *****************/
760
-
761
- onLoad: function(/*String*/ html){
762
- // summary:
763
- // Handler after the iframe finishes loading.
764
- // html: String
765
- // Editor contents should be set to this value
766
- // tags:
767
- // protected
768
-
769
- // TODO: rename this to _onLoad, make empty public onLoad() method, deprecate/make protected onLoadDeferred handler?
770
-
771
- if(!this.window.__registeredWindow){
772
- this.window.__registeredWindow = true;
773
- this._iframeRegHandle = focus.registerIframe(this.iframe);
774
- }
775
- if(!has("ie") && !has("webkit") && (this.height || has("mozilla"))){
776
- this.editNode=this.document.body;
777
- }else{
778
- // there's a wrapper div around the content, see _getIframeDocTxt().
779
- this.editNode=this.document.body.firstChild;
780
- var _this = this;
781
- if(has("ie")){ // #4996 IE wants to focus the BODY tag
782
- this.tabStop = domConstruct.create('div', { tabIndex: -1 }, this.editingArea);
783
- this.iframe.onfocus = function(){ _this.editNode.setActive(); };
784
- }
785
- }
786
- this.focusNode = this.editNode; // for InlineEditBox
787
-
788
-
789
- var events = this.events.concat(this.captureEvents);
790
- var ap = this.iframe ? this.document : this.editNode;
791
- array.forEach(events, function(item){
792
- this.connect(ap, item.toLowerCase(), item);
793
- }, this);
794
-
795
- this.connect(ap, "onmouseup", "onClick"); // mouseup in the margin does not generate an onclick event
796
-
797
- if(has("ie")){ // IE contentEditable
798
- this.connect(this.document, "onmousedown", "_onIEMouseDown"); // #4996 fix focus
799
-
800
- // give the node Layout on IE
801
- // TODO: this may no longer be needed, since we've reverted IE to using an iframe,
802
- // not contentEditable. Removing it would also probably remove the need for creating
803
- // the extra <div> in _getIframeDocTxt()
804
- this.editNode.style.zoom = 1.0;
805
- }else{
806
- this.connect(this.document, "onmousedown", function(){
807
- // Clear the moveToStart focus, as mouse
808
- // down will set cursor point. Required to properly
809
- // work with selection/position driven plugins and clicks in
810
- // the window. refs: #10678
811
- delete this._cursorToStart;
812
- });
813
- }
814
-
815
- if(has("webkit")){
816
- //WebKit sometimes doesn't fire right on selections, so the toolbar
817
- //doesn't update right. Therefore, help it out a bit with an additional
818
- //listener. A mouse up will typically indicate a display change, so fire this
819
- //and get the toolbar to adapt. Reference: #9532
820
- this._webkitListener = this.connect(this.document, "onmouseup", "onDisplayChanged");
821
- this.connect(this.document, "onmousedown", function(e){
822
- var t = e.target;
823
- if(t && (t === this.document.body || t === this.document)){
824
- // Since WebKit uses the inner DIV, we need to check and set position.
825
- // See: #12024 as to why the change was made.
826
- this.defer("placeCursorAtEnd");
827
- }
828
- });
829
- }
830
-
831
- if(has("ie")){
832
- // Try to make sure 'hidden' elements aren't visible in edit mode (like browsers other than IE
833
- // do). See #9103
834
- try{
835
- this.document.execCommand('RespectVisibilityInDesign', true, null);
836
- }catch(e){/* squelch */}
837
- }
838
-
839
- this.isLoaded = true;
840
-
841
- this.set('disabled', this.disabled); // initialize content to editable (or not)
842
-
843
- // Note that setValue() call will only work after isLoaded is set to true (above)
844
-
845
- // Set up a function to allow delaying the setValue until a callback is fired
846
- // This ensures extensions like dijit.Editor have a way to hold the value set
847
- // until plugins load (and do things like register filters).
848
- var setContent = lang.hitch(this, function(){
849
- this.setValue(html);
850
- if(this.onLoadDeferred){
851
- this.onLoadDeferred.resolve(true);
852
- }
853
- this.onDisplayChanged();
854
- if(this.focusOnLoad){
855
- // after the document loads, then set focus after updateInterval expires so that
856
- // onNormalizedDisplayChanged has run to avoid input caret issues
857
- ready(lang.hitch(this, "defer", "focus", this.updateInterval));
858
- }
859
- // Save off the initial content now
860
- this.value = this.getValue(true);
861
- });
862
- if(this.setValueDeferred){
863
- this.setValueDeferred.then(setContent);
864
- }else{
865
- setContent();
866
- }
867
- },
868
-
869
- onKeyDown: function(/* Event */ e){
870
- // summary:
871
- // Handler for onkeydown event
872
- // tags:
873
- // protected
874
-
875
- // we need this event at the moment to get the events from control keys
876
- // such as the backspace. It might be possible to add this to Dojo, so that
877
- // keyPress events can be emulated by the keyDown and keyUp detection.
878
-
879
- if(e.keyCode === keys.TAB && this.isTabIndent ){
880
- event.stop(e); //prevent tab from moving focus out of editor
881
-
882
- // FIXME: this is a poor-man's indent/outdent. It would be
883
- // better if it added 4 "&nbsp;" chars in an undoable way.
884
- // Unfortunately pasteHTML does not prove to be undoable
885
- if(this.queryCommandEnabled((e.shiftKey ? "outdent" : "indent"))){
886
- this.execCommand((e.shiftKey ? "outdent" : "indent"));
887
- }
888
- }
889
- if(has("ie")){
890
- if(e.keyCode == keys.TAB && !this.isTabIndent){
891
- if(e.shiftKey && !e.ctrlKey && !e.altKey){
892
- // focus the BODY so the browser will tab away from it instead
893
- this.iframe.focus();
894
- }else if(!e.shiftKey && !e.ctrlKey && !e.altKey){
895
- // focus the BODY so the browser will tab away from it instead
896
- this.tabStop.focus();
897
- }
898
- }else if(e.keyCode === keys.BACKSPACE && this.document.selection.type === "Control"){
899
- // IE has a bug where if a non-text object is selected in the editor,
900
- // hitting backspace would act as if the browser's back button was
901
- // clicked instead of deleting the object. see #1069
902
- event.stop(e);
903
- this.execCommand("delete");
904
- }else if((65 <= e.keyCode && e.keyCode <= 90) ||
905
- (e.keyCode>=37 && e.keyCode<=40) // FIXME: get this from connect() instead!
906
- ){ //arrow keys
907
- e.charCode = e.keyCode;
908
- this.onKeyPress(e);
909
- }
910
- }
911
- if(has("ff")){
912
- if(e.keyCode === keys.PAGE_UP || e.keyCode === keys.PAGE_DOWN ){
913
- if(this.editNode.clientHeight >= this.editNode.scrollHeight){
914
- // Stop the event to prevent firefox from trapping the cursor when there is no scroll bar.
915
- e.preventDefault();
916
- }
917
- }
918
- }
919
- return true;
920
- },
921
-
922
- onKeyUp: function(/*===== e =====*/){
923
- // summary:
924
- // Handler for onkeyup event
925
- // tags:
926
- // callback
927
- },
928
-
929
- setDisabled: function(/*Boolean*/ disabled){
930
- // summary:
931
- // Deprecated, use set('disabled', ...) instead.
932
- // tags:
933
- // deprecated
934
- kernel.deprecated('dijit.Editor::setDisabled is deprecated','use dijit.Editor::attr("disabled",boolean) instead', 2.0);
935
- this.set('disabled',disabled);
936
- },
937
- _setValueAttr: function(/*String*/ value){
938
- // summary:
939
- // Registers that attr("value", foo) should call setValue(foo)
940
- this.setValue(value);
941
- },
942
- _setDisableSpellCheckAttr: function(/*Boolean*/ disabled){
943
- if(this.document){
944
- domAttr.set(this.document.body, "spellcheck", !disabled);
945
- }else{
946
- // try again after the editor is finished loading
947
- this.onLoadDeferred.then(lang.hitch(this, function(){
948
- domAttr.set(this.document.body, "spellcheck", !disabled);
949
- }));
950
- }
951
- this._set("disableSpellCheck", disabled);
952
- },
953
-
954
- onKeyPress: function(e){
955
- // summary:
956
- // Handle the various key events
957
- // tags:
958
- // protected
959
-
960
- var c = (e.keyChar && e.keyChar.toLowerCase()) || e.keyCode,
961
- handlers = this._keyHandlers[c],
962
- args = arguments;
963
-
964
- if(handlers && !e.altKey){
965
- array.some(handlers, function(h){
966
- // treat meta- same as ctrl-, for benefit of mac users
967
- if(!(h.shift ^ e.shiftKey) && !(h.ctrl ^ (e.ctrlKey||e.metaKey))){
968
- if(!h.handler.apply(this, args)){
969
- e.preventDefault();
970
- }
971
- return true;
972
- }
973
- }, this);
974
- }
975
-
976
- // function call after the character has been inserted
977
- if(!this._onKeyHitch){
978
- this._onKeyHitch = lang.hitch(this, "onKeyPressed");
979
- }
980
- this.defer("_onKeyHitch", 1);
981
- return true;
982
- },
983
-
984
- addKeyHandler: function(/*String*/ key, /*Boolean*/ ctrl, /*Boolean*/ shift, /*Function*/ handler){
985
- // summary:
986
- // Add a handler for a keyboard shortcut
987
- // description:
988
- // The key argument should be in lowercase if it is a letter character
989
- // tags:
990
- // protected
991
- if(!lang.isArray(this._keyHandlers[key])){
992
- this._keyHandlers[key] = [];
993
- }
994
- //TODO: would be nice to make this a hash instead of an array for quick lookups
995
- this._keyHandlers[key].push({
996
- shift: shift || false,
997
- ctrl: ctrl || false,
998
- handler: handler
999
- });
1000
- },
1001
-
1002
- onKeyPressed: function(){
1003
- // summary:
1004
- // Handler for after the user has pressed a key, and the display has been updated.
1005
- // (Runs on a timer so that it runs after the display is updated)
1006
- // tags:
1007
- // private
1008
- this.onDisplayChanged(/*e*/); // can't pass in e
1009
- },
1010
-
1011
- onClick: function(/*Event*/ e){
1012
- // summary:
1013
- // Handler for when the user clicks.
1014
- // tags:
1015
- // private
1016
-
1017
- // console.info('onClick',this._tryDesignModeOn);
1018
- this.onDisplayChanged(e);
1019
- },
1020
-
1021
- _onIEMouseDown: function(){
1022
- // summary:
1023
- // IE only to prevent 2 clicks to focus
1024
- // tags:
1025
- // protected
1026
-
1027
- if(!this.focused && !this.disabled){
1028
- this.focus();
1029
- }
1030
- },
1031
-
1032
- _onBlur: function(e){
1033
- // summary:
1034
- // Called from focus manager when focus has moved away from this editor
1035
- // tags:
1036
- // protected
1037
-
1038
- // console.info('_onBlur')
1039
-
1040
- this.inherited(arguments);
1041
-
1042
- var newValue = this.getValue(true);
1043
- if(newValue !== this.value){
1044
- this.onChange(newValue);
1045
- }
1046
- this._set("value", newValue);
1047
- },
1048
-
1049
- _onFocus: function(/*Event*/ e){
1050
- // summary:
1051
- // Called from focus manager when focus has moved into this editor
1052
- // tags:
1053
- // protected
1054
-
1055
- // console.info('_onFocus')
1056
- if(!this.disabled){
1057
- if(!this._disabledOK){
1058
- this.set('disabled', false);
1059
- }
1060
- this.inherited(arguments);
1061
- }
1062
- },
1063
-
1064
- // TODO: remove in 2.0
1065
- blur: function(){
1066
- // summary:
1067
- // Remove focus from this instance.
1068
- // tags:
1069
- // deprecated
1070
- if(!has("ie") && this.window.document.documentElement && this.window.document.documentElement.focus){
1071
- this.window.document.documentElement.focus();
1072
- }else if(this.ownerDocumentBody.focus){
1073
- this.ownerDocumentBody.focus();
1074
- }
1075
- },
1076
-
1077
- focus: function(){
1078
- // summary:
1079
- // Move focus to this editor
1080
- if(!this.isLoaded){
1081
- this.focusOnLoad = true;
1082
- return;
1083
- }
1084
- if(this._cursorToStart){
1085
- delete this._cursorToStart;
1086
- if(this.editNode.childNodes){
1087
- this.placeCursorAtStart(); // this calls focus() so return
1088
- return;
1089
- }
1090
- }
1091
- if(!has("ie")){
1092
- focus.focus(this.iframe);
1093
- }else if(this.editNode && this.editNode.focus){
1094
- // editNode may be hidden in display:none div, lets just punt in this case
1095
- //this.editNode.focus(); -> causes IE to scroll always (strict and quirks mode) to the top the Iframe
1096
- // if we fire the event manually and let the browser handle the focusing, the latest
1097
- // cursor position is focused like in FF
1098
- this.iframe.fireEvent('onfocus', document.createEventObject()); // createEventObject only in IE
1099
- // }else{
1100
- // TODO: should we throw here?
1101
- // console.debug("Have no idea how to focus into the editor!");
1102
- }
1103
- },
1104
-
1105
- // _lastUpdate: 0,
1106
- updateInterval: 200,
1107
- _updateTimer: null,
1108
- onDisplayChanged: function(/*Event*/ /*===== e =====*/){
1109
- // summary:
1110
- // This event will be fired every time the display context
1111
- // changes and the result needs to be reflected in the UI.
1112
- // description:
1113
- // If you don't want to have update too often,
1114
- // onNormalizedDisplayChanged should be used instead
1115
- // tags:
1116
- // private
1117
-
1118
- // var _t=new Date();
1119
- if(this._updateTimer){
1120
- this._updateTimer.remove();
1121
- }
1122
- this._updateTimer = this.defer("onNormalizedDisplayChanged", this.updateInterval);
1123
-
1124
- // Technically this should trigger a call to watch("value", ...) registered handlers,
1125
- // but getValue() is too slow to call on every keystroke so we don't.
1126
- },
1127
- onNormalizedDisplayChanged: function(){
1128
- // summary:
1129
- // This event is fired every updateInterval ms or more
1130
- // description:
1131
- // If something needs to happen immediately after a
1132
- // user change, please use onDisplayChanged instead.
1133
- // tags:
1134
- // private
1135
- delete this._updateTimer;
1136
- },
1137
- onChange: function(/*===== newContent =====*/){
1138
- // summary:
1139
- // This is fired if and only if the editor loses focus and
1140
- // the content is changed.
1141
- },
1142
- _normalizeCommand: function(/*String*/ cmd, /*Anything?*/argument){
1143
- // summary:
1144
- // Used as the advice function to map our
1145
- // normalized set of commands to those supported by the target
1146
- // browser.
1147
- // tags:
1148
- // private
1149
-
1150
- var command = cmd.toLowerCase();
1151
- if(command === "formatblock"){
1152
- if(has("safari") && argument === undefined){ command = "heading"; }
1153
- }else if(command === "hilitecolor" && !has("mozilla")){
1154
- command = "backcolor";
1155
- }
1156
-
1157
- return command;
1158
- },
1159
-
1160
- _qcaCache: {},
1161
- queryCommandAvailable: function(/*String*/ command){
1162
- // summary:
1163
- // Tests whether a command is supported by the host. Clients
1164
- // SHOULD check whether a command is supported before attempting
1165
- // to use it, behaviour for unsupported commands is undefined.
1166
- // command:
1167
- // The command to test for
1168
- // tags:
1169
- // private
1170
-
1171
- // memoizing version. See _queryCommandAvailable for computing version
1172
- var ca = this._qcaCache[command];
1173
- if(ca !== undefined){ return ca; }
1174
- return (this._qcaCache[command] = this._queryCommandAvailable(command));
1175
- },
1176
-
1177
- _queryCommandAvailable: function(/*String*/ command){
1178
- // summary:
1179
- // See queryCommandAvailable().
1180
- // tags:
1181
- // private
1182
-
1183
- var ie = 1;
1184
- var mozilla = 1 << 1;
1185
- var webkit = 1 << 2;
1186
- var opera = 1 << 3;
1187
-
1188
- function isSupportedBy(browsers){
1189
- return {
1190
- ie: Boolean(browsers & ie),
1191
- mozilla: Boolean(browsers & mozilla),
1192
- webkit: Boolean(browsers & webkit),
1193
- opera: Boolean(browsers & opera)
1194
- };
1195
- }
1196
-
1197
- var supportedBy = null;
1198
-
1199
- switch(command.toLowerCase()){
1200
- case "bold": case "italic": case "underline":
1201
- case "subscript": case "superscript":
1202
- case "fontname": case "fontsize":
1203
- case "forecolor": case "hilitecolor":
1204
- case "justifycenter": case "justifyfull": case "justifyleft":
1205
- case "justifyright": case "delete": case "selectall": case "toggledir":
1206
- supportedBy = isSupportedBy(mozilla | ie | webkit | opera);
1207
- break;
1208
-
1209
- case "createlink": case "unlink": case "removeformat":
1210
- case "inserthorizontalrule": case "insertimage":
1211
- case "insertorderedlist": case "insertunorderedlist":
1212
- case "indent": case "outdent": case "formatblock":
1213
- case "inserthtml": case "undo": case "redo": case "strikethrough": case "tabindent":
1214
- supportedBy = isSupportedBy(mozilla | ie | opera | webkit);
1215
- break;
1216
-
1217
- case "blockdirltr": case "blockdirrtl":
1218
- case "dirltr": case "dirrtl":
1219
- case "inlinedirltr": case "inlinedirrtl":
1220
- supportedBy = isSupportedBy(ie);
1221
- break;
1222
- case "cut": case "copy": case "paste":
1223
- supportedBy = isSupportedBy( ie | mozilla | webkit | opera);
1224
- break;
1225
-
1226
- case "inserttable":
1227
- supportedBy = isSupportedBy(mozilla | ie);
1228
- break;
1229
-
1230
- case "insertcell": case "insertcol": case "insertrow":
1231
- case "deletecells": case "deletecols": case "deleterows":
1232
- case "mergecells": case "splitcell":
1233
- supportedBy = isSupportedBy(ie | mozilla);
1234
- break;
1235
-
1236
- default: return false;
1237
- }
1238
-
1239
- return (has("ie") && supportedBy.ie) ||
1240
- (has("mozilla") && supportedBy.mozilla) ||
1241
- (has("webkit") && supportedBy.webkit) ||
1242
- (has("opera") && supportedBy.opera); // Boolean return true if the command is supported, false otherwise
1243
- },
1244
-
1245
- execCommand: function(/*String*/ command, argument){
1246
- // summary:
1247
- // Executes a command in the Rich Text area
1248
- // command:
1249
- // The command to execute
1250
- // argument:
1251
- // An optional argument to the command
1252
- // tags:
1253
- // protected
1254
- var returnValue;
1255
-
1256
- //focus() is required for IE to work
1257
- //In addition, focus() makes sure after the execution of
1258
- //the command, the editor receives the focus as expected
1259
- this.focus();
1260
-
1261
- command = this._normalizeCommand(command, argument);
1262
-
1263
- if(argument !== undefined){
1264
- if(command === "heading"){
1265
- throw new Error("unimplemented");
1266
- }else if((command === "formatblock") && has("ie")){
1267
- argument = '<'+argument+'>';
1268
- }
1269
- }
1270
-
1271
- //Check to see if we have any over-rides for commands, they will be functions on this
1272
- //widget of the form _commandImpl. If we don't, fall through to the basic native
1273
- //exec command of the browser.
1274
- var implFunc = "_" + command + "Impl";
1275
- if(this[implFunc]){
1276
- returnValue = this[implFunc](argument);
1277
- }else{
1278
- argument = arguments.length > 1 ? argument : null;
1279
- if(argument || command !== "createlink"){
1280
- returnValue = this.document.execCommand(command, false, argument);
1281
- }
1282
- }
1283
-
1284
- this.onDisplayChanged();
1285
- return returnValue;
1286
- },
1287
-
1288
- queryCommandEnabled: function(/*String*/ command){
1289
- // summary:
1290
- // Check whether a command is enabled or not.
1291
- // command:
1292
- // The command to execute
1293
- // tags:
1294
- // protected
1295
- if(this.disabled || !this._disabledOK){ return false; }
1296
-
1297
- command = this._normalizeCommand(command);
1298
-
1299
- //Check to see if we have any over-rides for commands, they will be functions on this
1300
- //widget of the form _commandEnabledImpl. If we don't, fall through to the basic native
1301
- //command of the browser.
1302
- var implFunc = "_" + command + "EnabledImpl";
1303
-
1304
- if(this[implFunc]){
1305
- return this[implFunc](command);
1306
- }else{
1307
- return this._browserQueryCommandEnabled(command);
1308
- }
1309
- },
1310
-
1311
- queryCommandState: function(command){
1312
- // summary:
1313
- // Check the state of a given command and returns true or false.
1314
- // tags:
1315
- // protected
1316
-
1317
- if(this.disabled || !this._disabledOK){ return false; }
1318
- command = this._normalizeCommand(command);
1319
- try{
1320
- return this.document.queryCommandState(command);
1321
- }catch(e){
1322
- //Squelch, occurs if editor is hidden on FF 3 (and maybe others.)
1323
- return false;
1324
- }
1325
- },
1326
-
1327
- queryCommandValue: function(command){
1328
- // summary:
1329
- // Check the value of a given command. This matters most for
1330
- // custom selections and complex values like font value setting.
1331
- // tags:
1332
- // protected
1333
-
1334
- if(this.disabled || !this._disabledOK){ return false; }
1335
- var r;
1336
- command = this._normalizeCommand(command);
1337
- if(has("ie") && command === "formatblock"){
1338
- r = this._native2LocalFormatNames[this.document.queryCommandValue(command)];
1339
- }else if(has("mozilla") && command === "hilitecolor"){
1340
- var oldValue;
1341
- try{
1342
- oldValue = this.document.queryCommandValue("styleWithCSS");
1343
- }catch(e){
1344
- oldValue = false;
1345
- }
1346
- this.document.execCommand("styleWithCSS", false, true);
1347
- r = this.document.queryCommandValue(command);
1348
- this.document.execCommand("styleWithCSS", false, oldValue);
1349
- }else{
1350
- r = this.document.queryCommandValue(command);
1351
- }
1352
- return r;
1353
- },
1354
-
1355
- // Misc.
1356
-
1357
- _sCall: function(name, args){
1358
- // summary:
1359
- // Run the named method of dijit/_editor/selection over the
1360
- // current editor instance's window, with the passed args.
1361
- // tags:
1362
- // private
1363
- return win.withGlobal(this.window, name, selectionapi, args);
1364
- },
1365
-
1366
- // FIXME: this is a TON of code duplication. Why?
1367
-
1368
- placeCursorAtStart: function(){
1369
- // summary:
1370
- // Place the cursor at the start of the editing area.
1371
- // tags:
1372
- // private
1373
-
1374
- this.focus();
1375
-
1376
- //see comments in placeCursorAtEnd
1377
- var isvalid=false;
1378
- if(has("mozilla")){
1379
- // TODO: Is this branch even necessary?
1380
- var first=this.editNode.firstChild;
1381
- while(first){
1382
- if(first.nodeType === 3){
1383
- if(first.nodeValue.replace(/^\s+|\s+$/g, "").length>0){
1384
- isvalid=true;
1385
- this._sCall("selectElement", [ first ]);
1386
- break;
1387
- }
1388
- }else if(first.nodeType === 1){
1389
- isvalid=true;
1390
- var tg = first.tagName ? first.tagName.toLowerCase() : "";
1391
- // Collapse before childless tags.
1392
- if(/br|input|img|base|meta|area|basefont|hr|link/.test(tg)){
1393
- this._sCall("selectElement", [ first ]);
1394
- }else{
1395
- // Collapse inside tags with children.
1396
- this._sCall("selectElementChildren", [ first ]);
1397
- }
1398
- break;
1399
- }
1400
- first = first.nextSibling;
1401
- }
1402
- }else{
1403
- isvalid=true;
1404
- this._sCall("selectElementChildren", [ this.editNode ]);
1405
- }
1406
- if(isvalid){
1407
- this._sCall("collapse", [ true ]);
1408
- }
1409
- },
1410
-
1411
- placeCursorAtEnd: function(){
1412
- // summary:
1413
- // Place the cursor at the end of the editing area.
1414
- // tags:
1415
- // private
1416
-
1417
- this.focus();
1418
-
1419
- //In mozilla, if last child is not a text node, we have to use
1420
- // selectElementChildren on this.editNode.lastChild otherwise the
1421
- // cursor would be placed at the end of the closing tag of
1422
- //this.editNode.lastChild
1423
- var isvalid=false;
1424
- if(has("mozilla")){
1425
- var last=this.editNode.lastChild;
1426
- while(last){
1427
- if(last.nodeType === 3){
1428
- if(last.nodeValue.replace(/^\s+|\s+$/g, "").length>0){
1429
- isvalid=true;
1430
- this._sCall("selectElement", [ last ]);
1431
- break;
1432
- }
1433
- }else if(last.nodeType === 1){
1434
- isvalid=true;
1435
- this._sCall("selectElement", [ last.lastChild || last]);
1436
- break;
1437
- }
1438
- last = last.previousSibling;
1439
- }
1440
- }else{
1441
- isvalid=true;
1442
- this._sCall("selectElementChildren", [ this.editNode ]);
1443
- }
1444
- if(isvalid){
1445
- this._sCall("collapse", [ false ]);
1446
- }
1447
- },
1448
-
1449
- getValue: function(/*Boolean?*/ nonDestructive){
1450
- // summary:
1451
- // Return the current content of the editing area (post filters
1452
- // are applied). Users should call get('value') instead.
1453
- // nonDestructive:
1454
- // defaults to false. Should the post-filtering be run over a copy
1455
- // of the live DOM? Most users should pass "true" here unless they
1456
- // *really* know that none of the installed filters are going to
1457
- // mess up the editing session.
1458
- // tags:
1459
- // private
1460
- if(this.textarea){
1461
- if(this.isClosed || !this.isLoaded){
1462
- return this.textarea.value;
1463
- }
1464
- }
1465
-
1466
- return this._postFilterContent(null, nonDestructive);
1467
- },
1468
- _getValueAttr: function(){
1469
- // summary:
1470
- // Hook to make attr("value") work
1471
- return this.getValue(true);
1472
- },
1473
-
1474
- setValue: function(/*String*/ html){
1475
- // summary:
1476
- // This function sets the content. No undo history is preserved.
1477
- // Users should use set('value', ...) instead.
1478
- // tags:
1479
- // deprecated
1480
-
1481
- // TODO: remove this and getValue() for 2.0, and move code to _setValueAttr()
1482
-
1483
- if(!this.isLoaded){
1484
- // try again after the editor is finished loading
1485
- this.onLoadDeferred.then(lang.hitch(this, function(){
1486
- this.setValue(html);
1487
- }));
1488
- return;
1489
- }
1490
- this._cursorToStart = true;
1491
- if(this.textarea && (this.isClosed || !this.isLoaded)){
1492
- this.textarea.value=html;
1493
- }else{
1494
- html = this._preFilterContent(html);
1495
- var node = this.isClosed ? this.domNode : this.editNode;
1496
- if(html && has("mozilla") && html.toLowerCase() === "<p></p>"){
1497
- html = "<p>&#160;</p>"; // &nbsp;
1498
- }
1499
-
1500
- // Use &nbsp; to avoid webkit problems where editor is disabled until the user clicks it
1501
- if(!html && has("webkit")){
1502
- html = "&#160;"; // &nbsp;
1503
- }
1504
- node.innerHTML = html;
1505
- this._preDomFilterContent(node);
1506
- }
1507
-
1508
- this.onDisplayChanged();
1509
- this._set("value", this.getValue(true));
1510
- },
1511
-
1512
- replaceValue: function(/*String*/ html){
1513
- // summary:
1514
- // This function set the content while trying to maintain the undo stack
1515
- // (now only works fine with Moz, this is identical to setValue in all
1516
- // other browsers)
1517
- // tags:
1518
- // protected
1519
-
1520
- if(this.isClosed){
1521
- this.setValue(html);
1522
- }else if(this.window && this.window.getSelection && !has("mozilla")){ // Safari
1523
- // look ma! it's a totally f'd browser!
1524
- this.setValue(html);
1525
- }else if(this.window && this.window.getSelection){ // Moz
1526
- html = this._preFilterContent(html);
1527
- this.execCommand("selectall");
1528
- if(!html){
1529
- this._cursorToStart = true;
1530
- html = "&#160;"; // &nbsp;
1531
- }
1532
- this.execCommand("inserthtml", html);
1533
- this._preDomFilterContent(this.editNode);
1534
- }else if(this.document && this.document.selection){//IE
1535
- //In IE, when the first element is not a text node, say
1536
- //an <a> tag, when replacing the content of the editing
1537
- //area, the <a> tag will be around all the content
1538
- //so for now, use setValue for IE too
1539
- this.setValue(html);
1540
- }
1541
-
1542
- this._set("value", this.getValue(true));
1543
- },
1544
-
1545
- _preFilterContent: function(/*String*/ html){
1546
- // summary:
1547
- // Filter the input before setting the content of the editing
1548
- // area. DOM pre-filtering may happen after this
1549
- // string-based filtering takes place but as of 1.2, this is not
1550
- // guaranteed for operations such as the inserthtml command.
1551
- // tags:
1552
- // private
1553
-
1554
- var ec = html;
1555
- array.forEach(this.contentPreFilters, function(ef){ if(ef){ ec = ef(ec); } });
1556
- return ec;
1557
- },
1558
- _preDomFilterContent: function(/*DomNode*/ dom){
1559
- // summary:
1560
- // filter the input's live DOM. All filter operations should be
1561
- // considered to be "live" and operating on the DOM that the user
1562
- // will be interacting with in their editing session.
1563
- // tags:
1564
- // private
1565
- dom = dom || this.editNode;
1566
- array.forEach(this.contentDomPreFilters, function(ef){
1567
- if(ef && lang.isFunction(ef)){
1568
- ef(dom);
1569
- }
1570
- }, this);
1571
- },
1572
-
1573
- _postFilterContent: function(
1574
- /*DomNode|DomNode[]|String?*/ dom,
1575
- /*Boolean?*/ nonDestructive){
1576
- // summary:
1577
- // filter the output after getting the content of the editing area
1578
- //
1579
- // description:
1580
- // post-filtering allows plug-ins and users to specify any number
1581
- // of transforms over the editor's content, enabling many common
1582
- // use-cases such as transforming absolute to relative URLs (and
1583
- // vice-versa), ensuring conformance with a particular DTD, etc.
1584
- // The filters are registered in the contentDomPostFilters and
1585
- // contentPostFilters arrays. Each item in the
1586
- // contentDomPostFilters array is a function which takes a DOM
1587
- // Node or array of nodes as its only argument and returns the
1588
- // same. It is then passed down the chain for further filtering.
1589
- // The contentPostFilters array behaves the same way, except each
1590
- // member operates on strings. Together, the DOM and string-based
1591
- // filtering allow the full range of post-processing that should
1592
- // be necessaray to enable even the most agressive of post-editing
1593
- // conversions to take place.
1594
- //
1595
- // If nonDestructive is set to "true", the nodes are cloned before
1596
- // filtering proceeds to avoid potentially destructive transforms
1597
- // to the content which may still needed to be edited further.
1598
- // Once DOM filtering has taken place, the serialized version of
1599
- // the DOM which is passed is run through each of the
1600
- // contentPostFilters functions.
1601
- //
1602
- // dom:
1603
- // a node, set of nodes, which to filter using each of the current
1604
- // members of the contentDomPostFilters and contentPostFilters arrays.
1605
- //
1606
- // nonDestructive:
1607
- // defaults to "false". If true, ensures that filtering happens on
1608
- // a clone of the passed-in content and not the actual node
1609
- // itself.
1610
- //
1611
- // tags:
1612
- // private
1613
-
1614
- var ec;
1615
- if(!lang.isString(dom)){
1616
- dom = dom || this.editNode;
1617
- if(this.contentDomPostFilters.length){
1618
- if(nonDestructive){
1619
- dom = lang.clone(dom);
1620
- }
1621
- array.forEach(this.contentDomPostFilters, function(ef){
1622
- dom = ef(dom);
1623
- });
1624
- }
1625
- ec = htmlapi.getChildrenHtml(dom);
1626
- }else{
1627
- ec = dom;
1628
- }
1629
-
1630
- if(!lang.trim(ec.replace(/^\xA0\xA0*/, '').replace(/\xA0\xA0*$/, '')).length){
1631
- ec = "";
1632
- }
1633
-
1634
- // if(has("ie")){
1635
- // //removing appended <P>&nbsp;</P> for IE
1636
- // ec = ec.replace(/(?:<p>&nbsp;</p>[\n\r]*)+$/i,"");
1637
- // }
1638
- array.forEach(this.contentPostFilters, function(ef){
1639
- ec = ef(ec);
1640
- });
1641
-
1642
- return ec;
1643
- },
1644
-
1645
- _saveContent: function(){
1646
- // summary:
1647
- // Saves the content in an onunload event if the editor has not been closed
1648
- // tags:
1649
- // private
1650
-
1651
- var saveTextarea = dom.byId(dijit._scopeName + "._editor.RichText.value");
1652
- if(saveTextarea){
1653
- if(saveTextarea.value){
1654
- saveTextarea.value += this._SEPARATOR;
1655
- }
1656
- saveTextarea.value += this.name + this._NAME_CONTENT_SEP + this.getValue(true);
1657
- }
1658
- },
1659
-
1660
-
1661
- escapeXml: function(/*String*/ str, /*Boolean*/ noSingleQuotes){
1662
- // summary:
1663
- // Adds escape sequences for special characters in XML.
1664
- // Optionally skips escapes for single quotes
1665
- // tags:
1666
- // private
1667
-
1668
- str = str.replace(/&/gm, "&amp;").replace(/</gm, "&lt;").replace(/>/gm, "&gt;").replace(/"/gm, "&quot;");
1669
- if(!noSingleQuotes){
1670
- str = str.replace(/'/gm, "&#39;");
1671
- }
1672
- return str; // string
1673
- },
1674
-
1675
- getNodeHtml: function(/* DomNode */ node){
1676
- // summary:
1677
- // Deprecated. Use dijit/_editor/html::_getNodeHtml() instead.
1678
- // tags:
1679
- // deprecated
1680
- kernel.deprecated('dijit.Editor::getNodeHtml is deprecated','use dijit/_editor/html::getNodeHtml instead', 2);
1681
- return htmlapi.getNodeHtml(node); // String
1682
- },
1683
-
1684
- getNodeChildrenHtml: function(/* DomNode */ dom){
1685
- // summary:
1686
- // Deprecated. Use dijit/_editor/html::getChildrenHtml() instead.
1687
- // tags:
1688
- // deprecated
1689
- kernel.deprecated('dijit.Editor::getNodeChildrenHtml is deprecated','use dijit/_editor/html::getChildrenHtml instead', 2);
1690
- return htmlapi.getChildrenHtml(dom);
1691
- },
1692
-
1693
- close: function(/*Boolean?*/ save){
1694
- // summary:
1695
- // Kills the editor and optionally writes back the modified contents to the
1696
- // element from which it originated.
1697
- // save:
1698
- // Whether or not to save the changes. If false, the changes are discarded.
1699
- // tags:
1700
- // private
1701
-
1702
- if(this.isClosed){ return; }
1703
-
1704
- if(!arguments.length){ save = true; }
1705
- if(save){
1706
- this._set("value", this.getValue(true));
1707
- }
1708
-
1709
- // line height is squashed for iframes
1710
- // FIXME: why was this here? if(this.iframe){ this.domNode.style.lineHeight = null; }
1711
-
1712
- if(this.interval){ clearInterval(this.interval); }
1713
-
1714
- if(this._webkitListener){
1715
- //Cleaup of WebKit fix: #9532
1716
- this.disconnect(this._webkitListener);
1717
- delete this._webkitListener;
1718
- }
1719
-
1720
- // Guard against memory leaks on IE (see #9268)
1721
- if(has("ie")){
1722
- this.iframe.onfocus = null;
1723
- }
1724
- this.iframe._loadFunc = null;
1725
-
1726
- if(this._iframeRegHandle){
1727
- this._iframeRegHandle.remove();
1728
- delete this._iframeRegHandle;
1729
- }
1730
-
1731
- if(this.textarea){
1732
- var s = this.textarea.style;
1733
- s.position = "";
1734
- s.left = s.top = "";
1735
- if(has("ie")){
1736
- s.overflow = this.__overflow;
1737
- this.__overflow = null;
1738
- }
1739
- this.textarea.value = this.value;
1740
- domConstruct.destroy(this.domNode);
1741
- this.domNode = this.textarea;
1742
- }else{
1743
- // Note that this destroys the iframe
1744
- this.domNode.innerHTML = this.value;
1745
- }
1746
- delete this.iframe;
1747
-
1748
- domClass.remove(this.domNode, this.baseClass);
1749
- this.isClosed = true;
1750
- this.isLoaded = false;
1751
-
1752
- delete this.editNode;
1753
- delete this.focusNode;
1754
-
1755
- if(this.window && this.window._frameElement){
1756
- this.window._frameElement = null;
1757
- }
1758
-
1759
- this.window = null;
1760
- this.document = null;
1761
- this.editingArea = null;
1762
- this.editorObject = null;
1763
- },
1764
-
1765
- destroy: function(){
1766
- if(!this.isClosed){ this.close(false); }
1767
- if(this._updateTimer){
1768
- this._updateTimer.remove();
1769
- }
1770
- this.inherited(arguments);
1771
- if(RichText._globalSaveHandler){
1772
- delete RichText._globalSaveHandler[this.id];
1773
- }
1774
- },
1775
-
1776
- _removeMozBogus: function(/* String */ html){
1777
- // summary:
1778
- // Post filter to remove unwanted HTML attributes generated by mozilla
1779
- // tags:
1780
- // private
1781
- return html.replace(/\stype="_moz"/gi, '').replace(/\s_moz_dirty=""/gi, '').replace(/_moz_resizing="(true|false)"/gi,''); // String
1782
- },
1783
- _removeWebkitBogus: function(/* String */ html){
1784
- // summary:
1785
- // Post filter to remove unwanted HTML attributes generated by webkit
1786
- // tags:
1787
- // private
1788
- html = html.replace(/\sclass="webkit-block-placeholder"/gi, '');
1789
- html = html.replace(/\sclass="apple-style-span"/gi, '');
1790
- // For some reason copy/paste sometime adds extra meta tags for charset on
1791
- // webkit (chrome) on mac.They need to be removed. See: #12007"
1792
- html = html.replace(/<meta charset=\"utf-8\" \/>/gi, '');
1793
- return html; // String
1794
- },
1795
- _normalizeFontStyle: function(/* String */ html){
1796
- // summary:
1797
- // Convert 'strong' and 'em' to 'b' and 'i'.
1798
- // description:
1799
- // Moz can not handle strong/em tags correctly, so to help
1800
- // mozilla and also to normalize output, convert them to 'b' and 'i'.
1801
- //
1802
- // Note the IE generates 'strong' and 'em' rather than 'b' and 'i'
1803
- // tags:
1804
- // private
1805
- return html.replace(/<(\/)?strong([ \>])/gi, '<$1b$2')
1806
- .replace(/<(\/)?em([ \>])/gi, '<$1i$2' ); // String
1807
- },
1808
-
1809
- _preFixUrlAttributes: function(/* String */ html){
1810
- // summary:
1811
- // Pre-filter to do fixing to href attributes on `<a>` and `<img>` tags
1812
- // tags:
1813
- // private
1814
- return html.replace(/(?:(<a(?=\s).*?\shref=)("|')(.*?)\2)|(?:(<a\s.*?href=)([^"'][^ >]+))/gi,
1815
- '$1$4$2$3$5$2 _djrealurl=$2$3$5$2')
1816
- .replace(/(?:(<img(?=\s).*?\ssrc=)("|')(.*?)\2)|(?:(<img\s.*?src=)([^"'][^ >]+))/gi,
1817
- '$1$4$2$3$5$2 _djrealurl=$2$3$5$2'); // String
1818
- },
1819
-
1820
- /*****************************************************************************
1821
- The following functions implement HTML manipulation commands for various
1822
- browser/contentEditable implementations. The goal of them is to enforce
1823
- standard behaviors of them.
1824
- ******************************************************************************/
1825
-
1826
- /*** queryCommandEnabled implementations ***/
1827
-
1828
- _browserQueryCommandEnabled: function(command){
1829
- // summary:
1830
- // Implementation to call to the native queryCommandEnabled of the browser.
1831
- // command:
1832
- // The command to check.
1833
- // tags:
1834
- // protected
1835
- if(!command) { return false; }
1836
- var elem = has("ie") ? this.document.selection.createRange() : this.document;
1837
- try{
1838
- return elem.queryCommandEnabled(command);
1839
- }catch(e){
1840
- return false;
1841
- }
1842
- },
1843
-
1844
- _createlinkEnabledImpl: function(/*===== argument =====*/){
1845
- // summary:
1846
- // This function implements the test for if the create link
1847
- // command should be enabled or not.
1848
- // argument:
1849
- // arguments to the exec command, if any.
1850
- // tags:
1851
- // protected
1852
- var enabled = true;
1853
- if(has("opera")){
1854
- var sel = this.window.getSelection();
1855
- if(sel.isCollapsed){
1856
- enabled = true;
1857
- }else{
1858
- enabled = this.document.queryCommandEnabled("createlink");
1859
- }
1860
- }else{
1861
- enabled = this._browserQueryCommandEnabled("createlink");
1862
- }
1863
- return enabled;
1864
- },
1865
-
1866
- _unlinkEnabledImpl: function(/*===== argument =====*/){
1867
- // summary:
1868
- // This function implements the test for if the unlink
1869
- // command should be enabled or not.
1870
- // argument:
1871
- // arguments to the exec command, if any.
1872
- // tags:
1873
- // protected
1874
- var enabled = true;
1875
- if(has("mozilla") || has("webkit")){
1876
- enabled = this._sCall("hasAncestorElement", ["a"]);
1877
- }else{
1878
- enabled = this._browserQueryCommandEnabled("unlink");
1879
- }
1880
- return enabled;
1881
- },
1882
-
1883
- _inserttableEnabledImpl: function(/*===== argument =====*/){
1884
- // summary:
1885
- // This function implements the test for if the inserttable
1886
- // command should be enabled or not.
1887
- // argument:
1888
- // arguments to the exec command, if any.
1889
- // tags:
1890
- // protected
1891
- var enabled = true;
1892
- if(has("mozilla") || has("webkit")){
1893
- enabled = true;
1894
- }else{
1895
- enabled = this._browserQueryCommandEnabled("inserttable");
1896
- }
1897
- return enabled;
1898
- },
1899
-
1900
- _cutEnabledImpl: function(/*===== argument =====*/){
1901
- // summary:
1902
- // This function implements the test for if the cut
1903
- // command should be enabled or not.
1904
- // argument:
1905
- // arguments to the exec command, if any.
1906
- // tags:
1907
- // protected
1908
- var enabled = true;
1909
- if(has("webkit")){
1910
- // WebKit deems clipboard activity as a security threat and natively would return false
1911
- var sel = this.window.getSelection();
1912
- if(sel){ sel = sel.toString(); }
1913
- enabled = !!sel;
1914
- }else{
1915
- enabled = this._browserQueryCommandEnabled("cut");
1916
- }
1917
- return enabled;
1918
- },
1919
-
1920
- _copyEnabledImpl: function(/*===== argument =====*/){
1921
- // summary:
1922
- // This function implements the test for if the copy
1923
- // command should be enabled or not.
1924
- // argument:
1925
- // arguments to the exec command, if any.
1926
- // tags:
1927
- // protected
1928
- var enabled = true;
1929
- if(has("webkit")){
1930
- // WebKit deems clipboard activity as a security threat and natively would return false
1931
- var sel = this.window.getSelection();
1932
- if(sel){ sel = sel.toString(); }
1933
- enabled = !!sel;
1934
- }else{
1935
- enabled = this._browserQueryCommandEnabled("copy");
1936
- }
1937
- return enabled;
1938
- },
1939
-
1940
- _pasteEnabledImpl: function(/*===== argument =====*/){
1941
- // summary:c
1942
- // This function implements the test for if the paste
1943
- // command should be enabled or not.
1944
- // argument:
1945
- // arguments to the exec command, if any.
1946
- // tags:
1947
- // protected
1948
- var enabled = true;
1949
- if(has("webkit")){
1950
- return true;
1951
- }else{
1952
- enabled = this._browserQueryCommandEnabled("paste");
1953
- }
1954
- return enabled;
1955
- },
1956
-
1957
- /*** execCommand implementations ***/
1958
-
1959
- _inserthorizontalruleImpl: function(argument){
1960
- // summary:
1961
- // This function implements the insertion of HTML 'HR' tags.
1962
- // into a point on the page. IE doesn't to it right, so
1963
- // we have to use an alternate form
1964
- // argument:
1965
- // arguments to the exec command, if any.
1966
- // tags:
1967
- // protected
1968
- if(has("ie")){
1969
- return this._inserthtmlImpl("<hr>");
1970
- }
1971
- return this.document.execCommand("inserthorizontalrule", false, argument);
1972
- },
1973
-
1974
- _unlinkImpl: function(argument){
1975
- // summary:
1976
- // This function implements the unlink of an 'a' tag.
1977
- // argument:
1978
- // arguments to the exec command, if any.
1979
- // tags:
1980
- // protected
1981
- if((this.queryCommandEnabled("unlink")) && (has("mozilla") || has("webkit"))){
1982
- var a = this._sCall("getAncestorElement", [ "a" ]);
1983
- this._sCall("selectElement", [ a ]);
1984
- return this.document.execCommand("unlink", false, null);
1985
- }
1986
- return this.document.execCommand("unlink", false, argument);
1987
- },
1988
-
1989
- _hilitecolorImpl: function(argument){
1990
- // summary:
1991
- // This function implements the hilitecolor command
1992
- // argument:
1993
- // arguments to the exec command, if any.
1994
- // tags:
1995
- // protected
1996
- var returnValue;
1997
- var isApplied = this._handleTextColorOrProperties("hilitecolor", argument);
1998
- if(!isApplied){
1999
- if(has("mozilla")){
2000
- // mozilla doesn't support hilitecolor properly when useCSS is
2001
- // set to false (bugzilla #279330)
2002
- this.document.execCommand("styleWithCSS", false, true);
2003
- console.log("Executing color command.");
2004
- returnValue = this.document.execCommand("hilitecolor", false, argument);
2005
- this.document.execCommand("styleWithCSS", false, false);
2006
- }else{
2007
- returnValue = this.document.execCommand("hilitecolor", false, argument);
2008
- }
2009
- }
2010
- return returnValue;
2011
- },
2012
-
2013
- _backcolorImpl: function(argument){
2014
- // summary:
2015
- // This function implements the backcolor command
2016
- // argument:
2017
- // arguments to the exec command, if any.
2018
- // tags:
2019
- // protected
2020
- if(has("ie")){
2021
- // Tested under IE 6 XP2, no problem here, comment out
2022
- // IE weirdly collapses ranges when we exec these commands, so prevent it
2023
- // var tr = this.document.selection.createRange();
2024
- argument = argument ? argument : null;
2025
- }
2026
- var isApplied = this._handleTextColorOrProperties("backcolor", argument);
2027
- if(!isApplied){
2028
- isApplied = this.document.execCommand("backcolor", false, argument);
2029
- }
2030
- return isApplied;
2031
- },
2032
-
2033
- _forecolorImpl: function(argument){
2034
- // summary:
2035
- // This function implements the forecolor command
2036
- // argument:
2037
- // arguments to the exec command, if any.
2038
- // tags:
2039
- // protected
2040
- if(has("ie")){
2041
- // Tested under IE 6 XP2, no problem here, comment out
2042
- // IE weirdly collapses ranges when we exec these commands, so prevent it
2043
- // var tr = this.document.selection.createRange();
2044
- argument = argument? argument : null;
2045
- }
2046
- var isApplied = false;
2047
- isApplied = this._handleTextColorOrProperties("forecolor", argument);
2048
- if(!isApplied){
2049
- isApplied = this.document.execCommand("forecolor", false, argument);
2050
- }
2051
- return isApplied;
2052
- },
2053
-
2054
- _inserthtmlImpl: function(argument){
2055
- // summary:
2056
- // This function implements the insertion of HTML content into
2057
- // a point on the page.
2058
- // argument:
2059
- // The content to insert, if any.
2060
- // tags:
2061
- // protected
2062
- argument = this._preFilterContent(argument);
2063
- var rv = true;
2064
- if(has("ie")){
2065
- var insertRange = this.document.selection.createRange();
2066
- if(this.document.selection.type.toUpperCase() === 'CONTROL'){
2067
- var n=insertRange.item(0);
2068
- while(insertRange.length){
2069
- insertRange.remove(insertRange.item(0));
2070
- }
2071
- n.outerHTML=argument;
2072
- }else{
2073
- insertRange.pasteHTML(argument);
2074
- }
2075
- insertRange.select();
2076
- //insertRange.collapse(true);
2077
- }else if(has("mozilla") && !argument.length){
2078
- //mozilla can not inserthtml an empty html to delete current selection
2079
- //so we delete the selection instead in this case
2080
- this._sCall("remove"); // FIXME
2081
- }else{
2082
- rv = this.document.execCommand("inserthtml", false, argument);
2083
- }
2084
- return rv;
2085
- },
2086
-
2087
- _boldImpl: function(argument){
2088
- // summary:
2089
- // This function implements an over-ride of the bold command.
2090
- // argument:
2091
- // Not used, operates by selection.
2092
- // tags:
2093
- // protected
2094
- var applied = false;
2095
- if(has("ie")){
2096
- this._adaptIESelection();
2097
- applied = this._adaptIEFormatAreaAndExec("bold");
2098
- }
2099
- if(!applied){
2100
- applied = this.document.execCommand("bold", false, argument);
2101
- }
2102
- return applied;
2103
- },
2104
-
2105
- _italicImpl: function(argument){
2106
- // summary:
2107
- // This function implements an over-ride of the italic command.
2108
- // argument:
2109
- // Not used, operates by selection.
2110
- // tags:
2111
- // protected
2112
- var applied = false;
2113
- if(has("ie")){
2114
- this._adaptIESelection();
2115
- applied = this._adaptIEFormatAreaAndExec("italic");
2116
- }
2117
- if(!applied){
2118
- applied = this.document.execCommand("italic", false, argument);
2119
- }
2120
- return applied;
2121
- },
2122
-
2123
- _underlineImpl: function(argument){
2124
- // summary:
2125
- // This function implements an over-ride of the underline command.
2126
- // argument:
2127
- // Not used, operates by selection.
2128
- // tags:
2129
- // protected
2130
- var applied = false;
2131
- if(has("ie")){
2132
- this._adaptIESelection();
2133
- applied = this._adaptIEFormatAreaAndExec("underline");
2134
- }
2135
- if(!applied){
2136
- applied = this.document.execCommand("underline", false, argument);
2137
- }
2138
- return applied;
2139
- },
2140
-
2141
- _strikethroughImpl: function(argument){
2142
- // summary:
2143
- // This function implements an over-ride of the strikethrough command.
2144
- // argument:
2145
- // Not used, operates by selection.
2146
- // tags:
2147
- // protected
2148
- var applied = false;
2149
- if(has("ie")){
2150
- this._adaptIESelection();
2151
- applied = this._adaptIEFormatAreaAndExec("strikethrough");
2152
- }
2153
- if(!applied){
2154
- applied = this.document.execCommand("strikethrough", false, argument);
2155
- }
2156
- return applied;
2157
- },
2158
-
2159
- _superscriptImpl: function(argument){
2160
- // summary:
2161
- // This function implements an over-ride of the superscript command.
2162
- // argument:
2163
- // Not used, operates by selection.
2164
- // tags:
2165
- // protected
2166
- var applied = false;
2167
- if(has("ie")){
2168
- this._adaptIESelection();
2169
- applied = this._adaptIEFormatAreaAndExec("superscript");
2170
- }
2171
- if(!applied){
2172
- applied = this.document.execCommand("superscript", false, argument);
2173
- }
2174
- return applied;
2175
- },
2176
-
2177
- _subscriptImpl: function(argument){
2178
- // summary:
2179
- // This function implements an over-ride of the superscript command.
2180
- // argument:
2181
- // Not used, operates by selection.
2182
- // tags:
2183
- // protected
2184
- var applied = false;
2185
- if(has("ie")){
2186
- this._adaptIESelection();
2187
- applied = this._adaptIEFormatAreaAndExec("subscript");
2188
-
2189
- }
2190
- if(!applied){
2191
- applied = this.document.execCommand("subscript", false, argument);
2192
- }
2193
- return applied;
2194
- },
2195
-
2196
- _fontnameImpl: function(argument){
2197
- // summary:
2198
- // This function implements the fontname command
2199
- // argument:
2200
- // arguments to the exec command, if any.
2201
- // tags:
2202
- // protected
2203
- var isApplied;
2204
- if(has("ie")){
2205
- isApplied = this._handleTextColorOrProperties("fontname", argument);
2206
- }
2207
- if(!isApplied){
2208
- isApplied = this.document.execCommand("fontname", false, argument);
2209
- }
2210
- return isApplied;
2211
- },
2212
-
2213
- _fontsizeImpl: function(argument){
2214
- // summary:
2215
- // This function implements the fontsize command
2216
- // argument:
2217
- // arguments to the exec command, if any.
2218
- // tags:
2219
- // protected
2220
- var isApplied;
2221
- if(has("ie")){
2222
- isApplied = this._handleTextColorOrProperties("fontsize", argument);
2223
- }
2224
- if(!isApplied){
2225
- isApplied = this.document.execCommand("fontsize", false, argument);
2226
- }
2227
- return isApplied;
2228
- },
2229
-
2230
- _insertorderedlistImpl: function(argument){
2231
- // summary:
2232
- // This function implements the insertorderedlist command
2233
- // argument:
2234
- // arguments to the exec command, if any.
2235
- // tags:
2236
- // protected
2237
- var applied = false;
2238
- if(has("ie")){
2239
- applied = this._adaptIEList("insertorderedlist", argument);
2240
- }
2241
- if(!applied){
2242
- applied = this.document.execCommand("insertorderedlist", false, argument);
2243
- }
2244
- return applied;
2245
- },
2246
-
2247
- _insertunorderedlistImpl: function(argument){
2248
- // summary:
2249
- // This function implements the insertunorderedlist command
2250
- // argument:
2251
- // arguments to the exec command, if any.
2252
- // tags:
2253
- // protected
2254
- var applied = false;
2255
- if(has("ie")){
2256
- applied = this._adaptIEList("insertunorderedlist", argument);
2257
- }
2258
- if(!applied){
2259
- applied = this.document.execCommand("insertunorderedlist", false, argument);
2260
- }
2261
- return applied;
2262
- },
2263
-
2264
- getHeaderHeight: function(){
2265
- // summary:
2266
- // A function for obtaining the height of the header node
2267
- return this._getNodeChildrenHeight(this.header); // Number
2268
- },
2269
-
2270
- getFooterHeight: function(){
2271
- // summary:
2272
- // A function for obtaining the height of the footer node
2273
- return this._getNodeChildrenHeight(this.footer); // Number
2274
- },
2275
-
2276
- _getNodeChildrenHeight: function(node){
2277
- // summary:
2278
- // An internal function for computing the cumulative height of all child nodes of 'node'
2279
- // node:
2280
- // The node to process the children of;
2281
- var h = 0;
2282
- if(node && node.childNodes){
2283
- // IE didn't compute it right when position was obtained on the node directly is some cases,
2284
- // so we have to walk over all the children manually.
2285
- var i;
2286
- for(i = 0; i < node.childNodes.length; i++){
2287
- var size = domGeometry.position(node.childNodes[i]);
2288
- h += size.h;
2289
- }
2290
- }
2291
- return h; // Number
2292
- },
2293
-
2294
- _isNodeEmpty: function(node, startOffset){
2295
- // summary:
2296
- // Function to test if a node is devoid of real content.
2297
- // node:
2298
- // The node to check.
2299
- // tags:
2300
- // private.
2301
- if(node.nodeType === 1/*element*/){
2302
- if(node.childNodes.length > 0){
2303
- return this._isNodeEmpty(node.childNodes[0], startOffset);
2304
- }
2305
- return true;
2306
- }else if(node.nodeType === 3/*text*/){
2307
- return (node.nodeValue.substring(startOffset) === "");
2308
- }
2309
- return false;
2310
- },
2311
-
2312
- _removeStartingRangeFromRange: function(node, range){
2313
- // summary:
2314
- // Function to adjust selection range by removing the current
2315
- // start node.
2316
- // node:
2317
- // The node to remove from the starting range.
2318
- // range:
2319
- // The range to adapt.
2320
- // tags:
2321
- // private
2322
- if(node.nextSibling){
2323
- range.setStart(node.nextSibling,0);
2324
- }else{
2325
- var parent = node.parentNode;
2326
- while(parent && parent.nextSibling == null){
2327
- //move up the tree until we find a parent that has another node, that node will be the next node
2328
- parent = parent.parentNode;
2329
- }
2330
- if(parent){
2331
- range.setStart(parent.nextSibling,0);
2332
- }
2333
- }
2334
- return range;
2335
- },
2336
-
2337
- _adaptIESelection: function(){
2338
- // summary:
2339
- // Function to adapt the IE range by removing leading 'newlines'
2340
- // Needed to fix issue with bold/italics/underline not working if
2341
- // range included leading 'newlines'.
2342
- // In IE, if a user starts a selection at the very end of a line,
2343
- // then the native browser commands will fail to execute correctly.
2344
- // To work around the issue, we can remove all empty nodes from
2345
- // the start of the range selection.
2346
- var selection = rangeapi.getSelection(this.window);
2347
- if(selection && selection.rangeCount && !selection.isCollapsed){
2348
- var range = selection.getRangeAt(0);
2349
- var firstNode = range.startContainer;
2350
- var startOffset = range.startOffset;
2351
-
2352
- while(firstNode.nodeType === 3/*text*/ && startOffset >= firstNode.length && firstNode.nextSibling){
2353
- //traverse the text nodes until we get to the one that is actually highlighted
2354
- startOffset = startOffset - firstNode.length;
2355
- firstNode = firstNode.nextSibling;
2356
- }
2357
-
2358
- //Remove the starting ranges until the range does not start with an empty node.
2359
- var lastNode=null;
2360
- while(this._isNodeEmpty(firstNode, startOffset) && firstNode !== lastNode){
2361
- lastNode =firstNode; //this will break the loop in case we can't find the next sibling
2362
- range = this._removeStartingRangeFromRange(firstNode, range); //move the start container to the next node in the range
2363
- firstNode = range.startContainer;
2364
- startOffset = 0; //start at the beginning of the new starting range
2365
- }
2366
- selection.removeAllRanges();// this will work as long as users cannot select multiple ranges. I have not been able to do that in the editor.
2367
- selection.addRange(range);
2368
- }
2369
- },
2370
-
2371
- _adaptIEFormatAreaAndExec: function(command){
2372
- // summary:
2373
- // Function to handle IE's quirkiness regarding how it handles
2374
- // format commands on a word. This involves a lit of node splitting
2375
- // and format cloning.
2376
- // command:
2377
- // The format command, needed to check if the desired
2378
- // command is true or not.
2379
- var selection = rangeapi.getSelection(this.window);
2380
- var doc = this.document;
2381
- var rs, ret, range, txt, startNode, endNode, breaker, sNode;
2382
- if(command && selection && selection.isCollapsed){
2383
- var isApplied = this.queryCommandValue(command);
2384
- if(isApplied){
2385
-
2386
- // We have to split backwards until we hit the format
2387
- var nNames = this._tagNamesForCommand(command);
2388
- range = selection.getRangeAt(0);
2389
- var fs = range.startContainer;
2390
- if(fs.nodeType === 3){
2391
- var offset = range.endOffset;
2392
- if(fs.length < offset){
2393
- //We are not looking from the right node, try to locate the correct one
2394
- ret = this._adjustNodeAndOffset(rs, offset);
2395
- fs = ret.node;
2396
- offset = ret.offset;
2397
- }
2398
- }
2399
- var topNode;
2400
- while(fs && fs !== this.editNode){
2401
- // We have to walk back and see if this is still a format or not.
2402
- // Hm, how do I do this?
2403
- var tName = fs.tagName? fs.tagName.toLowerCase() : "";
2404
- if(array.indexOf(nNames, tName) > -1){
2405
- topNode = fs;
2406
- break;
2407
- }
2408
- fs = fs.parentNode;
2409
- }
2410
-
2411
- // Okay, we have a stopping place, time to split things apart.
2412
- if(topNode){
2413
- // Okay, we know how far we have to split backwards, so we have to split now.
2414
- rs = range.startContainer;
2415
- var newblock = doc.createElement(topNode.tagName);
2416
- domConstruct.place(newblock, topNode, "after");
2417
- if(rs && rs.nodeType === 3){
2418
- // Text node, we have to split it.
2419
- var nodeToMove, tNode;
2420
- var endOffset = range.endOffset;
2421
- if(rs.length < endOffset){
2422
- //We are not splitting the right node, try to locate the correct one
2423
- ret = this._adjustNodeAndOffset(rs, endOffset);
2424
- rs = ret.node;
2425
- endOffset = ret.offset;
2426
- }
2427
-
2428
- txt = rs.nodeValue;
2429
- startNode = doc.createTextNode(txt.substring(0, endOffset));
2430
- var endText = txt.substring(endOffset, txt.length);
2431
- if(endText){
2432
- endNode = doc.createTextNode(endText);
2433
- }
2434
- // Place the split, then remove original nodes.
2435
- domConstruct.place(startNode, rs, "before");
2436
- if(endNode){
2437
- breaker = doc.createElement("span");
2438
- breaker.className = "ieFormatBreakerSpan";
2439
- domConstruct.place(breaker, rs, "after");
2440
- domConstruct.place(endNode, breaker, "after");
2441
- endNode = breaker;
2442
- }
2443
- domConstruct.destroy(rs);
2444
-
2445
- // Okay, we split the text. Now we need to see if we're
2446
- // parented to the block element we're splitting and if
2447
- // not, we have to split all the way up. Ugh.
2448
- var parentC = startNode.parentNode;
2449
- var tagList = [];
2450
- var tagData;
2451
- while(parentC !== topNode){
2452
- var tg = parentC.tagName;
2453
- tagData = {tagName: tg};
2454
- tagList.push(tagData);
2455
-
2456
- var newTg = doc.createElement(tg);
2457
- // Clone over any 'style' data.
2458
- if(parentC.style){
2459
- if(newTg.style){
2460
- if(parentC.style.cssText){
2461
- newTg.style.cssText = parentC.style.cssText;
2462
- tagData.cssText = parentC.style.cssText;
2463
- }
2464
- }
2465
- }
2466
- // If font also need to clone over any font data.
2467
- if(parentC.tagName === "FONT"){
2468
- if(parentC.color){
2469
- newTg.color = parentC.color;
2470
- tagData.color = parentC.color;
2471
- }
2472
- if(parentC.face){
2473
- newTg.face = parentC.face;
2474
- tagData.face = parentC.face;
2475
- }
2476
- if(parentC.size){ // this check was necessary on IE
2477
- newTg.size = parentC.size;
2478
- tagData.size = parentC.size;
2479
- }
2480
- }
2481
- if(parentC.className){
2482
- newTg.className = parentC.className;
2483
- tagData.className = parentC.className;
2484
- }
2485
-
2486
- // Now move end node and every sibling
2487
- // after it over into the new tag.
2488
- if(endNode){
2489
- nodeToMove = endNode;
2490
- while(nodeToMove){
2491
- tNode = nodeToMove.nextSibling;
2492
- newTg.appendChild(nodeToMove);
2493
- nodeToMove = tNode;
2494
- }
2495
- }
2496
- if(newTg.tagName == parentC.tagName){
2497
- breaker = doc.createElement("span");
2498
- breaker.className = "ieFormatBreakerSpan";
2499
- domConstruct.place(breaker, parentC, "after");
2500
- domConstruct.place(newTg, breaker, "after");
2501
- }else{
2502
- domConstruct.place(newTg, parentC, "after");
2503
- }
2504
- startNode = parentC;
2505
- endNode = newTg;
2506
- parentC = parentC.parentNode;
2507
- }
2508
-
2509
- // Lastly, move the split out all the split tags
2510
- // to the new block as they should now be split properly.
2511
- if(endNode){
2512
- nodeToMove = endNode;
2513
- if(nodeToMove.nodeType === 1 || (nodeToMove.nodeType === 3 && nodeToMove.nodeValue)){
2514
- // Non-blank text and non-text nodes need to clear out that blank space
2515
- // before moving the contents.
2516
- newblock.innerHTML = "";
2517
- }
2518
- while(nodeToMove){
2519
- tNode = nodeToMove.nextSibling;
2520
- newblock.appendChild(nodeToMove);
2521
- nodeToMove = tNode;
2522
- }
2523
- }
2524
-
2525
- // We had intermediate tags, we have to now recreate them inbetween the split
2526
- // and restore what styles, classnames, etc, we can.
2527
- var newrange;
2528
- if(tagList.length){
2529
- tagData = tagList.pop();
2530
- var newContTag = doc.createElement(tagData.tagName);
2531
- if(tagData.cssText && newContTag.style){
2532
- newContTag.style.cssText = tagData.cssText;
2533
- }
2534
- if(tagData.className){
2535
- newContTag.className = tagData.className;
2536
- }
2537
- if(tagData.tagName === "FONT"){
2538
- if(tagData.color){
2539
- newContTag.color = tagData.color;
2540
- }
2541
- if(tagData.face){
2542
- newContTag.face = tagData.face;
2543
- }
2544
- if(tagData.size){
2545
- newContTag.size = tagData.size;
2546
- }
2547
- }
2548
- domConstruct.place(newContTag, newblock, "before");
2549
- while(tagList.length){
2550
- tagData = tagList.pop();
2551
- var newTgNode = doc.createElement(tagData.tagName);
2552
- if(tagData.cssText && newTgNode.style){
2553
- newTgNode.style.cssText = tagData.cssText;
2554
- }
2555
- if(tagData.className){
2556
- newTgNode.className = tagData.className;
2557
- }
2558
- if(tagData.tagName === "FONT"){
2559
- if(tagData.color){
2560
- newTgNode.color = tagData.color;
2561
- }
2562
- if(tagData.face){
2563
- newTgNode.face = tagData.face;
2564
- }
2565
- if(tagData.size){
2566
- newTgNode.size = tagData.size;
2567
- }
2568
- }
2569
- newContTag.appendChild(newTgNode);
2570
- newContTag = newTgNode;
2571
- }
2572
-
2573
- // Okay, everything is theoretically split apart and removed from the content
2574
- // so insert the dummy text to select, select it, then
2575
- // clear to position cursor.
2576
- sNode = doc.createTextNode(".");
2577
- breaker.appendChild(sNode);
2578
- newContTag.appendChild(sNode);
2579
- newrange = rangeapi.create(this.window);
2580
- newrange.setStart(sNode, 0);
2581
- newrange.setEnd(sNode, sNode.length);
2582
- selection.removeAllRanges();
2583
- selection.addRange(newrange);
2584
- this._sCall("collapse", [false]);
2585
- sNode.parentNode.innerHTML = "";
2586
- }else{
2587
- // No extra tags, so we have to insert a breaker point and rely
2588
- // on filters to remove it later.
2589
- breaker = doc.createElement("span");
2590
- breaker.className="ieFormatBreakerSpan";
2591
- sNode = doc.createTextNode(".");
2592
- breaker.appendChild(sNode);
2593
- domConstruct.place(breaker, newblock, "before");
2594
- newrange = rangeapi.create(this.window);
2595
- newrange.setStart(sNode, 0);
2596
- newrange.setEnd(sNode, sNode.length);
2597
- selection.removeAllRanges();
2598
- selection.addRange(newrange);
2599
- this._sCall("collapse", [false]);
2600
- sNode.parentNode.innerHTML = "";
2601
- }
2602
- if(!newblock.firstChild){
2603
- // Empty, we don't need it. Split was at end or similar
2604
- // So, remove it.
2605
- domConstruct.destroy(newblock);
2606
- }
2607
- return true;
2608
- }
2609
- }
2610
- return false;
2611
- }else{
2612
- range = selection.getRangeAt(0);
2613
- rs = range.startContainer;
2614
- if(rs && rs.nodeType === 3){
2615
- // Text node, we have to split it.
2616
- var offset = range.startOffset;
2617
- if(rs.length < offset){
2618
- //We are not splitting the right node, try to locate the correct one
2619
- ret = this._adjustNodeAndOffset(rs, offset);
2620
- rs = ret.node;
2621
- offset = ret.offset;
2622
- }
2623
- txt = rs.nodeValue;
2624
- startNode = doc.createTextNode(txt.substring(0, offset));
2625
- var endText = txt.substring(offset);
2626
- if(endText !== ""){
2627
- endNode = doc.createTextNode(txt.substring(offset));
2628
- }
2629
- // Create a space, we'll select and bold it, so
2630
- // the whole word doesn't get bolded
2631
- breaker = doc.createElement("span");
2632
- sNode = doc.createTextNode(".");
2633
- breaker.appendChild(sNode);
2634
- if(startNode.length){
2635
- domConstruct.place(startNode, rs, "after");
2636
- }else{
2637
- startNode = rs;
2638
- }
2639
- domConstruct.place(breaker, startNode, "after");
2640
- if(endNode){
2641
- domConstruct.place(endNode, breaker, "after");
2642
- }
2643
- domConstruct.destroy(rs);
2644
- var newrange = rangeapi.create(this.window);
2645
- newrange.setStart(sNode, 0);
2646
- newrange.setEnd(sNode, sNode.length);
2647
- selection.removeAllRanges();
2648
- selection.addRange(newrange);
2649
- doc.execCommand(command);
2650
- domConstruct.place(breaker.firstChild, breaker, "before");
2651
- domConstruct.destroy(breaker);
2652
- newrange.setStart(sNode, 0);
2653
- newrange.setEnd(sNode, sNode.length);
2654
- selection.removeAllRanges();
2655
- selection.addRange(newrange);
2656
- this._sCall("collapse", [false]);
2657
- sNode.parentNode.innerHTML = "";
2658
- return true;
2659
- }
2660
- }
2661
- }else{
2662
- return false;
2663
- }
2664
- },
2665
-
2666
- _adaptIEList: function(command /*===== , argument =====*/){
2667
- // summary:
2668
- // This function handles normalizing the IE list behavior as
2669
- // much as possible.
2670
- // command:
2671
- // The list command to execute.
2672
- // argument:
2673
- // Any additional argument.
2674
- // tags:
2675
- // private
2676
- var selection = rangeapi.getSelection(this.window);
2677
- if(selection.isCollapsed){
2678
- // In the case of no selection, lets commonize the behavior and
2679
- // make sure that it indents if needed.
2680
- if(selection.rangeCount && !this.queryCommandValue(command)){
2681
- var range = selection.getRangeAt(0);
2682
- var sc = range.startContainer;
2683
- if(sc && sc.nodeType == 3){
2684
- // text node. Lets see if there is a node before it that isn't
2685
- // some sort of breaker.
2686
- if(!range.startOffset){
2687
- // We're at the beginning of a text area. It may have been br split
2688
- // Who knows? In any event, we must create the list manually
2689
- // or IE may shove too much into the list element. It seems to
2690
- // grab content before the text node too if it's br split.
2691
- // Why can't IE work like everyone else?
2692
-
2693
- // Create a space, we'll select and bold it, so
2694
- // the whole word doesn't get bolded
2695
- var lType = "ul";
2696
- if(command === "insertorderedlist"){
2697
- lType = "ol";
2698
- }
2699
- var list = this.document.createElement(lType);
2700
- var li = domConstruct.create("li", null, list);
2701
- domConstruct.place(list, sc, "before");
2702
- // Move in the text node as part of the li.
2703
- li.appendChild(sc);
2704
- // We need a br after it or the enter key handler
2705
- // sometimes throws errors.
2706
- domConstruct.create("br", null, list, "after");
2707
- // Okay, now lets move our cursor to the beginning.
2708
- var newrange = rangeapi.create(this.window);
2709
- newrange.setStart(sc, 0);
2710
- newrange.setEnd(sc, sc.length);
2711
- selection.removeAllRanges();
2712
- selection.addRange(newrange);
2713
- this._sCall("collapse", [true]);
2714
- return true;
2715
- }
2716
- }
2717
- }
2718
- }
2719
- return false;
2720
- },
2721
-
2722
- _handleTextColorOrProperties: function(command, argument){
2723
- // summary:
2724
- // This function handles appplying text color as best it is
2725
- // able to do so when the selection is collapsed, making the
2726
- // behavior cross-browser consistent. It also handles the name
2727
- // and size for IE.
2728
- // command:
2729
- // The command.
2730
- // argument:
2731
- // Any additional arguments.
2732
- // tags:
2733
- // private
2734
- var selection = rangeapi.getSelection(this.window);
2735
- var doc = this.document;
2736
- var rs, ret, range, txt, startNode, endNode, breaker, sNode;
2737
- argument = argument || null;
2738
- if(command && selection && selection.isCollapsed){
2739
- if(selection.rangeCount){
2740
- range = selection.getRangeAt(0);
2741
- rs = range.startContainer;
2742
- if(rs && rs.nodeType === 3){
2743
- // Text node, we have to split it.
2744
- var offset = range.startOffset;
2745
- if(rs.length < offset){
2746
- //We are not splitting the right node, try to locate the correct one
2747
- ret = this._adjustNodeAndOffset(rs, offset);
2748
- rs = ret.node;
2749
- offset = ret.offset;
2750
- }
2751
- txt = rs.nodeValue;
2752
- startNode = doc.createTextNode(txt.substring(0, offset));
2753
- var endText = txt.substring(offset);
2754
- if(endText !== ""){
2755
- endNode = doc.createTextNode(txt.substring(offset));
2756
- }
2757
- // Create a space, we'll select and bold it, so
2758
- // the whole word doesn't get bolded
2759
- breaker = doc.createElement("span");
2760
- sNode = doc.createTextNode(".");
2761
- breaker.appendChild(sNode);
2762
- // Create a junk node to avoid it trying to style the breaker.
2763
- // This will get destroyed later.
2764
- var extraSpan = doc.createElement("span");
2765
- breaker.appendChild(extraSpan);
2766
- if(startNode.length){
2767
- domConstruct.place(startNode, rs, "after");
2768
- }else{
2769
- startNode = rs;
2770
- }
2771
- domConstruct.place(breaker, startNode, "after");
2772
- if(endNode){
2773
- domConstruct.place(endNode, breaker, "after");
2774
- }
2775
- domConstruct.destroy(rs);
2776
- var newrange = rangeapi.create(this.window);
2777
- newrange.setStart(sNode, 0);
2778
- newrange.setEnd(sNode, sNode.length);
2779
- selection.removeAllRanges();
2780
- selection.addRange(newrange);
2781
- if(has("webkit")){
2782
- // WebKit is frustrating with positioning the cursor.
2783
- // It stinks to have a selected space, but there really
2784
- // isn't much choice here.
2785
- var style = "color";
2786
- if(command === "hilitecolor" || command === "backcolor"){
2787
- style = "backgroundColor";
2788
- }
2789
- domStyle.set(breaker, style, argument);
2790
- this._sCall("remove", []);
2791
- domConstruct.destroy(extraSpan);
2792
- breaker.innerHTML = "&#160;"; // &nbsp;
2793
- this._sCall("selectElement", [breaker]);
2794
- this.focus();
2795
- }else{
2796
- this.execCommand(command, argument);
2797
- domConstruct.place(breaker.firstChild, breaker, "before");
2798
- domConstruct.destroy(breaker);
2799
- newrange.setStart(sNode, 0);
2800
- newrange.setEnd(sNode, sNode.length);
2801
- selection.removeAllRanges();
2802
- selection.addRange(newrange);
2803
- this._sCall("collapse", [false]);
2804
- sNode.parentNode.removeChild(sNode);
2805
- }
2806
- return true;
2807
- }
2808
- }
2809
- }
2810
- return false;
2811
- },
2812
-
2813
- _adjustNodeAndOffset: function(/*DomNode*/node, /*Int*/offset){
2814
- // summary:
2815
- // In the case there are multiple text nodes in a row the offset may not be within the node.
2816
- // If the offset is larger than the node length, it will attempt to find
2817
- // the next text sibling until it locates the text node in which the offset refers to
2818
- // node:
2819
- // The node to check.
2820
- // offset:
2821
- // The position to find within the text node
2822
- // tags:
2823
- // private.
2824
- while(node.length < offset && node.nextSibling && node.nextSibling.nodeType === 3){
2825
- //Adjust the offset and node in the case of multiple text nodes in a row
2826
- offset = offset - node.length;
2827
- node = node.nextSibling;
2828
- }
2829
- return {"node": node, "offset": offset};
2830
- },
2831
-
2832
- _tagNamesForCommand: function(command){
2833
- // summary:
2834
- // Function to return the tab names that are associated
2835
- // with a particular style.
2836
- // command: String
2837
- // The command to return tags for.
2838
- // tags:
2839
- // private
2840
- if(command === "bold"){
2841
- return ["b", "strong"];
2842
- }else if(command === "italic"){
2843
- return ["i","em"];
2844
- }else if(command === "strikethrough"){
2845
- return ["s", "strike"];
2846
- }else if(command === "superscript"){
2847
- return ["sup"];
2848
- }else if(command === "subscript"){
2849
- return ["sub"];
2850
- }else if(command === "underline"){
2851
- return ["u"];
2852
- }
2853
- return [];
2854
- },
2855
-
2856
- _stripBreakerNodes: function(/*DOMNode*/ node){
2857
- // summary:
2858
- // Function for stripping out the breaker spans inserted by the formatting command.
2859
- // Registered as a filter for IE, handles the breaker spans needed to fix up
2860
- // How bold/italic/etc, work when selection is collapsed (single cursor).
2861
- if(!this.isLoaded){ return; } // this method requires init to be complete
2862
- query(".ieFormatBreakerSpan", node).forEach(function(b){
2863
- while(b.firstChild){
2864
- domConstruct.place(b.firstChild, b, "before");
2865
- }
2866
- domConstruct.destroy(b);
2867
- });
2868
- return node;
2869
- }
2870
- });
2871
-
2872
- return RichText;
2873
-
2874
- });