spiderfw 0.6.38 → 0.6.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (515) hide show
  1. checksums.yaml +13 -5
  2. data/CHANGELOG +23 -0
  3. data/VERSION +1 -1
  4. data/apps/core/admin/views/admin.layout.shtml +6 -0
  5. data/apps/core/auth/controllers/login_controller.rb +1 -1
  6. data/apps/core/components/assets.rb +55 -6
  7. data/apps/core/components/public/bootstrap/scss/_variables.scss +5 -2
  8. data/apps/core/components/public/bootstrap/scss/bootstrap.css +942 -236
  9. data/apps/core/components/public/bootstrap/scss/responsive.css +187 -30
  10. data/apps/core/components/public/css/tinymce/skins/lightgray/AbsoluteLayout.less +17 -0
  11. data/apps/core/components/public/css/tinymce/skins/lightgray/Animations.less +10 -0
  12. data/apps/core/components/public/css/tinymce/skins/lightgray/Button.less +172 -0
  13. data/apps/core/components/public/css/tinymce/skins/lightgray/ButtonGroup.less +71 -0
  14. data/apps/core/components/public/css/tinymce/skins/lightgray/Checkbox.less +49 -0
  15. data/apps/core/components/public/css/tinymce/skins/lightgray/ColorBox.less +6 -0
  16. data/apps/core/components/public/css/tinymce/skins/lightgray/ColorButton.less +72 -0
  17. data/apps/core/components/public/css/tinymce/skins/lightgray/ColorPicker.less +80 -0
  18. data/apps/core/components/public/css/tinymce/skins/lightgray/ComboBox.less +39 -0
  19. data/apps/core/components/public/css/tinymce/skins/lightgray/Container.less +9 -0
  20. data/apps/core/components/public/css/tinymce/skins/lightgray/Content.Inline.less +4 -0
  21. data/apps/core/components/public/css/tinymce/skins/lightgray/Content.Objects.less +166 -0
  22. data/apps/core/components/public/css/tinymce/skins/lightgray/Content.less +27 -0
  23. data/apps/core/components/public/css/tinymce/skins/lightgray/CropRect.less +54 -0
  24. data/apps/core/components/public/css/tinymce/skins/lightgray/FieldSet.less +15 -0
  25. data/apps/core/components/public/css/tinymce/skins/lightgray/FitLayout.less +9 -0
  26. data/apps/core/components/public/css/tinymce/skins/lightgray/FloatPanel.less +69 -0
  27. data/apps/core/components/public/css/tinymce/skins/lightgray/FlowLayout.less +36 -0
  28. data/apps/core/components/public/css/tinymce/skins/lightgray/Icons.Ie7.less +136 -0
  29. data/apps/core/components/public/css/tinymce/skins/lightgray/Icons.less +180 -0
  30. data/apps/core/components/public/css/tinymce/skins/lightgray/Iframe.less +6 -0
  31. data/apps/core/components/public/css/tinymce/skins/lightgray/ImagePanel.less +20 -0
  32. data/apps/core/components/public/css/tinymce/skins/lightgray/InfoBox.less +71 -0
  33. data/apps/core/components/public/css/tinymce/skins/lightgray/Label.less +38 -0
  34. data/apps/core/components/public/css/tinymce/skins/lightgray/ListBox.less +26 -0
  35. data/apps/core/components/public/css/tinymce/skins/lightgray/Menu.less +34 -0
  36. data/apps/core/components/public/css/tinymce/skins/lightgray/MenuBar.less +32 -0
  37. data/apps/core/components/public/css/tinymce/skins/lightgray/MenuButton.less +34 -0
  38. data/apps/core/components/public/css/tinymce/skins/lightgray/MenuItem.less +142 -0
  39. data/apps/core/components/public/css/tinymce/skins/lightgray/Mixins.less +54 -0
  40. data/apps/core/components/public/css/tinymce/skins/lightgray/Notification.less +144 -0
  41. data/apps/core/components/public/css/tinymce/skins/lightgray/Panel.less +7 -0
  42. data/apps/core/components/public/css/tinymce/skins/lightgray/Path.less +45 -0
  43. data/apps/core/components/public/css/tinymce/skins/lightgray/Progress.less +34 -0
  44. data/apps/core/components/public/css/tinymce/skins/lightgray/Radio.less +1 -0
  45. data/apps/core/components/public/css/tinymce/skins/lightgray/Reset.less +32 -0
  46. data/apps/core/components/public/css/tinymce/skins/lightgray/ResizeHandle.less +18 -0
  47. data/apps/core/components/public/css/tinymce/skins/lightgray/Scrollable.less +44 -0
  48. data/apps/core/components/public/css/tinymce/skins/lightgray/SelectBox.less +6 -0
  49. data/apps/core/components/public/css/tinymce/skins/lightgray/Slider.less +29 -0
  50. data/apps/core/components/public/css/tinymce/skins/lightgray/Spacer.less +5 -0
  51. data/apps/core/components/public/css/tinymce/skins/lightgray/SplitButton.less +49 -0
  52. data/apps/core/components/public/css/tinymce/skins/lightgray/StackLayout.less +5 -0
  53. data/apps/core/components/public/css/tinymce/skins/lightgray/TabPanel.less +44 -0
  54. data/apps/core/components/public/css/tinymce/skins/lightgray/TextBox.less +41 -0
  55. data/apps/core/components/public/css/tinymce/skins/lightgray/Throbber.less +19 -0
  56. data/apps/core/components/public/css/tinymce/skins/lightgray/TinyMCE.less +159 -0
  57. data/apps/core/components/public/css/tinymce/skins/lightgray/ToolTip.less +129 -0
  58. data/apps/core/components/public/css/tinymce/skins/lightgray/Variables.less +214 -0
  59. data/apps/core/components/public/css/tinymce/skins/lightgray/Window.less +127 -0
  60. data/apps/core/components/public/css/tinymce/skins/lightgray/content.inline.min.css +1 -0
  61. data/apps/core/components/public/css/tinymce/skins/lightgray/content.min.css +1 -0
  62. data/apps/core/components/public/css/tinymce/skins/lightgray/fonts/readme.md +1 -0
  63. data/apps/core/components/public/css/tinymce/skins/lightgray/fonts/tinymce-small.eot +0 -0
  64. data/apps/core/components/public/css/tinymce/skins/lightgray/fonts/tinymce-small.json +1277 -0
  65. data/apps/core/components/public/css/tinymce/skins/lightgray/fonts/tinymce-small.svg +63 -0
  66. data/apps/core/components/public/css/tinymce/skins/lightgray/fonts/tinymce-small.ttf +0 -0
  67. data/apps/core/components/public/css/tinymce/skins/lightgray/fonts/tinymce-small.woff +0 -0
  68. data/apps/core/components/public/css/tinymce/skins/lightgray/fonts/tinymce.eot +0 -0
  69. data/apps/core/components/public/css/tinymce/skins/lightgray/fonts/tinymce.json +3381 -0
  70. data/apps/core/components/public/css/tinymce/skins/lightgray/fonts/tinymce.svg +129 -0
  71. data/apps/core/components/public/css/tinymce/skins/lightgray/fonts/tinymce.ttf +0 -0
  72. data/apps/core/components/public/css/tinymce/skins/lightgray/fonts/tinymce.woff +0 -0
  73. data/apps/core/components/public/css/tinymce/skins/lightgray/img/anchor.gif +0 -0
  74. data/apps/core/components/public/css/tinymce/skins/lightgray/img/loader.gif +0 -0
  75. data/apps/core/components/public/css/tinymce/skins/lightgray/img/object.gif +0 -0
  76. data/apps/core/components/public/css/tinymce/skins/lightgray/img/trans.gif +0 -0
  77. data/apps/core/components/public/css/tinymce/skins/lightgray/skin.dev.less +46 -0
  78. data/apps/core/components/public/css/tinymce/skins/lightgray/skin.ie7.dev.less +46 -0
  79. data/apps/core/components/public/css/tinymce/skins/lightgray/skin.ie7.less +2542 -0
  80. data/apps/core/components/public/css/tinymce/skins/lightgray/skin.ie7.min.css +1 -0
  81. data/apps/core/components/public/css/tinymce/skins/lightgray/skin.less +2586 -0
  82. data/apps/core/components/public/css/tinymce/skins/lightgray/skin.min.css +1 -0
  83. data/apps/core/components/public/js/bootbox_2/bootbox.js +551 -0
  84. data/apps/core/components/public/js/jquery/jquery-ui-1.9.2/ui/i18n/jquery.ui.datepicker-it-min.js +4 -0
  85. data/apps/core/components/public/js/spider.js +7 -3
  86. data/apps/core/components/public/js/tinymce/classes/AddOnManager.js +265 -0
  87. data/apps/core/components/public/js/tinymce/classes/Compat.js +90 -0
  88. data/apps/core/components/public/js/tinymce/classes/DragDropOverrides.js +224 -0
  89. data/apps/core/components/public/js/tinymce/classes/Editor.js +2221 -0
  90. data/apps/core/components/public/js/tinymce/classes/EditorCommands.js +1028 -0
  91. data/apps/core/components/public/js/tinymce/classes/EditorManager.js +715 -0
  92. data/apps/core/components/public/js/tinymce/classes/EditorObservable.js +204 -0
  93. data/apps/core/components/public/js/tinymce/classes/EditorUpload.js +191 -0
  94. data/apps/core/components/public/js/tinymce/classes/EnterKey.js +676 -0
  95. data/apps/core/components/public/js/tinymce/classes/Env.js +177 -0
  96. data/apps/core/components/public/js/tinymce/classes/FocusManager.js +266 -0
  97. data/apps/core/components/public/js/tinymce/classes/ForceBlocks.js +138 -0
  98. data/apps/core/components/public/js/tinymce/classes/Formatter.js +2378 -0
  99. data/apps/core/components/public/js/tinymce/classes/LegacyInput.js +82 -0
  100. data/apps/core/components/public/js/tinymce/classes/Mode.js +54 -0
  101. data/apps/core/components/public/js/tinymce/classes/NodeChange.js +154 -0
  102. data/apps/core/components/public/js/tinymce/classes/NotificationManager.js +156 -0
  103. data/apps/core/components/public/js/tinymce/classes/Register.js +34 -0
  104. data/apps/core/components/public/js/tinymce/classes/SelectionOverrides.js +810 -0
  105. data/apps/core/components/public/js/tinymce/classes/Shortcuts.js +172 -0
  106. data/apps/core/components/public/js/tinymce/classes/UndoManager.js +346 -0
  107. data/apps/core/components/public/js/tinymce/classes/WindowManager.js +278 -0
  108. data/apps/core/components/public/js/tinymce/classes/caret/CaretBookmark.js +263 -0
  109. data/apps/core/components/public/js/tinymce/classes/caret/CaretCandidate.js +86 -0
  110. data/apps/core/components/public/js/tinymce/classes/caret/CaretContainer.js +151 -0
  111. data/apps/core/components/public/js/tinymce/classes/caret/CaretPosition.js +371 -0
  112. data/apps/core/components/public/js/tinymce/classes/caret/CaretUtils.js +302 -0
  113. data/apps/core/components/public/js/tinymce/classes/caret/CaretWalker.js +215 -0
  114. data/apps/core/components/public/js/tinymce/classes/caret/FakeCaret.js +192 -0
  115. data/apps/core/components/public/js/tinymce/classes/caret/LineUtils.js +135 -0
  116. data/apps/core/components/public/js/tinymce/classes/caret/LineWalker.js +166 -0
  117. data/apps/core/components/public/js/tinymce/classes/data/Binding.js +79 -0
  118. data/apps/core/components/public/js/tinymce/classes/data/ObservableArray.js +196 -0
  119. data/apps/core/components/public/js/tinymce/classes/data/ObservableObject.js +194 -0
  120. data/apps/core/components/public/js/tinymce/classes/dom/BookmarkManager.js +456 -0
  121. data/apps/core/components/public/js/tinymce/classes/dom/ControlSelection.js +634 -0
  122. data/apps/core/components/public/js/tinymce/classes/dom/DOMUtils.js +1853 -0
  123. data/apps/core/components/public/js/tinymce/classes/dom/Dimensions.js +64 -0
  124. data/apps/core/components/public/js/tinymce/classes/dom/DomQuery.js +1578 -0
  125. data/apps/core/components/public/js/tinymce/classes/dom/ElementUtils.js +118 -0
  126. data/apps/core/components/public/js/tinymce/classes/dom/EventUtils.js +583 -0
  127. data/apps/core/components/public/js/tinymce/classes/dom/NodePath.js +50 -0
  128. data/apps/core/components/public/js/tinymce/classes/dom/NodeType.js +110 -0
  129. data/apps/core/components/public/js/tinymce/classes/dom/Range.js +785 -0
  130. data/apps/core/components/public/js/tinymce/classes/dom/RangeUtils.js +628 -0
  131. data/apps/core/components/public/js/tinymce/classes/dom/ScriptLoader.js +254 -0
  132. data/apps/core/components/public/js/tinymce/classes/dom/Selection.js +1008 -0
  133. data/apps/core/components/public/js/tinymce/classes/dom/Serializer.js +506 -0
  134. data/apps/core/components/public/js/tinymce/classes/dom/Sizzle.jQuery.js +23 -0
  135. data/apps/core/components/public/js/tinymce/classes/dom/Sizzle.js +2039 -0
  136. data/apps/core/components/public/js/tinymce/classes/dom/StyleSheetLoader.js +190 -0
  137. data/apps/core/components/public/js/tinymce/classes/dom/TreeWalker.js +127 -0
  138. data/apps/core/components/public/js/tinymce/classes/dom/TridentSelection.js +508 -0
  139. data/apps/core/components/public/js/tinymce/classes/file/BlobCache.js +72 -0
  140. data/apps/core/components/public/js/tinymce/classes/file/Conversions.js +106 -0
  141. data/apps/core/components/public/js/tinymce/classes/file/ImageScanner.js +145 -0
  142. data/apps/core/components/public/js/tinymce/classes/file/Uploader.js +193 -0
  143. data/apps/core/components/public/js/tinymce/classes/fmt/Hooks.js +66 -0
  144. data/apps/core/components/public/js/tinymce/classes/fmt/Preview.js +151 -0
  145. data/apps/core/components/public/js/tinymce/classes/geom/ClientRect.js +136 -0
  146. data/apps/core/components/public/js/tinymce/classes/geom/Rect.js +214 -0
  147. data/apps/core/components/public/js/tinymce/classes/html/DomParser.js +822 -0
  148. data/apps/core/components/public/js/tinymce/classes/html/Entities.js +268 -0
  149. data/apps/core/components/public/js/tinymce/classes/html/Node.js +496 -0
  150. data/apps/core/components/public/js/tinymce/classes/html/SaxParser.js +474 -0
  151. data/apps/core/components/public/js/tinymce/classes/html/Schema.js +1004 -0
  152. data/apps/core/components/public/js/tinymce/classes/html/Serializer.js +158 -0
  153. data/apps/core/components/public/js/tinymce/classes/html/Styles.js +363 -0
  154. data/apps/core/components/public/js/tinymce/classes/html/Writer.js +199 -0
  155. data/apps/core/components/public/js/tinymce/classes/jquery.tinymce.js +377 -0
  156. data/apps/core/components/public/js/tinymce/classes/text/ExtendingChar.js +53 -0
  157. data/apps/core/components/public/js/tinymce/classes/text/Zwsp.js +36 -0
  158. data/apps/core/components/public/js/tinymce/classes/ui/AbsoluteLayout.js +63 -0
  159. data/apps/core/components/public/js/tinymce/classes/ui/BoxUtils.js +98 -0
  160. data/apps/core/components/public/js/tinymce/classes/ui/Button.js +199 -0
  161. data/apps/core/components/public/js/tinymce/classes/ui/ButtonGroup.js +62 -0
  162. data/apps/core/components/public/js/tinymce/classes/ui/Checkbox.js +162 -0
  163. data/apps/core/components/public/js/tinymce/classes/ui/ClassList.js +149 -0
  164. data/apps/core/components/public/js/tinymce/classes/ui/Collection.js +438 -0
  165. data/apps/core/components/public/js/tinymce/classes/ui/ColorBox.js +72 -0
  166. data/apps/core/components/public/js/tinymce/classes/ui/ColorButton.js +124 -0
  167. data/apps/core/components/public/js/tinymce/classes/ui/ColorPicker.js +206 -0
  168. data/apps/core/components/public/js/tinymce/classes/ui/ComboBox.js +306 -0
  169. data/apps/core/components/public/js/tinymce/classes/ui/Container.js +506 -0
  170. data/apps/core/components/public/js/tinymce/classes/ui/Control.js +1301 -0
  171. data/apps/core/components/public/js/tinymce/classes/ui/DomUtils.js +107 -0
  172. data/apps/core/components/public/js/tinymce/classes/ui/DragHelper.js +144 -0
  173. data/apps/core/components/public/js/tinymce/classes/ui/ElementPath.js +79 -0
  174. data/apps/core/components/public/js/tinymce/classes/ui/Factory.js +105 -0
  175. data/apps/core/components/public/js/tinymce/classes/ui/FieldSet.js +59 -0
  176. data/apps/core/components/public/js/tinymce/classes/ui/FilePicker.js +85 -0
  177. data/apps/core/components/public/js/tinymce/classes/ui/FitLayout.js +48 -0
  178. data/apps/core/components/public/js/tinymce/classes/ui/FlexLayout.js +246 -0
  179. data/apps/core/components/public/js/tinymce/classes/ui/FloatPanel.js +409 -0
  180. data/apps/core/components/public/js/tinymce/classes/ui/FlowLayout.js +46 -0
  181. data/apps/core/components/public/js/tinymce/classes/ui/Form.js +157 -0
  182. data/apps/core/components/public/js/tinymce/classes/ui/FormItem.js +56 -0
  183. data/apps/core/components/public/js/tinymce/classes/ui/FormatControls.js +535 -0
  184. data/apps/core/components/public/js/tinymce/classes/ui/GridLayout.js +233 -0
  185. data/apps/core/components/public/js/tinymce/classes/ui/Iframe.js +85 -0
  186. data/apps/core/components/public/js/tinymce/classes/ui/InfoBox.js +93 -0
  187. data/apps/core/components/public/js/tinymce/classes/ui/KeyboardNavigation.js +406 -0
  188. data/apps/core/components/public/js/tinymce/classes/ui/Label.js +144 -0
  189. data/apps/core/components/public/js/tinymce/classes/ui/Layout.js +120 -0
  190. data/apps/core/components/public/js/tinymce/classes/ui/ListBox.js +152 -0
  191. data/apps/core/components/public/js/tinymce/classes/ui/Menu.js +195 -0
  192. data/apps/core/components/public/js/tinymce/classes/ui/MenuBar.js +33 -0
  193. data/apps/core/components/public/js/tinymce/classes/ui/MenuButton.js +268 -0
  194. data/apps/core/components/public/js/tinymce/classes/ui/MenuItem.js +336 -0
  195. data/apps/core/components/public/js/tinymce/classes/ui/MessageBox.js +202 -0
  196. data/apps/core/components/public/js/tinymce/classes/ui/Movable.js +200 -0
  197. data/apps/core/components/public/js/tinymce/classes/ui/Notification.js +154 -0
  198. data/apps/core/components/public/js/tinymce/classes/ui/Panel.js +67 -0
  199. data/apps/core/components/public/js/tinymce/classes/ui/PanelButton.js +114 -0
  200. data/apps/core/components/public/js/tinymce/classes/ui/Path.js +127 -0
  201. data/apps/core/components/public/js/tinymce/classes/ui/Progress.js +81 -0
  202. data/apps/core/components/public/js/tinymce/classes/ui/Radio.js +29 -0
  203. data/apps/core/components/public/js/tinymce/classes/ui/ReflowQueue.js +79 -0
  204. data/apps/core/components/public/js/tinymce/classes/ui/Resizable.js +68 -0
  205. data/apps/core/components/public/js/tinymce/classes/ui/ResizeHandle.js +86 -0
  206. data/apps/core/components/public/js/tinymce/classes/ui/Scrollable.js +141 -0
  207. data/apps/core/components/public/js/tinymce/classes/ui/SelectBox.js +106 -0
  208. data/apps/core/components/public/js/tinymce/classes/ui/Selector.js +369 -0
  209. data/apps/core/components/public/js/tinymce/classes/ui/Slider.js +161 -0
  210. data/apps/core/components/public/js/tinymce/classes/ui/Spacer.js +39 -0
  211. data/apps/core/components/public/js/tinymce/classes/ui/SplitButton.js +146 -0
  212. data/apps/core/components/public/js/tinymce/classes/ui/StackLayout.js +34 -0
  213. data/apps/core/components/public/js/tinymce/classes/ui/TabPanel.js +178 -0
  214. data/apps/core/components/public/js/tinymce/classes/ui/TextBox.js +208 -0
  215. data/apps/core/components/public/js/tinymce/classes/ui/Throbber.js +88 -0
  216. data/apps/core/components/public/js/tinymce/classes/ui/Toolbar.js +56 -0
  217. data/apps/core/components/public/js/tinymce/classes/ui/Tooltip.js +73 -0
  218. data/apps/core/components/public/js/tinymce/classes/ui/Widget.js +151 -0
  219. data/apps/core/components/public/js/tinymce/classes/ui/Window.js +474 -0
  220. data/apps/core/components/public/js/tinymce/classes/util/Arr.js +153 -0
  221. data/apps/core/components/public/js/tinymce/classes/util/Class.js +167 -0
  222. data/apps/core/components/public/js/tinymce/classes/util/Color.js +235 -0
  223. data/apps/core/components/public/js/tinymce/classes/util/Delay.js +191 -0
  224. data/apps/core/components/public/js/tinymce/classes/util/EventDispatcher.js +294 -0
  225. data/apps/core/components/public/js/tinymce/classes/util/Fun.js +87 -0
  226. data/apps/core/components/public/js/tinymce/classes/util/I18n.js +116 -0
  227. data/apps/core/components/public/js/tinymce/classes/util/JSON.js +109 -0
  228. data/apps/core/components/public/js/tinymce/classes/util/JSONP.js +38 -0
  229. data/apps/core/components/public/js/tinymce/classes/util/JSONRequest.js +110 -0
  230. data/apps/core/components/public/js/tinymce/classes/util/LocalStorage.js +213 -0
  231. data/apps/core/components/public/js/tinymce/classes/util/Observable.js +129 -0
  232. data/apps/core/components/public/js/tinymce/classes/util/Promise.js +200 -0
  233. data/apps/core/components/public/js/tinymce/classes/util/Quirks.js +1701 -0
  234. data/apps/core/components/public/js/tinymce/classes/util/Tools.js +442 -0
  235. data/apps/core/components/public/js/tinymce/classes/util/URI.js +411 -0
  236. data/apps/core/components/public/js/tinymce/classes/util/VK.js +37 -0
  237. data/apps/core/components/public/js/tinymce/classes/util/XHR.js +110 -0
  238. data/apps/core/components/public/js/tinymce/jquery.tinymce.min.js +1 -0
  239. data/apps/core/components/public/js/tinymce/langs/it.js +219 -0
  240. data/apps/core/components/public/js/tinymce/langs/readme.md +3 -0
  241. data/apps/core/components/public/js/tinymce/license.txt +504 -0
  242. data/apps/core/components/public/js/tinymce/plugins/advlist/plugin.js +97 -0
  243. data/apps/core/components/public/js/tinymce/plugins/advlist/plugin.min.js +1 -0
  244. data/apps/core/components/public/js/tinymce/plugins/anchor/plugin.js +55 -0
  245. data/apps/core/components/public/js/tinymce/plugins/anchor/plugin.min.js +1 -0
  246. data/apps/core/components/public/js/tinymce/plugins/autolink/plugin.js +204 -0
  247. data/apps/core/components/public/js/tinymce/plugins/autolink/plugin.min.js +1 -0
  248. data/apps/core/components/public/js/tinymce/plugins/autoresize/plugin.js +162 -0
  249. data/apps/core/components/public/js/tinymce/plugins/autoresize/plugin.min.js +1 -0
  250. data/apps/core/components/public/js/tinymce/plugins/autosave/plugin.js +165 -0
  251. data/apps/core/components/public/js/tinymce/plugins/autosave/plugin.min.js +1 -0
  252. data/apps/core/components/public/js/tinymce/plugins/bbcode/plugin.js +123 -0
  253. data/apps/core/components/public/js/tinymce/plugins/bbcode/plugin.min.js +1 -0
  254. data/apps/core/components/public/js/tinymce/plugins/charmap/plugin.js +450 -0
  255. data/apps/core/components/public/js/tinymce/plugins/charmap/plugin.min.js +1 -0
  256. data/apps/core/components/public/js/tinymce/plugins/code/plugin.js +60 -0
  257. data/apps/core/components/public/js/tinymce/plugins/code/plugin.min.js +1 -0
  258. data/apps/core/components/public/js/tinymce/plugins/codesample/classes/Dialog.js +121 -0
  259. data/apps/core/components/public/js/tinymce/plugins/codesample/classes/Plugin.js +95 -0
  260. data/apps/core/components/public/js/tinymce/plugins/codesample/classes/Prism.js +937 -0
  261. data/apps/core/components/public/js/tinymce/plugins/codesample/classes/Utils.js +33 -0
  262. data/apps/core/components/public/js/tinymce/plugins/codesample/css/prism.css +138 -0
  263. data/apps/core/components/public/js/tinymce/plugins/codesample/plugin.dev.js +141 -0
  264. data/apps/core/components/public/js/tinymce/plugins/codesample/plugin.js +1299 -0
  265. data/apps/core/components/public/js/tinymce/plugins/codesample/plugin.min.js +1 -0
  266. data/apps/core/components/public/js/tinymce/plugins/colorpicker/plugin.js +112 -0
  267. data/apps/core/components/public/js/tinymce/plugins/colorpicker/plugin.min.js +1 -0
  268. data/apps/core/components/public/js/tinymce/plugins/compat3x/css/dialog.css +118 -0
  269. data/apps/core/components/public/js/tinymce/plugins/compat3x/img/buttons.png +0 -0
  270. data/apps/core/components/public/js/tinymce/plugins/compat3x/img/icons.gif +0 -0
  271. data/apps/core/components/public/js/tinymce/plugins/compat3x/img/items.gif +0 -0
  272. data/apps/core/components/public/js/tinymce/plugins/compat3x/img/menu_arrow.gif +0 -0
  273. data/apps/core/components/public/js/tinymce/plugins/compat3x/img/menu_check.gif +0 -0
  274. data/apps/core/components/public/js/tinymce/plugins/compat3x/img/progress.gif +0 -0
  275. data/apps/core/components/public/js/tinymce/plugins/compat3x/img/tabs.gif +0 -0
  276. data/apps/core/components/public/js/tinymce/plugins/compat3x/plugin.js +297 -0
  277. data/apps/core/components/public/js/tinymce/plugins/compat3x/plugin.min.js +1 -0
  278. data/apps/core/components/public/js/tinymce/plugins/compat3x/tiny_mce_popup.js +542 -0
  279. data/apps/core/components/public/js/tinymce/plugins/compat3x/utils/editable_selects.js +70 -0
  280. data/apps/core/components/public/js/tinymce/plugins/compat3x/utils/form_utils.js +210 -0
  281. data/apps/core/components/public/js/tinymce/plugins/compat3x/utils/mctabs.js +164 -0
  282. data/apps/core/components/public/js/tinymce/plugins/compat3x/utils/validate.js +252 -0
  283. data/apps/core/components/public/js/tinymce/plugins/contextmenu/plugin.js +88 -0
  284. data/apps/core/components/public/js/tinymce/plugins/contextmenu/plugin.min.js +1 -0
  285. data/apps/core/components/public/js/tinymce/plugins/directionality/plugin.js +64 -0
  286. data/apps/core/components/public/js/tinymce/plugins/directionality/plugin.min.js +1 -0
  287. data/apps/core/components/public/js/tinymce/plugins/emoticons/img/smiley-cool.gif +0 -0
  288. data/apps/core/components/public/js/tinymce/plugins/emoticons/img/smiley-cry.gif +0 -0
  289. data/apps/core/components/public/js/tinymce/plugins/emoticons/img/smiley-embarassed.gif +0 -0
  290. data/apps/core/components/public/js/tinymce/plugins/emoticons/img/smiley-foot-in-mouth.gif +0 -0
  291. data/apps/core/components/public/js/tinymce/plugins/emoticons/img/smiley-frown.gif +0 -0
  292. data/apps/core/components/public/js/tinymce/plugins/emoticons/img/smiley-innocent.gif +0 -0
  293. data/apps/core/components/public/js/tinymce/plugins/emoticons/img/smiley-kiss.gif +0 -0
  294. data/apps/core/components/public/js/tinymce/plugins/emoticons/img/smiley-laughing.gif +0 -0
  295. data/apps/core/components/public/js/tinymce/plugins/emoticons/img/smiley-money-mouth.gif +0 -0
  296. data/apps/core/components/public/js/tinymce/plugins/emoticons/img/smiley-sealed.gif +0 -0
  297. data/apps/core/components/public/js/tinymce/plugins/emoticons/img/smiley-smile.gif +0 -0
  298. data/apps/core/components/public/js/tinymce/plugins/emoticons/img/smiley-surprised.gif +0 -0
  299. data/apps/core/components/public/js/tinymce/plugins/emoticons/img/smiley-tongue-out.gif +0 -0
  300. data/apps/core/components/public/js/tinymce/plugins/emoticons/img/smiley-undecided.gif +0 -0
  301. data/apps/core/components/public/js/tinymce/plugins/emoticons/img/smiley-wink.gif +0 -0
  302. data/apps/core/components/public/js/tinymce/plugins/emoticons/img/smiley-yell.gif +0 -0
  303. data/apps/core/components/public/js/tinymce/plugins/emoticons/plugin.js +65 -0
  304. data/apps/core/components/public/js/tinymce/plugins/emoticons/plugin.min.js +1 -0
  305. data/apps/core/components/public/js/tinymce/plugins/example/dialog.html +8 -0
  306. data/apps/core/components/public/js/tinymce/plugins/example/plugin.js +68 -0
  307. data/apps/core/components/public/js/tinymce/plugins/example/plugin.min.js +1 -0
  308. data/apps/core/components/public/js/tinymce/plugins/example_dependency/plugin.js +22 -0
  309. data/apps/core/components/public/js/tinymce/plugins/example_dependency/plugin.min.js +1 -0
  310. data/apps/core/components/public/js/tinymce/plugins/fullpage/plugin.js +490 -0
  311. data/apps/core/components/public/js/tinymce/plugins/fullpage/plugin.min.js +1 -0
  312. data/apps/core/components/public/js/tinymce/plugins/fullscreen/plugin.js +154 -0
  313. data/apps/core/components/public/js/tinymce/plugins/fullscreen/plugin.min.js +1 -0
  314. data/apps/core/components/public/js/tinymce/plugins/hr/plugin.js +30 -0
  315. data/apps/core/components/public/js/tinymce/plugins/hr/plugin.min.js +1 -0
  316. data/apps/core/components/public/js/tinymce/plugins/image/plugin.js +630 -0
  317. data/apps/core/components/public/js/tinymce/plugins/image/plugin.min.js +1 -0
  318. data/apps/core/components/public/js/tinymce/plugins/imagetools/config/bolt/atomic.js +6 -0
  319. data/apps/core/components/public/js/tinymce/plugins/imagetools/config/bolt/browser.js +6 -0
  320. data/apps/core/components/public/js/tinymce/plugins/imagetools/config/bolt/demo.js +8 -0
  321. data/apps/core/components/public/js/tinymce/plugins/imagetools/config/bolt/prod.js +6 -0
  322. data/apps/core/components/public/js/tinymce/plugins/imagetools/plugin.js +2668 -0
  323. data/apps/core/components/public/js/tinymce/plugins/imagetools/plugin.min.js +1 -0
  324. data/apps/core/components/public/js/tinymce/plugins/imagetools/src/demo/html/demo.html +16 -0
  325. data/apps/core/components/public/js/tinymce/plugins/imagetools/src/demo/js/Demo.js +92 -0
  326. data/apps/core/components/public/js/tinymce/plugins/imagetools/src/main/js/CropRect.js +214 -0
  327. data/apps/core/components/public/js/tinymce/plugins/imagetools/src/main/js/Dialog.js +485 -0
  328. data/apps/core/components/public/js/tinymce/plugins/imagetools/src/main/js/ImagePanel.js +218 -0
  329. data/apps/core/components/public/js/tinymce/plugins/imagetools/src/main/js/Plugin.js +411 -0
  330. data/apps/core/components/public/js/tinymce/plugins/imagetools/src/main/js/UndoStack.js +57 -0
  331. data/apps/core/components/public/js/tinymce/plugins/importcss/plugin.js +227 -0
  332. data/apps/core/components/public/js/tinymce/plugins/importcss/plugin.min.js +1 -0
  333. data/apps/core/components/public/js/tinymce/plugins/insertdatetime/plugin.js +121 -0
  334. data/apps/core/components/public/js/tinymce/plugins/insertdatetime/plugin.min.js +1 -0
  335. data/apps/core/components/public/js/tinymce/plugins/layer/plugin.js +225 -0
  336. data/apps/core/components/public/js/tinymce/plugins/layer/plugin.min.js +1 -0
  337. data/apps/core/components/public/js/tinymce/plugins/legacyoutput/plugin.js +211 -0
  338. data/apps/core/components/public/js/tinymce/plugins/legacyoutput/plugin.min.js +1 -0
  339. data/apps/core/components/public/js/tinymce/plugins/link/plugin.js +403 -0
  340. data/apps/core/components/public/js/tinymce/plugins/link/plugin.min.js +1 -0
  341. data/apps/core/components/public/js/tinymce/plugins/lists/plugin.js +885 -0
  342. data/apps/core/components/public/js/tinymce/plugins/lists/plugin.min.js +1 -0
  343. data/apps/core/components/public/js/tinymce/plugins/media/moxieplayer.swf +0 -0
  344. data/apps/core/components/public/js/tinymce/plugins/media/plugin.js +878 -0
  345. data/apps/core/components/public/js/tinymce/plugins/media/plugin.min.js +1 -0
  346. data/apps/core/components/public/js/tinymce/plugins/nonbreaking/plugin.js +53 -0
  347. data/apps/core/components/public/js/tinymce/plugins/nonbreaking/plugin.min.js +1 -0
  348. data/apps/core/components/public/js/tinymce/plugins/noneditable/plugin.js +101 -0
  349. data/apps/core/components/public/js/tinymce/plugins/noneditable/plugin.min.js +1 -0
  350. data/apps/core/components/public/js/tinymce/plugins/pagebreak/plugin.js +88 -0
  351. data/apps/core/components/public/js/tinymce/plugins/pagebreak/plugin.min.js +1 -0
  352. data/apps/core/components/public/js/tinymce/plugins/paste/classes/Clipboard.js +672 -0
  353. data/apps/core/components/public/js/tinymce/plugins/paste/classes/Plugin.js +121 -0
  354. data/apps/core/components/public/js/tinymce/plugins/paste/classes/Quirks.js +159 -0
  355. data/apps/core/components/public/js/tinymce/plugins/paste/classes/Utils.js +140 -0
  356. data/apps/core/components/public/js/tinymce/plugins/paste/classes/WordFilter.js +500 -0
  357. data/apps/core/components/public/js/tinymce/plugins/paste/plugin.dev.js +142 -0
  358. data/apps/core/components/public/js/tinymce/plugins/paste/plugin.js +1708 -0
  359. data/apps/core/components/public/js/tinymce/plugins/paste/plugin.min.js +1 -0
  360. data/apps/core/components/public/js/tinymce/plugins/preview/plugin.js +88 -0
  361. data/apps/core/components/public/js/tinymce/plugins/preview/plugin.min.js +1 -0
  362. data/apps/core/components/public/js/tinymce/plugins/print/plugin.js +32 -0
  363. data/apps/core/components/public/js/tinymce/plugins/print/plugin.min.js +1 -0
  364. data/apps/core/components/public/js/tinymce/plugins/save/plugin.js +98 -0
  365. data/apps/core/components/public/js/tinymce/plugins/save/plugin.min.js +1 -0
  366. data/apps/core/components/public/js/tinymce/plugins/searchreplace/plugin.js +609 -0
  367. data/apps/core/components/public/js/tinymce/plugins/searchreplace/plugin.min.js +1 -0
  368. data/apps/core/components/public/js/tinymce/plugins/spellchecker/classes/DomTextMatcher.js +480 -0
  369. data/apps/core/components/public/js/tinymce/plugins/spellchecker/classes/Plugin.js +439 -0
  370. data/apps/core/components/public/js/tinymce/plugins/spellchecker/plugin.dev.js +139 -0
  371. data/apps/core/components/public/js/tinymce/plugins/spellchecker/plugin.js +1026 -0
  372. data/apps/core/components/public/js/tinymce/plugins/spellchecker/plugin.min.js +1 -0
  373. data/apps/core/components/public/js/tinymce/plugins/tabfocus/plugin.js +120 -0
  374. data/apps/core/components/public/js/tinymce/plugins/tabfocus/plugin.min.js +1 -0
  375. data/apps/core/components/public/js/tinymce/plugins/table/classes/CellSelection.js +202 -0
  376. data/apps/core/components/public/js/tinymce/plugins/table/classes/Dialogs.js +824 -0
  377. data/apps/core/components/public/js/tinymce/plugins/table/classes/Plugin.js +599 -0
  378. data/apps/core/components/public/js/tinymce/plugins/table/classes/Quirks.js +400 -0
  379. data/apps/core/components/public/js/tinymce/plugins/table/classes/ResizeBars.js +984 -0
  380. data/apps/core/components/public/js/tinymce/plugins/table/classes/TableGrid.js +941 -0
  381. data/apps/core/components/public/js/tinymce/plugins/table/classes/Utils.js +36 -0
  382. data/apps/core/components/public/js/tinymce/plugins/table/plugin.dev.js +142 -0
  383. data/apps/core/components/public/js/tinymce/plugins/table/plugin.js +4106 -0
  384. data/apps/core/components/public/js/tinymce/plugins/table/plugin.min.js +2 -0
  385. data/apps/core/components/public/js/tinymce/plugins/template/plugin.js +270 -0
  386. data/apps/core/components/public/js/tinymce/plugins/template/plugin.min.js +1 -0
  387. data/apps/core/components/public/js/tinymce/plugins/textcolor/plugin.js +282 -0
  388. data/apps/core/components/public/js/tinymce/plugins/textcolor/plugin.min.js +1 -0
  389. data/apps/core/components/public/js/tinymce/plugins/textpattern/plugin.js +268 -0
  390. data/apps/core/components/public/js/tinymce/plugins/textpattern/plugin.min.js +1 -0
  391. data/apps/core/components/public/js/tinymce/plugins/visualblocks/css/visualblocks.css +135 -0
  392. data/apps/core/components/public/js/tinymce/plugins/visualblocks/img/address.gif +0 -0
  393. data/apps/core/components/public/js/tinymce/plugins/visualblocks/img/article.gif +0 -0
  394. data/apps/core/components/public/js/tinymce/plugins/visualblocks/img/aside.gif +0 -0
  395. data/apps/core/components/public/js/tinymce/plugins/visualblocks/img/blockquote.gif +0 -0
  396. data/apps/core/components/public/js/tinymce/plugins/visualblocks/img/div.gif +0 -0
  397. data/apps/core/components/public/js/tinymce/plugins/visualblocks/img/dl.gif +0 -0
  398. data/apps/core/components/public/js/tinymce/plugins/visualblocks/img/figure.gif +0 -0
  399. data/apps/core/components/public/js/tinymce/plugins/visualblocks/img/h1.gif +0 -0
  400. data/apps/core/components/public/js/tinymce/plugins/visualblocks/img/h2.gif +0 -0
  401. data/apps/core/components/public/js/tinymce/plugins/visualblocks/img/h3.gif +0 -0
  402. data/apps/core/components/public/js/tinymce/plugins/visualblocks/img/h4.gif +0 -0
  403. data/apps/core/components/public/js/tinymce/plugins/visualblocks/img/h5.gif +0 -0
  404. data/apps/core/components/public/js/tinymce/plugins/visualblocks/img/h6.gif +0 -0
  405. data/apps/core/components/public/js/tinymce/plugins/visualblocks/img/hgroup.gif +0 -0
  406. data/apps/core/components/public/js/tinymce/plugins/visualblocks/img/ol.gif +0 -0
  407. data/apps/core/components/public/js/tinymce/plugins/visualblocks/img/p.gif +0 -0
  408. data/apps/core/components/public/js/tinymce/plugins/visualblocks/img/pre.gif +0 -0
  409. data/apps/core/components/public/js/tinymce/plugins/visualblocks/img/section.gif +0 -0
  410. data/apps/core/components/public/js/tinymce/plugins/visualblocks/img/ul.gif +0 -0
  411. data/apps/core/components/public/js/tinymce/plugins/visualblocks/plugin.js +86 -0
  412. data/apps/core/components/public/js/tinymce/plugins/visualblocks/plugin.min.js +1 -0
  413. data/apps/core/components/public/js/tinymce/plugins/visualchars/plugin.js +123 -0
  414. data/apps/core/components/public/js/tinymce/plugins/visualchars/plugin.min.js +1 -0
  415. data/apps/core/components/public/js/tinymce/plugins/wordcount/plugin.js +69 -0
  416. data/apps/core/components/public/js/tinymce/plugins/wordcount/plugin.min.js +1 -0
  417. data/apps/core/components/public/js/tinymce/skins/lightgray/AbsoluteLayout.less +17 -0
  418. data/apps/core/components/public/js/tinymce/skins/lightgray/Animations.less +10 -0
  419. data/apps/core/components/public/js/tinymce/skins/lightgray/Button.less +172 -0
  420. data/apps/core/components/public/js/tinymce/skins/lightgray/ButtonGroup.less +71 -0
  421. data/apps/core/components/public/js/tinymce/skins/lightgray/Checkbox.less +49 -0
  422. data/apps/core/components/public/js/tinymce/skins/lightgray/ColorBox.less +6 -0
  423. data/apps/core/components/public/js/tinymce/skins/lightgray/ColorButton.less +72 -0
  424. data/apps/core/components/public/js/tinymce/skins/lightgray/ColorPicker.less +80 -0
  425. data/apps/core/components/public/js/tinymce/skins/lightgray/ComboBox.less +39 -0
  426. data/apps/core/components/public/js/tinymce/skins/lightgray/Container.less +9 -0
  427. data/apps/core/components/public/js/tinymce/skins/lightgray/Content.Inline.less +4 -0
  428. data/apps/core/components/public/js/tinymce/skins/lightgray/Content.Objects.less +166 -0
  429. data/apps/core/components/public/js/tinymce/skins/lightgray/Content.less +27 -0
  430. data/apps/core/components/public/js/tinymce/skins/lightgray/CropRect.less +54 -0
  431. data/apps/core/components/public/js/tinymce/skins/lightgray/FieldSet.less +15 -0
  432. data/apps/core/components/public/js/tinymce/skins/lightgray/FitLayout.less +9 -0
  433. data/apps/core/components/public/js/tinymce/skins/lightgray/FloatPanel.less +69 -0
  434. data/apps/core/components/public/js/tinymce/skins/lightgray/FlowLayout.less +36 -0
  435. data/apps/core/components/public/js/tinymce/skins/lightgray/Icons.Ie7.less +136 -0
  436. data/apps/core/components/public/js/tinymce/skins/lightgray/Icons.less +180 -0
  437. data/apps/core/components/public/js/tinymce/skins/lightgray/Iframe.less +6 -0
  438. data/apps/core/components/public/js/tinymce/skins/lightgray/ImagePanel.less +20 -0
  439. data/apps/core/components/public/js/tinymce/skins/lightgray/InfoBox.less +71 -0
  440. data/apps/core/components/public/js/tinymce/skins/lightgray/Label.less +38 -0
  441. data/apps/core/components/public/js/tinymce/skins/lightgray/ListBox.less +26 -0
  442. data/apps/core/components/public/js/tinymce/skins/lightgray/Menu.less +34 -0
  443. data/apps/core/components/public/js/tinymce/skins/lightgray/MenuBar.less +32 -0
  444. data/apps/core/components/public/js/tinymce/skins/lightgray/MenuButton.less +34 -0
  445. data/apps/core/components/public/js/tinymce/skins/lightgray/MenuItem.less +142 -0
  446. data/apps/core/components/public/js/tinymce/skins/lightgray/Mixins.less +54 -0
  447. data/apps/core/components/public/js/tinymce/skins/lightgray/Notification.less +144 -0
  448. data/apps/core/components/public/js/tinymce/skins/lightgray/Panel.less +7 -0
  449. data/apps/core/components/public/js/tinymce/skins/lightgray/Path.less +45 -0
  450. data/apps/core/components/public/js/tinymce/skins/lightgray/Progress.less +34 -0
  451. data/apps/core/components/public/js/tinymce/skins/lightgray/Radio.less +1 -0
  452. data/apps/core/components/public/js/tinymce/skins/lightgray/Reset.less +32 -0
  453. data/apps/core/components/public/js/tinymce/skins/lightgray/ResizeHandle.less +18 -0
  454. data/apps/core/components/public/js/tinymce/skins/lightgray/Scrollable.less +44 -0
  455. data/apps/core/components/public/js/tinymce/skins/lightgray/SelectBox.less +6 -0
  456. data/apps/core/components/public/js/tinymce/skins/lightgray/Slider.less +29 -0
  457. data/apps/core/components/public/js/tinymce/skins/lightgray/Spacer.less +5 -0
  458. data/apps/core/components/public/js/tinymce/skins/lightgray/SplitButton.less +49 -0
  459. data/apps/core/components/public/js/tinymce/skins/lightgray/StackLayout.less +5 -0
  460. data/apps/core/components/public/js/tinymce/skins/lightgray/TabPanel.less +44 -0
  461. data/apps/core/components/public/js/tinymce/skins/lightgray/TextBox.less +41 -0
  462. data/apps/core/components/public/js/tinymce/skins/lightgray/Throbber.less +19 -0
  463. data/apps/core/components/public/js/tinymce/skins/lightgray/TinyMCE.less +159 -0
  464. data/apps/core/components/public/js/tinymce/skins/lightgray/ToolTip.less +129 -0
  465. data/apps/core/components/public/js/tinymce/skins/lightgray/Variables.less +214 -0
  466. data/apps/core/components/public/js/tinymce/skins/lightgray/Window.less +127 -0
  467. data/apps/core/components/public/js/tinymce/skins/lightgray/content.inline.min.css +1 -0
  468. data/apps/core/components/public/js/tinymce/skins/lightgray/content.min.css +1 -0
  469. data/apps/core/components/public/js/tinymce/skins/lightgray/fonts/readme.md +1 -0
  470. data/apps/core/components/public/js/tinymce/skins/lightgray/fonts/tinymce-small.eot +0 -0
  471. data/apps/core/components/public/js/tinymce/skins/lightgray/fonts/tinymce-small.json +1277 -0
  472. data/apps/core/components/public/js/tinymce/skins/lightgray/fonts/tinymce-small.svg +63 -0
  473. data/apps/core/components/public/js/tinymce/skins/lightgray/fonts/tinymce-small.ttf +0 -0
  474. data/apps/core/components/public/js/tinymce/skins/lightgray/fonts/tinymce-small.woff +0 -0
  475. data/apps/core/components/public/js/tinymce/skins/lightgray/fonts/tinymce.eot +0 -0
  476. data/apps/core/components/public/js/tinymce/skins/lightgray/fonts/tinymce.json +3381 -0
  477. data/apps/core/components/public/js/tinymce/skins/lightgray/fonts/tinymce.svg +129 -0
  478. data/apps/core/components/public/js/tinymce/skins/lightgray/fonts/tinymce.ttf +0 -0
  479. data/apps/core/components/public/js/tinymce/skins/lightgray/fonts/tinymce.woff +0 -0
  480. data/apps/core/components/public/js/tinymce/skins/lightgray/img/anchor.gif +0 -0
  481. data/apps/core/components/public/js/tinymce/skins/lightgray/img/loader.gif +0 -0
  482. data/apps/core/components/public/js/tinymce/skins/lightgray/img/object.gif +0 -0
  483. data/apps/core/components/public/js/tinymce/skins/lightgray/img/trans.gif +0 -0
  484. data/apps/core/components/public/js/tinymce/skins/lightgray/skin.dev.less +46 -0
  485. data/apps/core/components/public/js/tinymce/skins/lightgray/skin.ie7.dev.less +46 -0
  486. data/apps/core/components/public/js/tinymce/skins/lightgray/skin.ie7.less +2542 -0
  487. data/apps/core/components/public/js/tinymce/skins/lightgray/skin.ie7.min.css +1 -0
  488. data/apps/core/components/public/js/tinymce/skins/lightgray/skin.less +2586 -0
  489. data/apps/core/components/public/js/tinymce/skins/lightgray/skin.min.css +1 -0
  490. data/apps/core/components/public/js/tinymce/themes/modern/theme.js +878 -0
  491. data/apps/core/components/public/js/tinymce/themes/modern/theme.min.js +1 -0
  492. data/apps/core/components/public/js/tinymce/tinymce.dev.js +286 -0
  493. data/apps/core/components/public/js/tinymce/tinymce.js +45811 -0
  494. data/apps/core/components/public/js/tinymce/tinymce.min.js +13 -0
  495. data/apps/core/forms/widgets/form/form.rb +3 -1
  496. data/apps/core/forms/widgets/form/form.shtml +1 -0
  497. data/apps/core/forms/widgets/inputs/search_select/search_select.rb +1 -1
  498. data/apps/core/forms/widgets/inputs/select/select.rb +1 -1
  499. data/apps/core/forms/widgets/inputs/select/select.shtml +0 -1
  500. data/apps/messenger/backends/sms/skebby.rb +1 -1
  501. data/apps/messenger/controllers/mixins/messenger_helper.rb +23 -5
  502. data/lib/spiderfw/config/options/spider.rb +1 -1
  503. data/lib/spiderfw/controller/mixins/visual.rb +2 -0
  504. data/lib/spiderfw/http/adapters/rack.rb +10 -5
  505. data/lib/spiderfw/http/http.rb +4 -2
  506. data/lib/spiderfw/model/base_model.rb +4 -4
  507. data/lib/spiderfw/model/mappers/db_mapper.rb +4 -2
  508. data/lib/spiderfw/model/storage/db/adapters/mysql.rb +2 -1
  509. data/lib/spiderfw/model/storage/db/db_storage.rb +4 -0
  510. data/lib/spiderfw/spider.rb +6 -0
  511. data/lib/spiderfw/templates/layout.rb +1 -1
  512. data/lib/spiderfw/utils/monkey/object.rb +3 -0
  513. data/spider.gemspec +6 -2
  514. metadata +539 -42
  515. data/blueprints/.DS_Store +0 -0
@@ -0,0 +1,442 @@
1
+ /**
2
+ * Tools.js
3
+ *
4
+ * Released under LGPL License.
5
+ * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
6
+ *
7
+ * License: http://www.tinymce.com/license
8
+ * Contributing: http://www.tinymce.com/contributing
9
+ */
10
+
11
+ /**
12
+ * This class contains various utlity functions. These are also exposed
13
+ * directly on the tinymce namespace.
14
+ *
15
+ * @class tinymce.util.Tools
16
+ */
17
+ define("tinymce/util/Tools", [
18
+ "tinymce/Env",
19
+ "tinymce/util/Arr"
20
+ ], function(Env, Arr) {
21
+ /**
22
+ * Removes whitespace from the beginning and end of a string.
23
+ *
24
+ * @method trim
25
+ * @param {String} s String to remove whitespace from.
26
+ * @return {String} New string with removed whitespace.
27
+ */
28
+ var whiteSpaceRegExp = /^\s*|\s*$/g;
29
+
30
+ function trim(str) {
31
+ return (str === null || str === undefined) ? '' : ("" + str).replace(whiteSpaceRegExp, '');
32
+ }
33
+
34
+ /**
35
+ * Checks if a object is of a specific type for example an array.
36
+ *
37
+ * @method is
38
+ * @param {Object} obj Object to check type of.
39
+ * @param {string} type Optional type to check for.
40
+ * @return {Boolean} true/false if the object is of the specified type.
41
+ */
42
+ function is(obj, type) {
43
+ if (!type) {
44
+ return obj !== undefined;
45
+ }
46
+
47
+ if (type == 'array' && Arr.isArray(obj)) {
48
+ return true;
49
+ }
50
+
51
+ return typeof obj == type;
52
+ }
53
+
54
+ /**
55
+ * Makes a name/object map out of an array with names.
56
+ *
57
+ * @method makeMap
58
+ * @param {Array/String} items Items to make map out of.
59
+ * @param {String} delim Optional delimiter to split string by.
60
+ * @param {Object} map Optional map to add items to.
61
+ * @return {Object} Name/value map of items.
62
+ */
63
+ function makeMap(items, delim, map) {
64
+ var i;
65
+
66
+ items = items || [];
67
+ delim = delim || ',';
68
+
69
+ if (typeof items == "string") {
70
+ items = items.split(delim);
71
+ }
72
+
73
+ map = map || {};
74
+
75
+ i = items.length;
76
+ while (i--) {
77
+ map[items[i]] = {};
78
+ }
79
+
80
+ return map;
81
+ }
82
+
83
+ /**
84
+ * Creates a class, subclass or static singleton.
85
+ * More details on this method can be found in the Wiki.
86
+ *
87
+ * @method create
88
+ * @param {String} s Class name, inheritance and prefix.
89
+ * @param {Object} p Collection of methods to add to the class.
90
+ * @param {Object} root Optional root object defaults to the global window object.
91
+ * @example
92
+ * // Creates a basic class
93
+ * tinymce.create('tinymce.somepackage.SomeClass', {
94
+ * SomeClass: function() {
95
+ * // Class constructor
96
+ * },
97
+ *
98
+ * method: function() {
99
+ * // Some method
100
+ * }
101
+ * });
102
+ *
103
+ * // Creates a basic subclass class
104
+ * tinymce.create('tinymce.somepackage.SomeSubClass:tinymce.somepackage.SomeClass', {
105
+ * SomeSubClass: function() {
106
+ * // Class constructor
107
+ * this.parent(); // Call parent constructor
108
+ * },
109
+ *
110
+ * method: function() {
111
+ * // Some method
112
+ * this.parent(); // Call parent method
113
+ * },
114
+ *
115
+ * 'static': {
116
+ * staticMethod: function() {
117
+ * // Static method
118
+ * }
119
+ * }
120
+ * });
121
+ *
122
+ * // Creates a singleton/static class
123
+ * tinymce.create('static tinymce.somepackage.SomeSingletonClass', {
124
+ * method: function() {
125
+ * // Some method
126
+ * }
127
+ * });
128
+ */
129
+ function create(s, p, root) {
130
+ var self = this, sp, ns, cn, scn, c, de = 0;
131
+
132
+ // Parse : <prefix> <class>:<super class>
133
+ s = /^((static) )?([\w.]+)(:([\w.]+))?/.exec(s);
134
+ cn = s[3].match(/(^|\.)(\w+)$/i)[2]; // Class name
135
+
136
+ // Create namespace for new class
137
+ ns = self.createNS(s[3].replace(/\.\w+$/, ''), root);
138
+
139
+ // Class already exists
140
+ if (ns[cn]) {
141
+ return;
142
+ }
143
+
144
+ // Make pure static class
145
+ if (s[2] == 'static') {
146
+ ns[cn] = p;
147
+
148
+ if (this.onCreate) {
149
+ this.onCreate(s[2], s[3], ns[cn]);
150
+ }
151
+
152
+ return;
153
+ }
154
+
155
+ // Create default constructor
156
+ if (!p[cn]) {
157
+ p[cn] = function() {};
158
+ de = 1;
159
+ }
160
+
161
+ // Add constructor and methods
162
+ ns[cn] = p[cn];
163
+ self.extend(ns[cn].prototype, p);
164
+
165
+ // Extend
166
+ if (s[5]) {
167
+ sp = self.resolve(s[5]).prototype;
168
+ scn = s[5].match(/\.(\w+)$/i)[1]; // Class name
169
+
170
+ // Extend constructor
171
+ c = ns[cn];
172
+ if (de) {
173
+ // Add passthrough constructor
174
+ ns[cn] = function() {
175
+ return sp[scn].apply(this, arguments);
176
+ };
177
+ } else {
178
+ // Add inherit constructor
179
+ ns[cn] = function() {
180
+ this.parent = sp[scn];
181
+ return c.apply(this, arguments);
182
+ };
183
+ }
184
+ ns[cn].prototype[cn] = ns[cn];
185
+
186
+ // Add super methods
187
+ self.each(sp, function(f, n) {
188
+ ns[cn].prototype[n] = sp[n];
189
+ });
190
+
191
+ // Add overridden methods
192
+ self.each(p, function(f, n) {
193
+ // Extend methods if needed
194
+ if (sp[n]) {
195
+ ns[cn].prototype[n] = function() {
196
+ this.parent = sp[n];
197
+ return f.apply(this, arguments);
198
+ };
199
+ } else {
200
+ if (n != cn) {
201
+ ns[cn].prototype[n] = f;
202
+ }
203
+ }
204
+ });
205
+ }
206
+
207
+ // Add static methods
208
+ /*jshint sub:true*/
209
+ /*eslint dot-notation:0*/
210
+ self.each(p['static'], function(f, n) {
211
+ ns[cn][n] = f;
212
+ });
213
+ }
214
+
215
+ function extend(obj, ext) {
216
+ var i, l, name, args = arguments, value;
217
+
218
+ for (i = 1, l = args.length; i < l; i++) {
219
+ ext = args[i];
220
+ for (name in ext) {
221
+ if (ext.hasOwnProperty(name)) {
222
+ value = ext[name];
223
+
224
+ if (value !== undefined) {
225
+ obj[name] = value;
226
+ }
227
+ }
228
+ }
229
+ }
230
+
231
+ return obj;
232
+ }
233
+
234
+ /**
235
+ * Executed the specified function for each item in a object tree.
236
+ *
237
+ * @method walk
238
+ * @param {Object} o Object tree to walk though.
239
+ * @param {function} f Function to call for each item.
240
+ * @param {String} n Optional name of collection inside the objects to walk for example childNodes.
241
+ * @param {String} s Optional scope to execute the function in.
242
+ */
243
+ function walk(o, f, n, s) {
244
+ s = s || this;
245
+
246
+ if (o) {
247
+ if (n) {
248
+ o = o[n];
249
+ }
250
+
251
+ Arr.each(o, function(o, i) {
252
+ if (f.call(s, o, i, n) === false) {
253
+ return false;
254
+ }
255
+
256
+ walk(o, f, n, s);
257
+ });
258
+ }
259
+ }
260
+
261
+ /**
262
+ * Creates a namespace on a specific object.
263
+ *
264
+ * @method createNS
265
+ * @param {String} n Namespace to create for example a.b.c.d.
266
+ * @param {Object} o Optional object to add namespace to, defaults to window.
267
+ * @return {Object} New namespace object the last item in path.
268
+ * @example
269
+ * // Create some namespace
270
+ * tinymce.createNS('tinymce.somepackage.subpackage');
271
+ *
272
+ * // Add a singleton
273
+ * var tinymce.somepackage.subpackage.SomeSingleton = {
274
+ * method: function() {
275
+ * // Some method
276
+ * }
277
+ * };
278
+ */
279
+ function createNS(n, o) {
280
+ var i, v;
281
+
282
+ o = o || window;
283
+
284
+ n = n.split('.');
285
+ for (i = 0; i < n.length; i++) {
286
+ v = n[i];
287
+
288
+ if (!o[v]) {
289
+ o[v] = {};
290
+ }
291
+
292
+ o = o[v];
293
+ }
294
+
295
+ return o;
296
+ }
297
+
298
+ /**
299
+ * Resolves a string and returns the object from a specific structure.
300
+ *
301
+ * @method resolve
302
+ * @param {String} n Path to resolve for example a.b.c.d.
303
+ * @param {Object} o Optional object to search though, defaults to window.
304
+ * @return {Object} Last object in path or null if it couldn't be resolved.
305
+ * @example
306
+ * // Resolve a path into an object reference
307
+ * var obj = tinymce.resolve('a.b.c.d');
308
+ */
309
+ function resolve(n, o) {
310
+ var i, l;
311
+
312
+ o = o || window;
313
+
314
+ n = n.split('.');
315
+ for (i = 0, l = n.length; i < l; i++) {
316
+ o = o[n[i]];
317
+
318
+ if (!o) {
319
+ break;
320
+ }
321
+ }
322
+
323
+ return o;
324
+ }
325
+
326
+ /**
327
+ * Splits a string but removes the whitespace before and after each value.
328
+ *
329
+ * @method explode
330
+ * @param {string} s String to split.
331
+ * @param {string} d Delimiter to split by.
332
+ * @example
333
+ * // Split a string into an array with a,b,c
334
+ * var arr = tinymce.explode('a, b, c');
335
+ */
336
+ function explode(s, d) {
337
+ if (!s || is(s, 'array')) {
338
+ return s;
339
+ }
340
+
341
+ return Arr.map(s.split(d || ','), trim);
342
+ }
343
+
344
+ function _addCacheSuffix(url) {
345
+ var cacheSuffix = Env.cacheSuffix;
346
+
347
+ if (cacheSuffix) {
348
+ url += (url.indexOf('?') === -1 ? '?' : '&') + cacheSuffix;
349
+ }
350
+
351
+ return url;
352
+ }
353
+
354
+ return {
355
+ trim: trim,
356
+
357
+ /**
358
+ * Returns true/false if the object is an array or not.
359
+ *
360
+ * @method isArray
361
+ * @param {Object} obj Object to check.
362
+ * @return {boolean} true/false state if the object is an array or not.
363
+ */
364
+ isArray: Arr.isArray,
365
+
366
+ is: is,
367
+
368
+ /**
369
+ * Converts the specified object into a real JavaScript array.
370
+ *
371
+ * @method toArray
372
+ * @param {Object} obj Object to convert into array.
373
+ * @return {Array} Array object based in input.
374
+ */
375
+ toArray: Arr.toArray,
376
+ makeMap: makeMap,
377
+
378
+ /**
379
+ * Performs an iteration of all items in a collection such as an object or array. This method will execure the
380
+ * callback function for each item in the collection, if the callback returns false the iteration will terminate.
381
+ * The callback has the following format: cb(value, key_or_index).
382
+ *
383
+ * @method each
384
+ * @param {Object} o Collection to iterate.
385
+ * @param {function} cb Callback function to execute for each item.
386
+ * @param {Object} s Optional scope to execute the callback in.
387
+ * @example
388
+ * // Iterate an array
389
+ * tinymce.each([1,2,3], function(v, i) {
390
+ * console.debug("Value: " + v + ", Index: " + i);
391
+ * });
392
+ *
393
+ * // Iterate an object
394
+ * tinymce.each({a: 1, b: 2, c: 3], function(v, k) {
395
+ * console.debug("Value: " + v + ", Key: " + k);
396
+ * });
397
+ */
398
+ each: Arr.each,
399
+
400
+ /**
401
+ * Creates a new array by the return value of each iteration function call. This enables you to convert
402
+ * one array list into another.
403
+ *
404
+ * @method map
405
+ * @param {Array} array Array of items to iterate.
406
+ * @param {function} callback Function to call for each item. It's return value will be the new value.
407
+ * @return {Array} Array with new values based on function return values.
408
+ */
409
+ map: Arr.map,
410
+
411
+ /**
412
+ * Filters out items from the input array by calling the specified function for each item.
413
+ * If the function returns false the item will be excluded if it returns true it will be included.
414
+ *
415
+ * @method grep
416
+ * @param {Array} a Array of items to loop though.
417
+ * @param {function} f Function to call for each item. Include/exclude depends on it's return value.
418
+ * @return {Array} New array with values imported and filtered based in input.
419
+ * @example
420
+ * // Filter out some items, this will return an array with 4 and 5
421
+ * var items = tinymce.grep([1,2,3,4,5], function(v) {return v > 3;});
422
+ */
423
+ grep: Arr.filter,
424
+
425
+ /**
426
+ * Returns true/false if the object is an array or not.
427
+ *
428
+ * @method isArray
429
+ * @param {Object} obj Object to check.
430
+ * @return {boolean} true/false state if the object is an array or not.
431
+ */
432
+ inArray: Arr.indexOf,
433
+
434
+ extend: extend,
435
+ create: create,
436
+ walk: walk,
437
+ createNS: createNS,
438
+ resolve: resolve,
439
+ explode: explode,
440
+ _addCacheSuffix: _addCacheSuffix
441
+ };
442
+ });
@@ -0,0 +1,411 @@
1
+ /**
2
+ * URI.js
3
+ *
4
+ * Released under LGPL License.
5
+ * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
6
+ *
7
+ * License: http://www.tinymce.com/license
8
+ * Contributing: http://www.tinymce.com/contributing
9
+ */
10
+
11
+ /**
12
+ * This class handles parsing, modification and serialization of URI/URL strings.
13
+ * @class tinymce.util.URI
14
+ */
15
+ define("tinymce/util/URI", [
16
+ "tinymce/util/Tools"
17
+ ], function(Tools) {
18
+ var each = Tools.each, trim = Tools.trim;
19
+ var queryParts = "source protocol authority userInfo user password host port relative path directory file query anchor".split(' ');
20
+ var DEFAULT_PORTS = {
21
+ 'ftp': 21,
22
+ 'http': 80,
23
+ 'https': 443,
24
+ 'mailto': 25
25
+ };
26
+
27
+ /**
28
+ * Constructs a new URI instance.
29
+ *
30
+ * @constructor
31
+ * @method URI
32
+ * @param {String} url URI string to parse.
33
+ * @param {Object} settings Optional settings object.
34
+ */
35
+ function URI(url, settings) {
36
+ var self = this, baseUri, base_url;
37
+
38
+ url = trim(url);
39
+ settings = self.settings = settings || {};
40
+ baseUri = settings.base_uri;
41
+
42
+ // Strange app protocol that isn't http/https or local anchor
43
+ // For example: mailto,skype,tel etc.
44
+ if (/^([\w\-]+):([^\/]{2})/i.test(url) || /^\s*#/.test(url)) {
45
+ self.source = url;
46
+ return;
47
+ }
48
+
49
+ var isProtocolRelative = url.indexOf('//') === 0;
50
+
51
+ // Absolute path with no host, fake host and protocol
52
+ if (url.indexOf('/') === 0 && !isProtocolRelative) {
53
+ url = (baseUri ? baseUri.protocol || 'http' : 'http') + '://mce_host' + url;
54
+ }
55
+
56
+ // Relative path http:// or protocol relative //path
57
+ if (!/^[\w\-]*:?\/\//.test(url)) {
58
+ base_url = settings.base_uri ? settings.base_uri.path : new URI(location.href).directory;
59
+ if (settings.base_uri.protocol === "") {
60
+ url = '//mce_host' + self.toAbsPath(base_url, url);
61
+ } else {
62
+ url = /([^#?]*)([#?]?.*)/.exec(url);
63
+ url = ((baseUri && baseUri.protocol) || 'http') + '://mce_host' + self.toAbsPath(base_url, url[1]) + url[2];
64
+ }
65
+ }
66
+
67
+ // Parse URL (Credits goes to Steave, http://blog.stevenlevithan.com/archives/parseuri)
68
+ url = url.replace(/@@/g, '(mce_at)'); // Zope 3 workaround, they use @@something
69
+
70
+ /*jshint maxlen: 255 */
71
+ /*eslint max-len: 0 */
72
+ url = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(url);
73
+
74
+ each(queryParts, function(v, i) {
75
+ var part = url[i];
76
+
77
+ // Zope 3 workaround, they use @@something
78
+ if (part) {
79
+ part = part.replace(/\(mce_at\)/g, '@@');
80
+ }
81
+
82
+ self[v] = part;
83
+ });
84
+
85
+ if (baseUri) {
86
+ if (!self.protocol) {
87
+ self.protocol = baseUri.protocol;
88
+ }
89
+
90
+ if (!self.userInfo) {
91
+ self.userInfo = baseUri.userInfo;
92
+ }
93
+
94
+ if (!self.port && self.host === 'mce_host') {
95
+ self.port = baseUri.port;
96
+ }
97
+
98
+ if (!self.host || self.host === 'mce_host') {
99
+ self.host = baseUri.host;
100
+ }
101
+
102
+ self.source = '';
103
+ }
104
+
105
+ if (isProtocolRelative) {
106
+ self.protocol = '';
107
+ }
108
+
109
+ //t.path = t.path || '/';
110
+ }
111
+
112
+ URI.prototype = {
113
+ /**
114
+ * Sets the internal path part of the URI.
115
+ *
116
+ * @method setPath
117
+ * @param {string} path Path string to set.
118
+ */
119
+ setPath: function(path) {
120
+ var self = this;
121
+
122
+ path = /^(.*?)\/?(\w+)?$/.exec(path);
123
+
124
+ // Update path parts
125
+ self.path = path[0];
126
+ self.directory = path[1];
127
+ self.file = path[2];
128
+
129
+ // Rebuild source
130
+ self.source = '';
131
+ self.getURI();
132
+ },
133
+
134
+ /**
135
+ * Converts the specified URI into a relative URI based on the current URI instance location.
136
+ *
137
+ * @method toRelative
138
+ * @param {String} uri URI to convert into a relative path/URI.
139
+ * @return {String} Relative URI from the point specified in the current URI instance.
140
+ * @example
141
+ * // Converts an absolute URL to an relative URL url will be somedir/somefile.htm
142
+ * var url = new tinymce.util.URI('http://www.site.com/dir/').toRelative('http://www.site.com/dir/somedir/somefile.htm');
143
+ */
144
+ toRelative: function(uri) {
145
+ var self = this, output;
146
+
147
+ if (uri === "./") {
148
+ return uri;
149
+ }
150
+
151
+ uri = new URI(uri, {base_uri: self});
152
+
153
+ // Not on same domain/port or protocol
154
+ if ((uri.host != 'mce_host' && self.host != uri.host && uri.host) || self.port != uri.port ||
155
+ (self.protocol != uri.protocol && uri.protocol !== "")) {
156
+ return uri.getURI();
157
+ }
158
+
159
+ var tu = self.getURI(), uu = uri.getURI();
160
+
161
+ // Allow usage of the base_uri when relative_urls = true
162
+ if (tu == uu || (tu.charAt(tu.length - 1) == "/" && tu.substr(0, tu.length - 1) == uu)) {
163
+ return tu;
164
+ }
165
+
166
+ output = self.toRelPath(self.path, uri.path);
167
+
168
+ // Add query
169
+ if (uri.query) {
170
+ output += '?' + uri.query;
171
+ }
172
+
173
+ // Add anchor
174
+ if (uri.anchor) {
175
+ output += '#' + uri.anchor;
176
+ }
177
+
178
+ return output;
179
+ },
180
+
181
+ /**
182
+ * Converts the specified URI into a absolute URI based on the current URI instance location.
183
+ *
184
+ * @method toAbsolute
185
+ * @param {String} uri URI to convert into a relative path/URI.
186
+ * @param {Boolean} noHost No host and protocol prefix.
187
+ * @return {String} Absolute URI from the point specified in the current URI instance.
188
+ * @example
189
+ * // Converts an relative URL to an absolute URL url will be http://www.site.com/dir/somedir/somefile.htm
190
+ * var url = new tinymce.util.URI('http://www.site.com/dir/').toAbsolute('somedir/somefile.htm');
191
+ */
192
+ toAbsolute: function(uri, noHost) {
193
+ uri = new URI(uri, {base_uri: this});
194
+
195
+ return uri.getURI(noHost && this.isSameOrigin(uri));
196
+ },
197
+
198
+ /**
199
+ * Determine whether the given URI has the same origin as this URI. Based on RFC-6454.
200
+ * Supports default ports for protocols listed in DEFAULT_PORTS. Unsupported protocols will fail safe: they
201
+ * won't match, if the port specifications differ.
202
+ *
203
+ * @method isSameOrigin
204
+ * @param {tinymce.util.URI} uri Uri instance to compare.
205
+ * @returns {Boolean} True if the origins are the same.
206
+ */
207
+ isSameOrigin: function(uri) {
208
+ if (this.host == uri.host && this.protocol == uri.protocol) {
209
+ if (this.port == uri.port) {
210
+ return true;
211
+ }
212
+
213
+ var defaultPort = DEFAULT_PORTS[this.protocol];
214
+ if (defaultPort && ((this.port || defaultPort) == (uri.port || defaultPort))) {
215
+ return true;
216
+ }
217
+ }
218
+
219
+ return false;
220
+ },
221
+
222
+ /**
223
+ * Converts a absolute path into a relative path.
224
+ *
225
+ * @method toRelPath
226
+ * @param {String} base Base point to convert the path from.
227
+ * @param {String} path Absolute path to convert into a relative path.
228
+ */
229
+ toRelPath: function(base, path) {
230
+ var items, breakPoint = 0, out = '', i, l;
231
+
232
+ // Split the paths
233
+ base = base.substring(0, base.lastIndexOf('/'));
234
+ base = base.split('/');
235
+ items = path.split('/');
236
+
237
+ if (base.length >= items.length) {
238
+ for (i = 0, l = base.length; i < l; i++) {
239
+ if (i >= items.length || base[i] != items[i]) {
240
+ breakPoint = i + 1;
241
+ break;
242
+ }
243
+ }
244
+ }
245
+
246
+ if (base.length < items.length) {
247
+ for (i = 0, l = items.length; i < l; i++) {
248
+ if (i >= base.length || base[i] != items[i]) {
249
+ breakPoint = i + 1;
250
+ break;
251
+ }
252
+ }
253
+ }
254
+
255
+ if (breakPoint === 1) {
256
+ return path;
257
+ }
258
+
259
+ for (i = 0, l = base.length - (breakPoint - 1); i < l; i++) {
260
+ out += "../";
261
+ }
262
+
263
+ for (i = breakPoint - 1, l = items.length; i < l; i++) {
264
+ if (i != breakPoint - 1) {
265
+ out += "/" + items[i];
266
+ } else {
267
+ out += items[i];
268
+ }
269
+ }
270
+
271
+ return out;
272
+ },
273
+
274
+ /**
275
+ * Converts a relative path into a absolute path.
276
+ *
277
+ * @method toAbsPath
278
+ * @param {String} base Base point to convert the path from.
279
+ * @param {String} path Relative path to convert into an absolute path.
280
+ */
281
+ toAbsPath: function(base, path) {
282
+ var i, nb = 0, o = [], tr, outPath;
283
+
284
+ // Split paths
285
+ tr = /\/$/.test(path) ? '/' : '';
286
+ base = base.split('/');
287
+ path = path.split('/');
288
+
289
+ // Remove empty chunks
290
+ each(base, function(k) {
291
+ if (k) {
292
+ o.push(k);
293
+ }
294
+ });
295
+
296
+ base = o;
297
+
298
+ // Merge relURLParts chunks
299
+ for (i = path.length - 1, o = []; i >= 0; i--) {
300
+ // Ignore empty or .
301
+ if (path[i].length === 0 || path[i] === ".") {
302
+ continue;
303
+ }
304
+
305
+ // Is parent
306
+ if (path[i] === '..') {
307
+ nb++;
308
+ continue;
309
+ }
310
+
311
+ // Move up
312
+ if (nb > 0) {
313
+ nb--;
314
+ continue;
315
+ }
316
+
317
+ o.push(path[i]);
318
+ }
319
+
320
+ i = base.length - nb;
321
+
322
+ // If /a/b/c or /
323
+ if (i <= 0) {
324
+ outPath = o.reverse().join('/');
325
+ } else {
326
+ outPath = base.slice(0, i).join('/') + '/' + o.reverse().join('/');
327
+ }
328
+
329
+ // Add front / if it's needed
330
+ if (outPath.indexOf('/') !== 0) {
331
+ outPath = '/' + outPath;
332
+ }
333
+
334
+ // Add traling / if it's needed
335
+ if (tr && outPath.lastIndexOf('/') !== outPath.length - 1) {
336
+ outPath += tr;
337
+ }
338
+
339
+ return outPath;
340
+ },
341
+
342
+ /**
343
+ * Returns the full URI of the internal structure.
344
+ *
345
+ * @method getURI
346
+ * @param {Boolean} noProtoHost Optional no host and protocol part. Defaults to false.
347
+ */
348
+ getURI: function(noProtoHost) {
349
+ var s, self = this;
350
+
351
+ // Rebuild source
352
+ if (!self.source || noProtoHost) {
353
+ s = '';
354
+
355
+ if (!noProtoHost) {
356
+ if (self.protocol) {
357
+ s += self.protocol + '://';
358
+ } else {
359
+ s += '//';
360
+ }
361
+
362
+ if (self.userInfo) {
363
+ s += self.userInfo + '@';
364
+ }
365
+
366
+ if (self.host) {
367
+ s += self.host;
368
+ }
369
+
370
+ if (self.port) {
371
+ s += ':' + self.port;
372
+ }
373
+ }
374
+
375
+ if (self.path) {
376
+ s += self.path;
377
+ }
378
+
379
+ if (self.query) {
380
+ s += '?' + self.query;
381
+ }
382
+
383
+ if (self.anchor) {
384
+ s += '#' + self.anchor;
385
+ }
386
+
387
+ self.source = s;
388
+ }
389
+
390
+ return self.source;
391
+ }
392
+ };
393
+
394
+ URI.parseDataUri = function(uri) {
395
+ var type, matches;
396
+
397
+ uri = decodeURIComponent(uri).split(',');
398
+
399
+ matches = /data:([^;]+)/.exec(uri[0]);
400
+ if (matches) {
401
+ type = matches[1];
402
+ }
403
+
404
+ return {
405
+ type: type,
406
+ data: uri[1]
407
+ };
408
+ };
409
+
410
+ return URI;
411
+ });