bfg-common 1.0.0

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 (782) hide show
  1. package/.eslintrc.js +21 -0
  2. package/.idea/inspectionProfiles/Project_Default.xml +49 -0
  3. package/.idea/modules.xml +8 -0
  4. package/.idea/prettier.xml +6 -0
  5. package/.idea/uikit.iml +12 -0
  6. package/.idea/vcs.xml +6 -0
  7. package/.prettierrc +5 -0
  8. package/PROJECT_STRUCTURE.md +42 -0
  9. package/README.md +42 -0
  10. package/assets/img/bg1.jpeg +0 -0
  11. package/assets/img/bg2.jpeg +0 -0
  12. package/assets/img/icons/icon-cps-dark-mode.png +0 -0
  13. package/assets/img/icons/icon-cps.png +0 -0
  14. package/assets/img/icons/icon-datastore.svg +1 -0
  15. package/assets/img/icons/icon-hcs.svg +4 -0
  16. package/assets/img/icons/icon-life-m-dark.svg +4 -0
  17. package/assets/img/icons/icon-life-m-light.svg +4 -0
  18. package/assets/img/icons/icon-ro-dark.svg +2 -0
  19. package/assets/img/icons/icon-ro-light.svg +3 -0
  20. package/assets/img/icons/icons-sprite-dark-1.svg +1 -0
  21. package/assets/img/icons/icons-sprite-dark-2.svg +1 -0
  22. package/assets/img/icons/icons-sprite-dark-3.svg +1 -0
  23. package/assets/img/icons/icons-sprite-dark-4.svg +1 -0
  24. package/assets/img/icons/icons-sprite-dark-5.svg +1 -0
  25. package/assets/img/icons/icons-sprite-light-1.svg +1 -0
  26. package/assets/img/icons/icons-sprite-light-2.svg +1 -0
  27. package/assets/img/icons/icons-sprite-light-3.svg +1 -0
  28. package/assets/img/icons/icons-sprite-light-4.svg +1 -0
  29. package/assets/img/icons/icons-sprite-light-5.svg +1 -0
  30. package/assets/img/icons/info.svg +8 -0
  31. package/assets/img/icons/sprite.png +0 -0
  32. package/assets/img/icons/summary-cluster.svg +1 -0
  33. package/assets/img/icons/vc.svg +53 -0
  34. package/assets/img/icons/vm-ui-icons.png +0 -0
  35. package/assets/img/logo copy.svg +50 -0
  36. package/assets/img/logo.png +0 -0
  37. package/assets/img/logo.svg +51 -0
  38. package/assets/localization/local_be.json +1851 -0
  39. package/assets/localization/local_en.json +1851 -0
  40. package/assets/localization/local_hy.json +1851 -0
  41. package/assets/localization/local_kk.json +1851 -0
  42. package/assets/localization/local_ru.json +1851 -0
  43. package/assets/localization/local_zh.json +1851 -0
  44. package/assets/scss/clarity/clr-ui.min.css +8 -0
  45. package/assets/scss/common/animations.scss +28 -0
  46. package/assets/scss/common/global.scss +178 -0
  47. package/assets/scss/common/icons/icons-1.scss +188 -0
  48. package/assets/scss/common/icons/icons-2.scss +208 -0
  49. package/assets/scss/common/icons/icons-3.scss +176 -0
  50. package/assets/scss/common/icons/icons-4.scss +179 -0
  51. package/assets/scss/common/icons/icons-5.scss +53 -0
  52. package/assets/scss/common/icons/icons.scss +14 -0
  53. package/assets/scss/common/mixins.scss +39 -0
  54. package/assets/scss/common/normalize.scss +320 -0
  55. package/assets/scss/common/theme.scss +230 -0
  56. package/assets/scss/common/utilities.scss +18 -0
  57. package/assets/scss/common/variables.scss +43 -0
  58. package/assets/scss/main.scss +13 -0
  59. package/components/atoms/DiagramIcon.vue +287 -0
  60. package/components/atoms/TheIcon.vue +1687 -0
  61. package/components/atoms/TheIcon2.vue +318 -0
  62. package/components/atoms/alert/Alert.spec.ts +38 -0
  63. package/components/atoms/alert/Alert.vue +84 -0
  64. package/components/atoms/alert/Notification.spec.ts +34 -0
  65. package/components/atoms/alert/Notification.vue +167 -0
  66. package/components/atoms/alert/models/enums.ts +12 -0
  67. package/components/atoms/alert/models/interfaces.ts +27 -0
  68. package/components/atoms/alert/models/types.ts +7 -0
  69. package/components/atoms/autocomplete/Autocomplete.vue +236 -0
  70. package/components/atoms/collapse/CollapseNav.vue +153 -0
  71. package/components/atoms/collapse/CollapseNavItem.vue +190 -0
  72. package/components/atoms/collapse/models/interfaces.ts +9 -0
  73. package/components/atoms/combobox/Combobox.vue +131 -0
  74. package/components/atoms/datepicker/Datepicker.vue +612 -0
  75. package/components/atoms/datepicker/config/allShortMonths.ts +103 -0
  76. package/components/atoms/datepicker/config/datapicker.ts +43 -0
  77. package/components/atoms/datepicker/models/interfaces.ts +8 -0
  78. package/components/atoms/dropdown/Portlet.spec.ts +26 -0
  79. package/components/atoms/dropdown/Portlet.vue +111 -0
  80. package/components/atoms/dropdown/dropdown/Dropdown.vue +148 -0
  81. package/components/atoms/dropdown/dropdown/models/interfaces.ts +8 -0
  82. package/components/atoms/dropdown/tree/Tree.vue +134 -0
  83. package/components/atoms/dropdown/tree/models/interfaces.ts +9 -0
  84. package/components/atoms/input/Search.vue +16 -0
  85. package/components/atoms/list/SelectList.vue +62 -0
  86. package/components/atoms/list/SimpleList.vue +29 -0
  87. package/components/atoms/list/dragDropList/DragDropList.vue +139 -0
  88. package/components/atoms/list/dragDropList/config/events.ts +4 -0
  89. package/components/atoms/loader/BarLoader.vue +21 -0
  90. package/components/atoms/loader/Loader.vue +26 -0
  91. package/components/atoms/loader/PreLoader.vue +34 -0
  92. package/components/atoms/loader/Preloader.spec.ts +24 -0
  93. package/components/atoms/modal/Modal.spec.ts +55 -0
  94. package/components/atoms/modal/Modal.vue +241 -0
  95. package/components/atoms/modal/bySteps/BySteps.spec.ts +66 -0
  96. package/components/atoms/modal/bySteps/BySteps.vue +234 -0
  97. package/components/atoms/modal/byStepsSecond/ByStepsSecond.vue +174 -0
  98. package/components/atoms/models/interfaces.ts +11 -0
  99. package/components/atoms/nav/NavBar.spec.ts +34 -0
  100. package/components/atoms/nav/NavBar.vue +116 -0
  101. package/components/atoms/nav/VerticalNavBar.vue +89 -0
  102. package/components/atoms/nav/models/interfaces.ts +5 -0
  103. package/components/atoms/notificationBar/NotificationBar.vue +175 -0
  104. package/components/atoms/notificationBar/models/enums.ts +27 -0
  105. package/components/atoms/notificationBar/models/interfaces.ts +6 -0
  106. package/components/atoms/notificationBar/models/types.ts +1 -0
  107. package/components/atoms/perPage/PerPage.vue +52 -0
  108. package/components/atoms/popover/Popover.vue +48 -0
  109. package/components/atoms/popup/SimplePopup.vue +90 -0
  110. package/components/atoms/select/TheSelect.vue +175 -0
  111. package/components/atoms/select/models/interfaces.ts +4 -0
  112. package/components/atoms/stack/StackBlock.vue +171 -0
  113. package/components/atoms/stack/StackContent.vue +60 -0
  114. package/components/atoms/step/VerticalStep.spec.ts +68 -0
  115. package/components/atoms/step/VerticalStep.vue +104 -0
  116. package/components/atoms/step/models/verticalStepItem.ts +7 -0
  117. package/components/atoms/switch/Switch.vue +107 -0
  118. package/components/atoms/table/compact/Compact.vue +526 -0
  119. package/components/atoms/table/compact/models/interfaces.ts +11 -0
  120. package/components/atoms/table/dataGrid/DataGrid.spec.ts +61 -0
  121. package/components/atoms/table/dataGrid/DataGrid.vue +1283 -0
  122. package/components/atoms/table/dataGrid/DataGridColumnSwitch.vue +204 -0
  123. package/components/atoms/table/dataGrid/DataGridPage.vue +189 -0
  124. package/components/atoms/table/dataGrid/DataGridPagination.vue +83 -0
  125. package/components/atoms/table/dataGrid/config/itemsPerPage.ts +20 -0
  126. package/components/atoms/table/dataGrid/models/interfaces.ts +24 -0
  127. package/components/atoms/table/dataGrid/models/types.ts +5 -0
  128. package/components/atoms/table/dataGrid/utils/constructDataTable.ts +33 -0
  129. package/components/atoms/table/info/Info.vue +60 -0
  130. package/components/atoms/table/info/models/interfaces.ts +6 -0
  131. package/components/atoms/table/simpleEvent/SimpleEvent.vue +98 -0
  132. package/components/atoms/table/simpleEvent/models/interfaces.ts +9 -0
  133. package/components/atoms/table/simpleInfo/SimpleInfo.vue +68 -0
  134. package/components/atoms/table/simpleInfo/models/interfaces.ts +4 -0
  135. package/components/atoms/table/simpleTable/SimpleTable.vue +291 -0
  136. package/components/atoms/table/simpleTable/models/interfaces.ts +10 -0
  137. package/components/atoms/tabs/Tabs.vue +189 -0
  138. package/components/atoms/tabs/VerticalTabs.vue +81 -0
  139. package/components/atoms/tabs/models/interfaces.ts +4 -0
  140. package/components/atoms/tabs/models/types.ts +1 -0
  141. package/components/atoms/tooltip/Models/interfaces.ts +4 -0
  142. package/components/atoms/tooltip/Signpost.vue +224 -0
  143. package/components/atoms/tooltip/Text.vue +39 -0
  144. package/components/atoms/tooltip/Tooltip.vue +57 -0
  145. package/components/atoms/tooltip/TooltipError.vue +113 -0
  146. package/components/common/accordion/Accordion.vue +176 -0
  147. package/components/common/accordion/Recursion.vue +195 -0
  148. package/components/common/accordion/models/interfaces.ts +14 -0
  149. package/components/common/adapterManager/AdapterManager.vue +715 -0
  150. package/components/common/adapterManager/AddAdapterModal.vue +464 -0
  151. package/components/common/adapterManager/AddAdapterWarningModal.vue +82 -0
  152. package/components/common/adapterManager/NoActiveAdaptersModal.vue +62 -0
  153. package/components/common/adapterManager/NoConnectedActiveAdaptersModal.vue +62 -0
  154. package/components/common/adapterManager/config/index.ts +19 -0
  155. package/components/common/adapterManager/ui/NoSelectedAdapter.vue +39 -0
  156. package/components/common/adapterManager/ui/SecondTitle.vue +37 -0
  157. package/components/common/adapterManager/ui/actions/ActionsBar.vue +93 -0
  158. package/components/common/adapterManager/ui/actions/AddAdapterButton.vue +28 -0
  159. package/components/common/adapterManager/ui/actions/MoveDownAdapterButton.vue +33 -0
  160. package/components/common/adapterManager/ui/actions/MoveUpAdapterButton.vue +33 -0
  161. package/components/common/adapterManager/ui/actions/RemoveAdapterButton.vue +34 -0
  162. package/components/common/adapterManager/ui/actions/VerticalSeparator.vue +11 -0
  163. package/components/common/adapterManager/ui/table/Adapters.vue +91 -0
  164. package/components/common/adapterManager/ui/table/Header.vue +89 -0
  165. package/components/common/adapterManager/ui/table/Table.vue +167 -0
  166. package/components/common/addNetworking/AddNetworking.vue +982 -0
  167. package/components/common/addNetworking/Wizard.vue +286 -0
  168. package/components/common/addNetworking/config/addNetworkingSteps.ts +404 -0
  169. package/components/common/addNetworking/config/index.ts +46 -0
  170. package/components/common/addNetworking/config/initialData.ts +78 -0
  171. package/components/common/addNetworking/config/portPropertiesStep.ts +19 -0
  172. package/components/common/addNetworking/config/selectSwitch.ts +19 -0
  173. package/components/common/addNetworking/config/sendData.ts +87 -0
  174. package/components/common/addNetworking/config/temporaryData.ts +8 -0
  175. package/components/common/addNetworking/config/validation.ts +23 -0
  176. package/components/common/addNetworking/mappers/mappers.ts +166 -0
  177. package/components/common/addNetworking/modals/SelectNetwork.vue +149 -0
  178. package/components/common/addNetworking/modals/SelectStandardSwitch.vue +125 -0
  179. package/components/common/addNetworking/modals/SelectSwitch.vue +114 -0
  180. package/components/common/addNetworking/models/enums.ts +7 -0
  181. package/components/common/addNetworking/models/interfaces.ts +207 -0
  182. package/components/common/addNetworking/models/types.ts +5 -0
  183. package/components/common/addNetworking/steps/ConnectionSettings.vue +269 -0
  184. package/components/common/addNetworking/steps/CreateStandardSwitch.vue +91 -0
  185. package/components/common/addNetworking/steps/Header.vue +53 -0
  186. package/components/common/addNetworking/steps/IpFourSettings.vue +361 -0
  187. package/components/common/addNetworking/steps/PhysicalAdapter.vue +24 -0
  188. package/components/common/addNetworking/steps/PortProperties.vue +481 -0
  189. package/components/common/addNetworking/steps/ReadyComplete.vue +29 -0
  190. package/components/common/addNetworking/steps/SelectConnectionType.vue +106 -0
  191. package/components/common/addNetworking/steps/SelectedTargetDevice.vue +563 -0
  192. package/components/common/addNetworking/utils/index.ts +212 -0
  193. package/components/common/browse/Browse.vue +182 -0
  194. package/components/common/browse/blocks/Container.vue +102 -0
  195. package/components/common/browse/blocks/Title.vue +66 -0
  196. package/components/common/browse/blocks/contents/Files.vue +68 -0
  197. package/components/common/browse/blocks/info/Date.vue +21 -0
  198. package/components/common/browse/blocks/info/Size.vue +17 -0
  199. package/components/common/browse/blocks/info/Text.vue +17 -0
  200. package/components/common/browse/blocks/models/types.ts +1 -0
  201. package/components/common/browse/models/interfaces.ts +5 -0
  202. package/components/common/context/Context.spec.ts +20 -0
  203. package/components/common/context/Context.vue +97 -0
  204. package/components/common/context/ContextRecursion.spec.ts +55 -0
  205. package/components/common/context/ContextRecursion.vue +251 -0
  206. package/components/common/context/models/interfaces.ts +26 -0
  207. package/components/common/details/DetailsItem.vue +106 -0
  208. package/components/common/details/DetailsList.vue +23 -0
  209. package/components/common/details/model/interfaces.ts +9 -0
  210. package/components/common/diagramMain/Diagram.vue +186 -0
  211. package/components/common/diagramMain/DiagramMain.vue +979 -0
  212. package/components/common/diagramMain/Header.vue +160 -0
  213. package/components/common/diagramMain/Highlights.vue +102 -0
  214. package/components/common/diagramMain/adapter/Adapter.vue +105 -0
  215. package/components/common/diagramMain/adapter/AdapterItem.vue +227 -0
  216. package/components/common/diagramMain/adapter/AdapterItems.vue +57 -0
  217. package/components/common/diagramMain/adapter/Block.vue +41 -0
  218. package/components/common/diagramMain/adapter/Contents.vue +96 -0
  219. package/components/common/diagramMain/adapter/Lines.vue +52 -0
  220. package/components/common/diagramMain/adapter/SecondBlock.vue +42 -0
  221. package/components/common/diagramMain/config/index.ts +51 -0
  222. package/components/common/diagramMain/config/initial.ts +38 -0
  223. package/components/common/diagramMain/modals/ManagePhysicalAdaptersModal.vue +236 -0
  224. package/components/common/diagramMain/modals/MigrateVmkernelAdapter.vue +535 -0
  225. package/components/common/diagramMain/modals/config/adapterModal.ts +110 -0
  226. package/components/common/diagramMain/modals/config/diagramConfig.ts +17 -0
  227. package/components/common/diagramMain/modals/config/index.ts +57 -0
  228. package/components/common/diagramMain/modals/config/initial.ts +195 -0
  229. package/components/common/diagramMain/modals/config/migrateVmkernelAdapterSteps.ts +81 -0
  230. package/components/common/diagramMain/modals/config/networkModal.ts +337 -0
  231. package/components/common/diagramMain/modals/config/portModal.ts +201 -0
  232. package/components/common/diagramMain/modals/config/switchModal.ts +172 -0
  233. package/components/common/diagramMain/modals/config/vCenterModal.ts +30 -0
  234. package/components/common/diagramMain/modals/config/validation.ts +3 -0
  235. package/components/common/diagramMain/modals/config/vmKernelAdapter.ts +90 -0
  236. package/components/common/diagramMain/modals/editSettings/ConfirmTeamingSettingsModal.vue +41 -0
  237. package/components/common/diagramMain/modals/editSettings/EditSettings.vue +490 -0
  238. package/components/common/diagramMain/modals/editSettings/EditSettingsModal.vue +714 -0
  239. package/components/common/diagramMain/modals/editSettings/tabs/NetworkProperties.vue +211 -0
  240. package/components/common/diagramMain/modals/editSettings/tabs/Security.vue +178 -0
  241. package/components/common/diagramMain/modals/editSettings/tabs/SwitchProperties.vue +161 -0
  242. package/components/common/diagramMain/modals/editSettings/tabs/TeamingFailover.vue +165 -0
  243. package/components/common/diagramMain/modals/editSettings/tabs/TrafficShaping.vue +392 -0
  244. package/components/common/diagramMain/modals/editSettings/tabs/port/IpvFourSettings.vue +339 -0
  245. package/components/common/diagramMain/modals/editSettings/tabs/port/PortProperties.vue +202 -0
  246. package/components/common/diagramMain/modals/remove/RemoveModal.vue +226 -0
  247. package/components/common/diagramMain/modals/steps/ConnectionSettings.vue +206 -0
  248. package/components/common/diagramMain/modals/steps/SelectVmkernelAdapter.vue +221 -0
  249. package/components/common/diagramMain/modals/steps/VmkernelAdapterReadyComplete.vue +50 -0
  250. package/components/common/diagramMain/modals/utils/index.ts +9 -0
  251. package/components/common/diagramMain/modals/viewSettings/Info.vue +94 -0
  252. package/components/common/diagramMain/modals/viewSettings/ViewSettings.vue +171 -0
  253. package/components/common/diagramMain/modals/viewSettings/ViewSettingsModal.vue +93 -0
  254. package/components/common/diagramMain/models/enums.ts +27 -0
  255. package/components/common/diagramMain/models/interfaces.ts +586 -0
  256. package/components/common/diagramMain/models/types.ts +9 -0
  257. package/components/common/diagramMain/network/Block.vue +55 -0
  258. package/components/common/diagramMain/network/Contents.vue +238 -0
  259. package/components/common/diagramMain/network/Lines.vue +65 -0
  260. package/components/common/diagramMain/network/Network.vue +117 -0
  261. package/components/common/diagramMain/network/NoNetwork.vue +47 -0
  262. package/components/common/diagramMain/network/SecondBlock.vue +51 -0
  263. package/components/common/diagramMain/port/Port.vue +301 -0
  264. package/components/common/diagramMain/port/Ports.vue +41 -0
  265. package/components/common/diagramMain/switch/Switch.vue +71 -0
  266. package/components/common/diagramMain/switch/SwitchSelected.vue +29 -0
  267. package/components/common/diagramMain/utils/utils.ts +218 -0
  268. package/components/common/feedback/Buttons.vue +232 -0
  269. package/components/common/feedback/Feedback.vue +236 -0
  270. package/components/common/feedback/Message.vue +468 -0
  271. package/components/common/feedback/VisitPortal.vue +54 -0
  272. package/components/common/feedback/config/drawingPanel.ts +31 -0
  273. package/components/common/feedback/config/feedbackTabs.ts +24 -0
  274. package/components/common/feedback/models/interfaces.ts +15 -0
  275. package/components/common/graph/Graph.vue +107 -0
  276. package/components/common/graph/utils/renderGraph.ts +389 -0
  277. package/components/common/headline/Headline.vue +32 -0
  278. package/components/common/mainNavigationPanel/MainNavigationPanel.vue +343 -0
  279. package/components/common/mainNavigationPanel/models/interfaces.ts +6 -0
  280. package/components/common/mainNavigationPanel/models/types.ts +1 -0
  281. package/components/common/modals/Rename.vue +165 -0
  282. package/components/common/modals/config/defaultForm.ts +18 -0
  283. package/components/common/modals/config/renameLabelWidth.ts +3 -0
  284. package/components/common/modals/models/interfaces.ts +5 -0
  285. package/components/common/monitor/advanced/Advanced.vue +149 -0
  286. package/components/common/monitor/advanced/GraphView.vue +200 -0
  287. package/components/common/monitor/advanced/models/interfaces.ts +6 -0
  288. package/components/common/monitor/advanced/models/types.ts +1 -0
  289. package/components/common/monitor/advanced/table/Table.vue +90 -0
  290. package/components/common/monitor/advanced/table/config/performanceDatatable.ts +116 -0
  291. package/components/common/monitor/advanced/table/models/interfaces.ts +12 -0
  292. package/components/common/monitor/advanced/table/models/types.ts +10 -0
  293. package/components/common/monitor/advanced/tools/Tools.vue +281 -0
  294. package/components/common/monitor/advanced/tools/chartOptionsModal/ChartOptionsModal.vue +109 -0
  295. package/components/common/monitor/advanced/tools/chartOptionsModal/Notification.vue +33 -0
  296. package/components/common/monitor/advanced/tools/chartOptionsModal/actions/Actions.vue +79 -0
  297. package/components/common/monitor/advanced/tools/chartOptionsModal/actions/config/optionsActions.ts +13 -0
  298. package/components/common/monitor/advanced/tools/chartOptionsModal/actions/saveOptionsModal/SaveOptionsModal.vue +53 -0
  299. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/Counters.vue +47 -0
  300. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/Table.vue +104 -0
  301. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/config/tableConfig.ts +73 -0
  302. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/models/interfaces.ts +15 -0
  303. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/models/types.ts +7 -0
  304. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/Timespan.vue +18 -0
  305. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/form/Form.vue +388 -0
  306. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/form/config/dateForm.ts +59 -0
  307. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/Object.vue +107 -0
  308. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/config/objectTable.ts +54 -0
  309. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/models/interfaces.ts +4 -0
  310. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/models/types.ts +1 -0
  311. package/components/common/monitor/advanced/tools/chartOptionsModal/metrics/Metrics.vue +32 -0
  312. package/components/common/monitor/advanced/tools/chartOptionsModal/metrics/config/optionsMetrics.ts +104 -0
  313. package/components/common/monitor/advanced/tools/config/advancedToolbar.ts +73 -0
  314. package/components/common/monitor/advanced/tools/models/interfaces.ts +4 -0
  315. package/components/common/monitor/config/getValidDateByOption.ts +14 -0
  316. package/components/common/monitor/models/interfaces.ts +16 -0
  317. package/components/common/monitor/overview/Overview.vue +412 -0
  318. package/components/common/monitor/overview/filters/Filters.vue +210 -0
  319. package/components/common/monitor/overview/filters/config/filterOptions.ts +56 -0
  320. package/components/common/monitor/overview/filters/customIntervalModal/CustomIntervalModal.vue +220 -0
  321. package/components/common/monitor/overview/filters/customIntervalModal/config/dateChecker.ts +35 -0
  322. package/components/common/monitor/overview/filters/models/interfaces.ts +6 -0
  323. package/components/common/monitor/overview/filters/models/types.ts +3 -0
  324. package/components/common/perPage/PerPage.vue +51 -0
  325. package/components/common/recursionTree/RecursionTree.vue +201 -0
  326. package/components/common/recursionTree/models/interfaces.ts +19 -0
  327. package/components/common/resource/models/interfaces.ts +9 -0
  328. package/components/common/resource/models/types.ts +1 -0
  329. package/components/common/resource/progressBlock/ProgressBlock.vue +105 -0
  330. package/components/common/resource/simple/Simple.vue +58 -0
  331. package/components/common/resource/simple/models/enums.ts +5 -0
  332. package/components/common/resource/utils.ts +33 -0
  333. package/components/common/select/button/ButtonDropdown.vue +100 -0
  334. package/components/common/select/button/models/interfaces.ts +6 -0
  335. package/components/common/select/radio/RadioGroup.vue +71 -0
  336. package/components/common/select/radio/models/interfaces.ts +10 -0
  337. package/components/common/spiceConsole/Drawer.vue +233 -0
  338. package/components/common/spiceConsole/SpiceConsole.vue +87 -0
  339. package/components/common/spiceConsole/keyboard/Keyboard.vue +402 -0
  340. package/components/common/spiceConsole/keyboard/config/keyboardRows.ts +891 -0
  341. package/components/common/spiceConsole/keyboard/models/interfaces.ts +17 -0
  342. package/components/common/spiceConsole/models/types.ts +1 -0
  343. package/components/common/split/horizontal/Horizontal.vue +306 -0
  344. package/components/common/split/horizontal/models/interfaces.ts +5 -0
  345. package/components/common/split/vertical/Vertical.vue +213 -0
  346. package/components/common/split/vertical/models/interfaces.ts +3 -0
  347. package/components/common/tools/Actions.vue +141 -0
  348. package/components/common/tools/models/interfaces.ts +6 -0
  349. package/components/common/vm/actions/add/Add.vue +654 -0
  350. package/components/common/vm/actions/add/FolderTreeView.vue +83 -0
  351. package/components/common/vm/actions/add/config/capabilities.ts +670 -0
  352. package/components/common/vm/actions/add/customizeHardware/CustomizeHardware.vue +236 -0
  353. package/components/common/vm/actions/add/customizeHardware/config/navItems.ts +19 -0
  354. package/components/common/vm/actions/add/customizeHardware/models/interfaces.ts +7 -0
  355. package/components/common/vm/actions/add/customizeHardware/virtualHardware/VirtualHardware.vue +611 -0
  356. package/components/common/vm/actions/add/customizeHardware/virtualHardware/browseView/BrowseView.vue +203 -0
  357. package/components/common/vm/actions/add/customizeHardware/virtualHardware/browseView/models/interfaces.ts +8 -0
  358. package/components/common/vm/actions/add/customizeHardware/virtualHardware/bus/Bus.vue +86 -0
  359. package/components/common/vm/actions/add/customizeHardware/virtualHardware/bus/config/options.ts +13 -0
  360. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDrive.vue +223 -0
  361. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cdDvdDrive/config/fileTypes.ts +9 -0
  362. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cdDvdDrive/config/options.ts +11 -0
  363. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +55 -0
  364. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cdDvdDrive/models/types.ts +1 -0
  365. package/components/common/vm/actions/add/customizeHardware/virtualHardware/config/binaryOptions.ts +12 -0
  366. package/components/common/vm/actions/add/customizeHardware/virtualHardware/config/dropdownItems.ts +52 -0
  367. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/CoresPerSocket.vue +97 -0
  368. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/Cpu.vue +368 -0
  369. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/CpuHotPlug.vue +49 -0
  370. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/CpuModel.vue +220 -0
  371. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/Hv.vue +93 -0
  372. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/Iommu.vue +52 -0
  373. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/MaxCpu.vue +99 -0
  374. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/Pc.vue +54 -0
  375. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/Sa.vue +102 -0
  376. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/config/cpuOptions.ts +19 -0
  377. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/shares/Shares.vue +151 -0
  378. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/shares/config/options.ts +28 -0
  379. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/tooltip/Tooltip.vue +58 -0
  380. package/components/common/vm/actions/add/customizeHardware/virtualHardware/limit/Limit.vue +210 -0
  381. package/components/common/vm/actions/add/customizeHardware/virtualHardware/limit/config/options.ts +28 -0
  382. package/components/common/vm/actions/add/customizeHardware/virtualHardware/memory/Memory.vue +278 -0
  383. package/components/common/vm/actions/add/customizeHardware/virtualHardware/memory/MemoryHotPlug.vue +53 -0
  384. package/components/common/vm/actions/add/customizeHardware/virtualHardware/memory/config/memoryOptions.ts +23 -0
  385. package/components/common/vm/actions/add/customizeHardware/virtualHardware/models/interfaces.ts +125 -0
  386. package/components/common/vm/actions/add/customizeHardware/virtualHardware/models/types.ts +4 -0
  387. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/DiskFile.vue +24 -0
  388. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/Location.vue +171 -0
  389. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/MaximumSize.vue +27 -0
  390. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +447 -0
  391. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/cache/Cache.vue +80 -0
  392. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/cache/config/options.ts +7 -0
  393. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/limitIops/LimitIops.vue +147 -0
  394. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/limitIops/config/options.ts +28 -0
  395. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/mode/Mode.vue +87 -0
  396. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/mode/config/options.ts +18 -0
  397. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/provisioning/Provisioning.vue +87 -0
  398. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/provisioning/config/options.ts +15 -0
  399. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/sharing/Sharing.vue +85 -0
  400. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/sharing/config/options.ts +12 -0
  401. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newNetwork/Location.vue +141 -0
  402. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +252 -0
  403. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newNetwork/adapterType/AdapterType.vue +86 -0
  404. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newNetwork/adapterType/config/options.ts +9 -0
  405. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +140 -0
  406. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newNetwork/macAddress/config/options.ts +11 -0
  407. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +157 -0
  408. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newPciDevice/config/options.ts +7 -0
  409. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIo.vue +44 -0
  410. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +49 -0
  411. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/config/options.ts +10 -0
  412. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +27 -0
  413. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGrid.vue +41 -0
  414. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newPciDevice/typeSelection/TypeSelection.vue +56 -0
  415. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newUsbController/NewUsbController.vue +65 -0
  416. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newUsbController/config/options.ts +6 -0
  417. package/components/common/vm/actions/add/customizeHardware/virtualHardware/other/InputDevices.vue +21 -0
  418. package/components/common/vm/actions/add/customizeHardware/virtualHardware/other/Other.vue +27 -0
  419. package/components/common/vm/actions/add/customizeHardware/virtualHardware/reservation/Reservation.vue +228 -0
  420. package/components/common/vm/actions/add/customizeHardware/virtualHardware/reservation/config/options.ts +33 -0
  421. package/components/common/vm/actions/add/customizeHardware/virtualHardware/videoCard/Graphics.vue +45 -0
  422. package/components/common/vm/actions/add/customizeHardware/virtualHardware/videoCard/TotalVideoMemory.vue +120 -0
  423. package/components/common/vm/actions/add/customizeHardware/virtualHardware/videoCard/VideoCard.vue +169 -0
  424. package/components/common/vm/actions/add/customizeHardware/virtualHardware/videoCard/config/options.ts +11 -0
  425. package/components/common/vm/actions/add/customizeHardware/virtualHardware/videoCard/model/Model.vue +57 -0
  426. package/components/common/vm/actions/add/customizeHardware/virtualHardware/videoCard/model/config/options.ts +10 -0
  427. package/components/common/vm/actions/add/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplays.vue +82 -0
  428. package/components/common/vm/actions/add/customizeHardware/virtualHardware/videoCard/numberDisplays/config/options.ts +14 -0
  429. package/components/common/vm/actions/add/customizeHardware/vmoptions/Vmoptions.vue +141 -0
  430. package/components/common/vm/actions/add/customizeHardware/vmoptions/bootOptions/BootOptions.vue +110 -0
  431. package/components/common/vm/actions/add/customizeHardware/vmoptions/bootOptions/Menu.vue +45 -0
  432. package/components/common/vm/actions/add/customizeHardware/vmoptions/bootOptions/Secure.vue +45 -0
  433. package/components/common/vm/actions/add/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +50 -0
  434. package/components/common/vm/actions/add/customizeHardware/vmoptions/bootOptions/delay/config/config.ts +14 -0
  435. package/components/common/vm/actions/add/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +83 -0
  436. package/components/common/vm/actions/add/customizeHardware/vmoptions/bootOptions/firmware/config/config.ts +11 -0
  437. package/components/common/vm/actions/add/customizeHardware/vmoptions/bootOptions/order/Order.vue +195 -0
  438. package/components/common/vm/actions/add/customizeHardware/vmoptions/bootOptions/order/models/interfaces.ts +8 -0
  439. package/components/common/vm/actions/add/customizeHardware/vmoptions/generalOptions/GeneralOptions.vue +114 -0
  440. package/components/common/vm/actions/add/customizeHardware/vmoptions/models/interfaces.ts +34 -0
  441. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/CopyPaste.vue +45 -0
  442. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/FileTransfer.vue +49 -0
  443. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/FolderSharing.vue +50 -0
  444. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/PlaybackCompression.vue +49 -0
  445. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/PowerControl.vue +49 -0
  446. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/RemoteConsoleOptions.vue +226 -0
  447. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/imgCompression/ImgCompression.vue +82 -0
  448. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/imgCompression/config/config.ts +14 -0
  449. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/jpegCompression/JpegCompression.vue +82 -0
  450. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/jpegCompression/config/config.ts +12 -0
  451. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +50 -0
  452. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/keymap/config/config.ts +6 -0
  453. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/mouseMode/MouseMode.vue +52 -0
  454. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/mouseMode/config/config.ts +11 -0
  455. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +134 -0
  456. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/password/models/interfaces.ts +5 -0
  457. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/password/utils.ts +12 -0
  458. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/sharePolicy/SharePolicy.vue +52 -0
  459. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/sharePolicy/config/config.ts +11 -0
  460. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/streamingMode/StreamingMode.vue +82 -0
  461. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/streamingMode/config/config.ts +12 -0
  462. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/type/Type.vue +82 -0
  463. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/type/config/config.ts +7 -0
  464. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +56 -0
  465. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/config/config.ts +14 -0
  466. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/zlibCompression/ZlibCompression.vue +82 -0
  467. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/zlibCompression/config/config.ts +12 -0
  468. package/components/common/vm/actions/add/customizeHardware/vmoptions/tools/Tools.vue +63 -0
  469. package/components/common/vm/actions/add/models/enums.ts +89 -0
  470. package/components/common/vm/actions/add/models/interfaces.ts +125 -0
  471. package/components/common/vm/actions/add/models/types.ts +63 -0
  472. package/components/common/vm/actions/add/readyToComplete/ReadyToComplete.vue +15 -0
  473. package/components/common/vm/actions/add/select/compatibility/Compatibility.vue +151 -0
  474. package/components/common/vm/actions/add/select/computeResource/ComputeResource.spec.ts +479 -0
  475. package/components/common/vm/actions/add/select/computeResource/ComputeResource.vue +158 -0
  476. package/components/common/vm/actions/add/select/computeResource/TreeView.vue +126 -0
  477. package/components/common/vm/actions/add/select/createType/CreateType.vue +61 -0
  478. package/components/common/vm/actions/add/select/createType/config/items.ts +26 -0
  479. package/components/common/vm/actions/add/select/models/interfaces.ts +32 -0
  480. package/components/common/vm/actions/add/select/models/types.ts +44 -0
  481. package/components/common/vm/actions/add/select/name/Name.vue +163 -0
  482. package/components/common/vm/actions/add/select/os/os.vue +221 -0
  483. package/components/common/vm/actions/add/select/storage/Storage.vue +176 -0
  484. package/components/common/vm/actions/add/select/storage/config/config.ts +148 -0
  485. package/components/common/vm/actions/add/select/storage/models/types.ts +15 -0
  486. package/components/common/vm/actions/add/utils.ts +118 -0
  487. package/components/common/vm/actions/editSettings/EditSettings.vue +312 -0
  488. package/components/common/vm/actions/editSettings/models/types.ts +23 -0
  489. package/components/common/vm/actions/editSettings/utils.ts +48 -0
  490. package/components/common/vm/actions/models/interfaces.ts +6 -0
  491. package/components/common/vm/actions/models/types.ts +11 -0
  492. package/components/common/vm/actions/utils.ts +221 -0
  493. package/components/common/wizards/datastore/add/Add.vue +382 -0
  494. package/components/common/wizards/datastore/add/config/stepItems.ts +160 -0
  495. package/components/common/wizards/datastore/add/local/Local.vue +67 -0
  496. package/components/common/wizards/datastore/add/local/createName/CreateName.vue +159 -0
  497. package/components/common/wizards/datastore/add/local/createName/config/defaultForm.ts +15 -0
  498. package/components/common/wizards/datastore/add/models/interfaces.ts +35 -0
  499. package/components/common/wizards/datastore/add/models/types.ts +14 -0
  500. package/components/common/wizards/datastore/add/nfs/Nfs.vue +91 -0
  501. package/components/common/wizards/datastore/add/nfs/accessibility/Accessibility.vue +95 -0
  502. package/components/common/wizards/datastore/add/nfs/accessibility/config/tabsPannel.ts +24 -0
  503. package/components/common/wizards/datastore/add/nfs/accessibility/models/interfaces.ts +9 -0
  504. package/components/common/wizards/datastore/add/nfs/accessibility/models/types.ts +5 -0
  505. package/components/common/wizards/datastore/add/nfs/accessibility/tablesView/TablesView.vue +141 -0
  506. package/components/common/wizards/datastore/add/nfs/accessibility/tablesView/config/compatibleTable.ts +54 -0
  507. package/components/common/wizards/datastore/add/nfs/accessibility/tablesView/config/hostsTableItems.ts +75 -0
  508. package/components/common/wizards/datastore/add/nfs/accessibility/tablesView/config/incompatibleTable.ts +68 -0
  509. package/components/common/wizards/datastore/add/nfs/accessibility/tablesView/config/tableKeys.ts +15 -0
  510. package/components/common/wizards/datastore/add/nfs/configuration/Configuration.vue +373 -0
  511. package/components/common/wizards/datastore/add/nfs/configuration/config/defaultForm.ts +33 -0
  512. package/components/common/wizards/datastore/add/nfs/configuration/models/interfaces.ts +12 -0
  513. package/components/common/wizards/datastore/add/nfs/configuration/serversList/DeletePopover.vue +97 -0
  514. package/components/common/wizards/datastore/add/nfs/configuration/serversList/ServersList.vue +123 -0
  515. package/components/common/wizards/datastore/add/nfs/configuration/serversList/config/serversListConfig.ts +41 -0
  516. package/components/common/wizards/datastore/add/nfs/configuration/serversList/config/tableKeys.ts +3 -0
  517. package/components/common/wizards/datastore/add/nfs/configuration/serversList/models/interfaces.ts +11 -0
  518. package/components/common/wizards/datastore/add/nfs/configuration/serversList/models/types.ts +1 -0
  519. package/components/common/wizards/datastore/add/nfs/kerberosAuthentication/KerberosAuthentication.vue +54 -0
  520. package/components/common/wizards/datastore/add/nfs/kerberosAuthentication/config/radioOptions.ts +24 -0
  521. package/components/common/wizards/datastore/add/nfs/version/Version.vue +70 -0
  522. package/components/common/wizards/datastore/add/nfs/version/config/versionOptions.ts +20 -0
  523. package/components/common/wizards/datastore/add/readyComplete/ReadyComplete.vue +77 -0
  524. package/components/common/wizards/datastore/add/readyComplete/config/propertiesDetails.ts +165 -0
  525. package/components/common/wizards/datastore/add/readyComplete/models/interfaces.ts +4 -0
  526. package/components/common/wizards/datastore/add/sharedStorm/SharedStorm.vue +85 -0
  527. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/DeviceSelection.vue +447 -0
  528. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/config/defaultForm.ts +18 -0
  529. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/config/selectOptions.ts +14 -0
  530. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/hostTable/HostTable.vue +131 -0
  531. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/hostTable/config/hostsTable.ts +87 -0
  532. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/hostTable/config/tableKeys.ts +11 -0
  533. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/models/interfaces.ts +55 -0
  534. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/models/types.ts +14 -0
  535. package/components/common/wizards/datastore/add/sharedStorm/partitionConfiguration/PartitionConfiguration.vue +230 -0
  536. package/components/common/wizards/datastore/add/sharedStorm/partitionConfiguration/config/selectOptions.ts +46 -0
  537. package/components/common/wizards/datastore/add/sharedStorm/partitionConfiguration/graphicTooltip/graphicTooltip.vue +64 -0
  538. package/components/common/wizards/datastore/add/sharedStorm/partitionConfiguration/sizeGraphic/sizeGraphic.vue +225 -0
  539. package/components/common/wizards/datastore/add/sharedStorm/version/Version.vue +70 -0
  540. package/components/common/wizards/datastore/add/sharedStorm/version/config/versionOptions.ts +19 -0
  541. package/components/common/wizards/datastore/add/types/Types.vue +79 -0
  542. package/components/common/wizards/datastore/add/types/config/typeOptions.ts +31 -0
  543. package/components/common/wizards/datastore/add/utils.ts +69 -0
  544. package/components/models/interfaces.ts +14 -0
  545. package/composables/deepCopy.ts +21 -0
  546. package/composables/useDiff.ts +15 -0
  547. package/composables/useLocal.ts +36 -0
  548. package/composables/useLocalStorage.ts +45 -0
  549. package/composables/useThrottle.ts +32 -0
  550. package/composables/useUniqueId.ts +5 -0
  551. package/config/regExp.ts +13 -0
  552. package/eslint/index.js +15 -0
  553. package/eslint/no-import-type.js +17 -0
  554. package/eslint/no-invalid-type-prefix.js +32 -0
  555. package/minify.js +51 -0
  556. package/models/composables/useMyFetch/interfaces.ts +4 -0
  557. package/models/composables/useMyFetch/types.ts +1 -0
  558. package/models/enums.ts +21 -0
  559. package/models/interfaces.ts +29 -0
  560. package/models/plugins/date/interfaces.ts +5 -0
  561. package/models/plugins/date/types.ts +1 -0
  562. package/models/plugins/validation/interfaces.ts +21 -0
  563. package/models/plugins/validation/types.ts +1 -0
  564. package/models/store/host/interfaces.ts +38 -0
  565. package/models/store/interfaces.ts +47 -0
  566. package/models/store/network/interfaces.ts +13 -0
  567. package/models/store/storage/interfaces.ts +32 -0
  568. package/models/store/vm/interfaces.ts +87 -0
  569. package/models/types.ts +6 -0
  570. package/nuxt.config.ts +8 -0
  571. package/package.json +39 -0
  572. package/plugins/binary.ts +122 -0
  573. package/plugins/date.ts +179 -0
  574. package/plugins/recursion.ts +199 -0
  575. package/plugins/spice-console/spice.console.ts +128 -0
  576. package/plugins/text.ts +48 -0
  577. package/plugins/validation.ts +172 -0
  578. package/public/favicon.ico +0 -0
  579. package/public/spice-console/application/WorkerProcess.js +3350 -0
  580. package/public/spice-console/application/WorkerProcess_back.js +3144 -0
  581. package/public/spice-console/application/WorkerProcess_meta.js +3103 -0
  582. package/public/spice-console/application/WorkerProcess_reverse.js +3214 -0
  583. package/public/spice-console/application/agent.js +175 -0
  584. package/public/spice-console/application/application.js +641 -0
  585. package/public/spice-console/application/checkActivity.js +50 -0
  586. package/public/spice-console/application/clientgui.js +842 -0
  587. package/public/spice-console/application/clipboard/clipboarddataparser.js +92 -0
  588. package/public/spice-console/application/clipboard/local/localClipboard.js +110 -0
  589. package/public/spice-console/application/clipboard.js +82 -0
  590. package/public/spice-console/application/codec.js +257 -0
  591. package/public/spice-console/application/imagecache.js +81 -0
  592. package/public/spice-console/application/inputmanager.js +270 -0
  593. package/public/spice-console/application/packetfactory.js +202 -0
  594. package/public/spice-console/application/packetfilter.js +103 -0
  595. package/public/spice-console/application/packetprocess.js +75 -0
  596. package/public/spice-console/application/rasteroperation.js +118 -0
  597. package/public/spice-console/application/spiceconnection.js +197 -0
  598. package/public/spice-console/application/stream.js +67 -0
  599. package/public/spice-console/application/virtualmouse.js +109 -0
  600. package/public/spice-console/keymaps/keyevent.js +36 -0
  601. package/public/spice-console/keymaps/keymap.js +229 -0
  602. package/public/spice-console/keymaps/keymapes.js +375 -0
  603. package/public/spice-console/keymaps/keymapesObj.js +317 -0
  604. package/public/spice-console/keymaps/keymapus.js +317 -0
  605. package/public/spice-console/keymaps/scanCodeObjModifier.js +65 -0
  606. package/public/spice-console/keymaps/scanCodeObjProvider.js +60 -0
  607. package/public/spice-console/lib/AsyncConsumer.js +204 -0
  608. package/public/spice-console/lib/AsyncWorker.js +60 -0
  609. package/public/spice-console/lib/CollisionDetector.js +27 -0
  610. package/public/spice-console/lib/DataLogger.js +197 -0
  611. package/public/spice-console/lib/GenericObjectPool.js +152 -0
  612. package/public/spice-console/lib/GlobalPool.js +114 -0
  613. package/public/spice-console/lib/ImageUncompressor.js +138 -0
  614. package/public/spice-console/lib/IntegrationBenchmark.js +64 -0
  615. package/public/spice-console/lib/PacketWorkerIdentifier.js +107 -0
  616. package/public/spice-console/lib/SyncAsyncHandler.js +46 -0
  617. package/public/spice-console/lib/base64.js +298 -0
  618. package/public/spice-console/lib/biginteger.js +1640 -0
  619. package/public/spice-console/lib/bowser.js +276 -0
  620. package/public/spice-console/lib/decoder/dixie.js +7930 -0
  621. package/public/spice-console/lib/decoder/jmuxer.js +2815 -0
  622. package/public/spice-console/lib/displayRouter.js +83 -0
  623. package/public/spice-console/lib/encrypt.js +191 -0
  624. package/public/spice-console/lib/flipper.js +39 -0
  625. package/public/spice-console/lib/graphic.js +1230 -0
  626. package/public/spice-console/lib/graphicdebug.js +223 -0
  627. package/public/spice-console/lib/images/bitmap.js +194 -0
  628. package/public/spice-console/lib/images/jsquic_family.js +84 -0
  629. package/public/spice-console/lib/images/jsquic_rgba.js +343 -0
  630. package/public/spice-console/lib/images/jsquic_uncompress.js +530 -0
  631. package/public/spice-console/lib/images/lz.js +717 -0
  632. package/public/spice-console/lib/images/png.js +275 -0
  633. package/public/spice-console/lib/jgestures.min.js +44 -0
  634. package/public/spice-console/lib/jquery-2.0.3.js +8829 -0
  635. package/public/spice-console/lib/jquery-mousewheel.js +84 -0
  636. package/public/spice-console/lib/jquery-visibility.min.js +2 -0
  637. package/public/spice-console/lib/jsbn.js +578 -0
  638. package/public/spice-console/lib/jsbn2.js +675 -0
  639. package/public/spice-console/lib/lodash.4.0.0.min.js +136 -0
  640. package/public/spice-console/lib/modernizr.js +39 -0
  641. package/public/spice-console/lib/pixastic.js +3244 -0
  642. package/public/spice-console/lib/prettyprint.js +794 -0
  643. package/public/spice-console/lib/prng4.js +64 -0
  644. package/public/spice-console/lib/queue.js +259 -0
  645. package/public/spice-console/lib/rasterEngine.js +907 -0
  646. package/public/spice-console/lib/rng.js +87 -0
  647. package/public/spice-console/lib/runqueue.js +103 -0
  648. package/public/spice-console/lib/sha1.js +124 -0
  649. package/public/spice-console/lib/stuckkeyshandler.js +122 -0
  650. package/public/spice-console/lib/timelapsedetector.js +62 -0
  651. package/public/spice-console/lib/utils.js +327 -0
  652. package/public/spice-console/lib/virtualjoystick.js +370 -0
  653. package/public/spice-console/network/busconnection.js +195 -0
  654. package/public/spice-console/network/clusternodechooser.js +49 -0
  655. package/public/spice-console/network/connectioncontrol.js +60 -0
  656. package/public/spice-console/network/packetcontroller.js +62 -0
  657. package/public/spice-console/network/packetextractor.js +73 -0
  658. package/public/spice-console/network/packetlinkfactory.js +64 -0
  659. package/public/spice-console/network/packetreassembler.js +77 -0
  660. package/public/spice-console/network/reassemblerfactory.js +39 -0
  661. package/public/spice-console/network/sizedefiner.js +86 -0
  662. package/public/spice-console/network/socket.js +120 -0
  663. package/public/spice-console/network/socketqueue.js +95 -0
  664. package/public/spice-console/network/spicechannel.js +310 -0
  665. package/public/spice-console/network/websocketwrapper.js +75 -0
  666. package/public/spice-console/process/busprocess.js +309 -0
  667. package/public/spice-console/process/cursorprocess.js +110 -0
  668. package/public/spice-console/process/displaypreprocess.js +152 -0
  669. package/public/spice-console/process/displayprocess.js +210 -0
  670. package/public/spice-console/process/inputprocess.js +204 -0
  671. package/public/spice-console/process/mainprocess.js +78 -0
  672. package/public/spice-console/process/playbackprocess.js +233 -0
  673. package/public/spice-console/resources/magnifier.png +0 -0
  674. package/public/spice-console/resources/mouse.png +0 -0
  675. package/public/spice-console/resources/mouse_cursor.gif +0 -0
  676. package/public/spice-console/resources/mouse_cursor.png +0 -0
  677. package/public/spice-console/run.js +181 -0
  678. package/public/spice-console/spiceobjects/generated/protocol.js +537 -0
  679. package/public/spice-console/spiceobjects/spiceobjects.js +3474 -0
  680. package/public/spice-console/swcanvas/swcanvas.js +82 -0
  681. package/public/spice-console/tools/generate.php +269 -0
  682. package/public/spice-console/tools/generateKeyboardLayout.php +63 -0
  683. package/public/spice-console/tools/generateSpiceObject.php +81 -0
  684. package/public/spice-console-minify/application/WorkerProcess.min.js +1 -0
  685. package/public/spice-console-minify/application/WorkerProcess_back.min.js +1 -0
  686. package/public/spice-console-minify/application/WorkerProcess_meta.min.js +1 -0
  687. package/public/spice-console-minify/application/WorkerProcess_reverse.min.js +1 -0
  688. package/public/spice-console-minify/application/agent.min.js +1 -0
  689. package/public/spice-console-minify/application/application.min.js +1 -0
  690. package/public/spice-console-minify/application/checkActivity.min.js +1 -0
  691. package/public/spice-console-minify/application/clientgui.min.js +1 -0
  692. package/public/spice-console-minify/application/clipboard/clipboarddataparser.min.js +1 -0
  693. package/public/spice-console-minify/application/clipboard/local/localClipboard.min.js +1 -0
  694. package/public/spice-console-minify/application/clipboard.min.js +1 -0
  695. package/public/spice-console-minify/application/codec.min.js +1 -0
  696. package/public/spice-console-minify/application/imagecache.min.js +1 -0
  697. package/public/spice-console-minify/application/inputmanager.min.js +1 -0
  698. package/public/spice-console-minify/application/packetfactory.min.js +1 -0
  699. package/public/spice-console-minify/application/packetfilter.min.js +1 -0
  700. package/public/spice-console-minify/application/packetprocess.min.js +1 -0
  701. package/public/spice-console-minify/application/rasteroperation.min.js +1 -0
  702. package/public/spice-console-minify/application/spiceconnection.min.js +1 -0
  703. package/public/spice-console-minify/application/stream.min.js +1 -0
  704. package/public/spice-console-minify/application/virtualmouse.min.js +1 -0
  705. package/public/spice-console-minify/keymaps/keyevent.min.js +1 -0
  706. package/public/spice-console-minify/keymaps/keymap.min.js +1 -0
  707. package/public/spice-console-minify/keymaps/keymapes.min.js +1 -0
  708. package/public/spice-console-minify/keymaps/keymapesObj.min.js +1 -0
  709. package/public/spice-console-minify/keymaps/keymapus.min.js +1 -0
  710. package/public/spice-console-minify/keymaps/scanCodeObjModifier.min.js +1 -0
  711. package/public/spice-console-minify/keymaps/scanCodeObjProvider.min.js +1 -0
  712. package/public/spice-console-minify/lib/AsyncConsumer.min.js +1 -0
  713. package/public/spice-console-minify/lib/AsyncWorker.min.js +1 -0
  714. package/public/spice-console-minify/lib/CollisionDetector.min.js +1 -0
  715. package/public/spice-console-minify/lib/DataLogger.min.js +1 -0
  716. package/public/spice-console-minify/lib/GenericObjectPool.min.js +1 -0
  717. package/public/spice-console-minify/lib/GlobalPool.min.js +1 -0
  718. package/public/spice-console-minify/lib/ImageUncompressor.min.js +1 -0
  719. package/public/spice-console-minify/lib/IntegrationBenchmark.min.js +1 -0
  720. package/public/spice-console-minify/lib/PacketWorkerIdentifier.min.js +1 -0
  721. package/public/spice-console-minify/lib/SyncAsyncHandler.min.js +1 -0
  722. package/public/spice-console-minify/lib/base64.min.js +1 -0
  723. package/public/spice-console-minify/lib/biginteger.min.js +1 -0
  724. package/public/spice-console-minify/lib/bowser.min.js +1 -0
  725. package/public/spice-console-minify/lib/decoder/dixie.min.js +5 -0
  726. package/public/spice-console-minify/lib/decoder/jmuxer.min.js +1 -0
  727. package/public/spice-console-minify/lib/displayRouter.min.js +1 -0
  728. package/public/spice-console-minify/lib/encrypt.min.js +1 -0
  729. package/public/spice-console-minify/lib/flipper.min.js +1 -0
  730. package/public/spice-console-minify/lib/graphic.min.js +1 -0
  731. package/public/spice-console-minify/lib/graphicdebug.min.js +1 -0
  732. package/public/spice-console-minify/lib/images/bitmap.min.js +1 -0
  733. package/public/spice-console-minify/lib/images/jsquic_family.min.js +1 -0
  734. package/public/spice-console-minify/lib/images/jsquic_rgba.min.js +1 -0
  735. package/public/spice-console-minify/lib/images/jsquic_uncompress.min.js +1 -0
  736. package/public/spice-console-minify/lib/images/lz.min.js +1 -0
  737. package/public/spice-console-minify/lib/images/png.min.js +1 -0
  738. package/public/spice-console-minify/lib/jgestures.min.js +25 -0
  739. package/public/spice-console-minify/lib/jquery-2.0.3.min.js +25 -0
  740. package/public/spice-console-minify/lib/jquery-mousewheel.min.js +12 -0
  741. package/public/spice-console-minify/lib/jquery-visibility.min.js +2 -0
  742. package/public/spice-console-minify/lib/jsbn.min.js +1 -0
  743. package/public/spice-console-minify/lib/jsbn2.min.js +1 -0
  744. package/public/spice-console-minify/lib/lodash.4.0.0.min.js +6 -0
  745. package/public/spice-console-minify/lib/modernizr.min.js +1 -0
  746. package/public/spice-console-minify/lib/pixastic.min.js +1 -0
  747. package/public/spice-console-minify/lib/prettyprint.min.js +1 -0
  748. package/public/spice-console-minify/lib/prng4.min.js +1 -0
  749. package/public/spice-console-minify/lib/queue.min.js +1 -0
  750. package/public/spice-console-minify/lib/rasterEngine.min.js +1 -0
  751. package/public/spice-console-minify/lib/rng.min.js +1 -0
  752. package/public/spice-console-minify/lib/runqueue.min.js +1 -0
  753. package/public/spice-console-minify/lib/sha1.min.js +1 -0
  754. package/public/spice-console-minify/lib/stuckkeyshandler.min.js +1 -0
  755. package/public/spice-console-minify/lib/timelapsedetector.min.js +1 -0
  756. package/public/spice-console-minify/lib/utils.min.js +1 -0
  757. package/public/spice-console-minify/lib/virtualjoystick.min.js +1 -0
  758. package/public/spice-console-minify/network/busconnection.min.js +1 -0
  759. package/public/spice-console-minify/network/clusternodechooser.min.js +1 -0
  760. package/public/spice-console-minify/network/connectioncontrol.min.js +1 -0
  761. package/public/spice-console-minify/network/packetcontroller.min.js +1 -0
  762. package/public/spice-console-minify/network/packetextractor.min.js +1 -0
  763. package/public/spice-console-minify/network/packetlinkfactory.min.js +1 -0
  764. package/public/spice-console-minify/network/packetreassembler.min.js +1 -0
  765. package/public/spice-console-minify/network/reassemblerfactory.min.js +1 -0
  766. package/public/spice-console-minify/network/sizedefiner.min.js +1 -0
  767. package/public/spice-console-minify/network/socket.min.js +1 -0
  768. package/public/spice-console-minify/network/socketqueue.min.js +1 -0
  769. package/public/spice-console-minify/network/spicechannel.min.js +1 -0
  770. package/public/spice-console-minify/network/websocketwrapper.min.js +1 -0
  771. package/public/spice-console-minify/process/busprocess.min.js +1 -0
  772. package/public/spice-console-minify/process/cursorprocess.min.js +1 -0
  773. package/public/spice-console-minify/process/displaypreprocess.min.js +1 -0
  774. package/public/spice-console-minify/process/displayprocess.min.js +1 -0
  775. package/public/spice-console-minify/process/inputprocess.min.js +1 -0
  776. package/public/spice-console-minify/process/mainprocess.min.js +1 -0
  777. package/public/spice-console-minify/process/playbackprocess.min.js +1 -0
  778. package/public/spice-console-minify/run.min.js +1 -0
  779. package/public/spice-console-minify/spiceobjects/generated/protocol.min.js +1 -0
  780. package/public/spice-console-minify/spiceobjects/spiceobjects.min.js +1 -0
  781. package/public/spice-console-minify/swcanvas/swcanvas.min.js +1 -0
  782. package/tsconfig.json +4 -0
@@ -0,0 +1,3244 @@
1
+ /*
2
+ Copyright (c) 2016 eyeOS
3
+
4
+ This file is part of Open365.
5
+
6
+ Open365 is free software: you can redistribute it and/or modify
7
+ it under the terms of the GNU Affero General Public License as
8
+ published by the Free Software Foundation, either version 3 of the
9
+ License, or (at your option) any later version.
10
+
11
+ This program is distributed in the hope that it will be useful,
12
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ GNU Affero General Public License for more details.
15
+
16
+ You should have received a copy of the GNU Affero General Public License
17
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
18
+ */
19
+
20
+ /*
21
+ * Pixastic Lib - Core Functions - v0.1.3
22
+ * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
23
+ * License: [http://www.pixastic.com/lib/license.txt]
24
+ */
25
+
26
+ var Pixastic = (function() {
27
+
28
+
29
+ function addEvent(el, event, handler) {
30
+ if (el.addEventListener)
31
+ el.addEventListener(event, handler, false);
32
+ else if (el.attachEvent)
33
+ el.attachEvent("on" + event, handler);
34
+ }
35
+
36
+ function onready(handler) {
37
+ var handlerDone = false;
38
+ var execHandler = function() {
39
+ if (!handlerDone) {
40
+ handlerDone = true;
41
+ handler();
42
+ }
43
+ }
44
+ document.write("<"+"script defer src=\"//:\" id=\"__onload_ie_pixastic__\"></"+"script>");
45
+ var script = document.getElementById("__onload_ie_pixastic__");
46
+ script.onreadystatechange = function() {
47
+ if (script.readyState == "complete") {
48
+ script.parentNode.removeChild(script);
49
+ execHandler();
50
+ }
51
+ }
52
+ if (document.addEventListener)
53
+ document.addEventListener("DOMContentLoaded", execHandler, false);
54
+ addEvent(window, "load", execHandler);
55
+ }
56
+
57
+ function init() {
58
+ var imgEls = getElementsByClass("pixastic", null, "img");
59
+ var canvasEls = getElementsByClass("pixastic", null, "canvas");
60
+ var elements = imgEls.concat(canvasEls);
61
+ for (var i=0;i<elements.length;i++) {
62
+ (function() {
63
+
64
+ var el = elements[i];
65
+ var actions = [];
66
+ var classes = el.className.split(" ");
67
+ for (var c=0;c<classes.length;c++) {
68
+ var cls = classes[c];
69
+ if (cls.substring(0,9) == "pixastic-") {
70
+ var actionName = cls.substring(9);
71
+ if (actionName != "")
72
+ actions.push(actionName);
73
+ }
74
+ }
75
+ if (actions.length) {
76
+ if (el.tagName.toLowerCase() == "img") {
77
+ var dataImg = new Image();
78
+ dataImg.src = el.src;
79
+ if (dataImg.complete) {
80
+ for (var a=0;a<actions.length;a++) {
81
+ var res = Pixastic.applyAction(el, el, actions[a], null);
82
+ if (res)
83
+ el = res;
84
+ }
85
+ } else {
86
+ dataImg.onload = function() {
87
+ for (var a=0;a<actions.length;a++) {
88
+ var res = Pixastic.applyAction(el, el, actions[a], null)
89
+ if (res)
90
+ el = res;
91
+ }
92
+ }
93
+ }
94
+ } else {
95
+ setTimeout(function() {
96
+ for (var a=0;a<actions.length;a++) {
97
+ var res = Pixastic.applyAction(
98
+ el, el, actions[a], null
99
+ );
100
+ if (res)
101
+ el = res;
102
+ }
103
+ },1);
104
+ }
105
+ }
106
+
107
+ })();
108
+ }
109
+ }
110
+
111
+ if (typeof pixastic_parseonload != "undefined" && pixastic_parseonload)
112
+ onready(init);
113
+
114
+ // getElementsByClass by Dustin Diaz, http://www.dustindiaz.com/getelementsbyclass/
115
+ function getElementsByClass(searchClass,node,tag) {
116
+ var classElements = new Array();
117
+ if ( node == null )
118
+ node = document;
119
+ if ( tag == null )
120
+ tag = '*';
121
+
122
+ var els = node.getElementsByTagName(tag);
123
+ var elsLen = els.length;
124
+ var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
125
+ for (i = 0, j = 0; i < elsLen; i++) {
126
+ if ( pattern.test(els[i].className) ) {
127
+ classElements[j] = els[i];
128
+ j++;
129
+ }
130
+ }
131
+ return classElements;
132
+ }
133
+
134
+ var debugElement;
135
+
136
+ function writeDebug(text, level) {
137
+ if (!Pixastic.debug) return;
138
+ try {
139
+ switch (level) {
140
+ case "warn" :
141
+ console.warn("Pixastic:", text);
142
+ break;
143
+ case "error" :
144
+ console.error("Pixastic:", text);
145
+ break;
146
+ default:
147
+ console.log("Pixastic:", text);
148
+ }
149
+ } catch(e) {
150
+ }
151
+ if (!debugElement) {
152
+
153
+ }
154
+ }
155
+
156
+ // canvas capability checks
157
+
158
+ var hasCanvas = (function() {
159
+ var c = document.createElement("canvas");
160
+ var val = false;
161
+ try {
162
+ val = !!((typeof c.getContext == "function") && c.getContext("2d"));
163
+ } catch(e) {}
164
+ return function() {
165
+ return val;
166
+ }
167
+ })();
168
+
169
+ var hasCanvasImageData = (function() {
170
+ var c = document.createElement("canvas");
171
+ var val = false;
172
+ var ctx;
173
+ try {
174
+ if (typeof c.getContext == "function" && (ctx = c.getContext("2d"))) {
175
+ val = (typeof ctx.getImageData == "function");
176
+ }
177
+ } catch(e) {}
178
+ return function() {
179
+ return val;
180
+ }
181
+ })();
182
+
183
+ var hasGlobalAlpha = (function() {
184
+ var hasAlpha = false;
185
+ var red = document.createElement("canvas");
186
+ if (hasCanvas() && hasCanvasImageData()) {
187
+ red.width = red.height = 1;
188
+ var redctx = red.getContext("2d");
189
+ redctx.fillStyle = "rgb(255,0,0)";
190
+ redctx.fillRect(0,0,1,1);
191
+
192
+ var blue = document.createElement("canvas");
193
+ blue.width = blue.height = 1;
194
+ var bluectx = blue.getContext("2d");
195
+ bluectx.fillStyle = "rgb(0,0,255)";
196
+ bluectx.fillRect(0,0,1,1);
197
+
198
+ redctx.globalAlpha = 0.5;
199
+ redctx.drawImage(blue, 0, 0);
200
+ var reddata = redctx.getImageData(0,0,1,1).data;
201
+
202
+ hasAlpha = (reddata[2] != 255);
203
+ }
204
+ return function() {
205
+ return hasAlpha;
206
+ }
207
+ })();
208
+
209
+
210
+ // return public interface
211
+
212
+ return {
213
+
214
+ parseOnLoad : false,
215
+
216
+ debug : false,
217
+
218
+ applyAction : function(img, dataImg, actionName, options) {
219
+
220
+ options = options || {};
221
+
222
+ var imageIsCanvas = (img.tagName.toLowerCase() == "canvas");
223
+ if (imageIsCanvas && Pixastic.Client.isIE()) {
224
+ if (Pixastic.debug) writeDebug("Tried to process a canvas element but browser is IE.");
225
+ return false;
226
+ }
227
+
228
+ var canvas, ctx;
229
+ var hasOutputCanvas = false;
230
+ if (Pixastic.Client.hasCanvas()) {
231
+ hasOutputCanvas = !!options.resultCanvas;
232
+ canvas = options.resultCanvas || document.createElement("canvas");
233
+ ctx = canvas.getContext("2d");
234
+ }
235
+
236
+ var w = img.offsetWidth;
237
+ var h = img.offsetHeight;
238
+
239
+ if (imageIsCanvas) {
240
+ w = img.width;
241
+ h = img.height;
242
+ }
243
+
244
+ // offsetWidth/Height might be 0 if the image is not in the document
245
+ if (w == 0 || h == 0) {
246
+ if (img.parentNode == null) {
247
+ // add the image to the doc (way out left), read its dimensions and remove it again
248
+ var oldpos = img.style.position;
249
+ var oldleft = img.style.left;
250
+ img.style.position = "absolute";
251
+ img.style.left = "-9999px";
252
+ document.body.appendChild(img);
253
+ w = img.offsetWidth;
254
+ h = img.offsetHeight;
255
+ document.body.removeChild(img);
256
+ img.style.position = oldpos;
257
+ img.style.left = oldleft;
258
+ } else {
259
+ if (Pixastic.debug) writeDebug("Image has 0 width and/or height.");
260
+ return;
261
+ }
262
+ }
263
+
264
+ if (actionName.indexOf("(") > -1) {
265
+ var tmp = actionName;
266
+ actionName = tmp.substr(0, tmp.indexOf("("));
267
+ var arg = tmp.match(/\((.*?)\)/);
268
+ if (arg[1]) {
269
+ arg = arg[1].split(";");
270
+ for (var a=0;a<arg.length;a++) {
271
+ thisArg = arg[a].split("=");
272
+ if (thisArg.length == 2) {
273
+ if (thisArg[0] == "rect") {
274
+ var rectVal = thisArg[1].split(",");
275
+ options[thisArg[0]] = {
276
+ left : parseInt(rectVal[0],10)||0,
277
+ top : parseInt(rectVal[1],10)||0,
278
+ width : parseInt(rectVal[2],10)||0,
279
+ height : parseInt(rectVal[3],10)||0
280
+ }
281
+ } else {
282
+ options[thisArg[0]] = thisArg[1];
283
+ }
284
+ }
285
+ }
286
+ }
287
+ }
288
+
289
+ if (!options.rect) {
290
+ options.rect = {
291
+ left : 0, top : 0, width : w, height : h
292
+ };
293
+ } else {
294
+ options.rect.left = Math.round(options.rect.left);
295
+ options.rect.top = Math.round(options.rect.top);
296
+ options.rect.width = Math.round(options.rect.width);
297
+ options.rect.height = Math.round(options.rect.height);
298
+ }
299
+
300
+ var validAction = false;
301
+ if (Pixastic.Actions[actionName] && typeof Pixastic.Actions[actionName].process == "function") {
302
+ validAction = true;
303
+ }
304
+ if (!validAction) {
305
+ if (Pixastic.debug) writeDebug("Invalid action \"" + actionName + "\". Maybe file not included?");
306
+ return false;
307
+ }
308
+ if (!Pixastic.Actions[actionName].checkSupport()) {
309
+ if (Pixastic.debug) writeDebug("Action \"" + actionName + "\" not supported by this browser.");
310
+ return false;
311
+ }
312
+
313
+ if (Pixastic.Client.hasCanvas()) {
314
+ if (canvas !== img) {
315
+ canvas.width = w;
316
+ canvas.height = h;
317
+ }
318
+ if (!hasOutputCanvas) {
319
+ canvas.style.width = w+"px";
320
+ canvas.style.height = h+"px";
321
+ }
322
+ ctx.drawImage(dataImg,0,0,w,h);
323
+
324
+ if (!img.__pixastic_org_image) {
325
+ canvas.__pixastic_org_image = img;
326
+ canvas.__pixastic_org_width = w;
327
+ canvas.__pixastic_org_height = h;
328
+ } else {
329
+ canvas.__pixastic_org_image = img.__pixastic_org_image;
330
+ canvas.__pixastic_org_width = img.__pixastic_org_width;
331
+ canvas.__pixastic_org_height = img.__pixastic_org_height;
332
+ }
333
+
334
+ } else if (Pixastic.Client.isIE() && typeof img.__pixastic_org_style == "undefined") {
335
+ img.__pixastic_org_style = img.style.cssText;
336
+ }
337
+
338
+ var params = {
339
+ image : img,
340
+ canvas : canvas,
341
+ width : w,
342
+ height : h,
343
+ useData : true,
344
+ options : options
345
+ }
346
+
347
+ // Ok, let's do it!
348
+
349
+ var res = Pixastic.Actions[actionName].process(params);
350
+
351
+ if (!res) {
352
+ return false;
353
+ }
354
+
355
+ if (Pixastic.Client.hasCanvas()) {
356
+ if (params.useData) {
357
+ if (Pixastic.Client.hasCanvasImageData()) {
358
+ canvas.getContext("2d").putImageData(params.canvasData, options.rect.left, options.rect.top);
359
+
360
+ // Opera doesn't seem to update the canvas until we draw something on it, lets draw a 0x0 rectangle.
361
+ // Is this still so?
362
+ canvas.getContext("2d").fillRect(0,0,0,0);
363
+ }
364
+ }
365
+
366
+ if (!options.leaveDOM) {
367
+ // copy properties and stuff from the source image
368
+ canvas.title = img.title;
369
+ canvas.imgsrc = img.imgsrc;
370
+ if (!imageIsCanvas) canvas.alt = img.alt;
371
+ if (!imageIsCanvas) canvas.imgsrc = img.src;
372
+ canvas.className = img.className;
373
+ canvas.style.cssText = img.style.cssText;
374
+ canvas.name = img.name;
375
+ canvas.tabIndex = img.tabIndex;
376
+ canvas.id = img.id;
377
+ if (img.parentNode && img.parentNode.replaceChild) {
378
+ img.parentNode.replaceChild(canvas, img);
379
+ }
380
+ }
381
+
382
+ options.resultCanvas = canvas;
383
+
384
+ return canvas;
385
+ }
386
+
387
+ return img;
388
+ },
389
+
390
+ prepareData : function(params, getCopy) {
391
+ var ctx = params.canvas.getContext("2d");
392
+ var rect = params.options.rect;
393
+ var dataDesc = ctx.getImageData(rect.left, rect.top, rect.width, rect.height);
394
+ var data = dataDesc.data;
395
+ if (!getCopy) params.canvasData = dataDesc;
396
+ return data;
397
+ },
398
+
399
+ // load the image file
400
+ process : function(img, actionName, options, callback) {
401
+ if (img.tagName.toLowerCase() == "img") {
402
+ var dataImg = new Image();
403
+ dataImg.src = img.src;
404
+ if (dataImg.complete) {
405
+ var res = Pixastic.applyAction(img, dataImg, actionName, options);
406
+ if (callback) callback(res);
407
+ return res;
408
+ } else {
409
+ dataImg.onload = function() {
410
+ var res = Pixastic.applyAction(img, dataImg, actionName, options)
411
+ if (callback) callback(res);
412
+ }
413
+ }
414
+ }
415
+ if (img.tagName.toLowerCase() == "canvas") {
416
+ var res = Pixastic.applyAction(img, img, actionName, options);
417
+ if (callback) callback(res);
418
+ return res;
419
+ }
420
+ },
421
+
422
+ revert : function(img) {
423
+ if (Pixastic.Client.hasCanvas()) {
424
+ if (img.tagName.toLowerCase() == "canvas" && img.__pixastic_org_image) {
425
+ img.width = img.__pixastic_org_width;
426
+ img.height = img.__pixastic_org_height;
427
+ img.getContext("2d").drawImage(img.__pixastic_org_image, 0, 0);
428
+
429
+ if (img.parentNode && img.parentNode.replaceChild) {
430
+ img.parentNode.replaceChild(img.__pixastic_org_image, img);
431
+ }
432
+
433
+ return img;
434
+ }
435
+ } else if (Pixastic.Client.isIE()) {
436
+ if (typeof img.__pixastic_org_style != "undefined")
437
+ img.style.cssText = img.__pixastic_org_style;
438
+ }
439
+ },
440
+
441
+ Client : {
442
+ hasCanvas : hasCanvas,
443
+ hasCanvasImageData : hasCanvasImageData,
444
+ hasGlobalAlpha : hasGlobalAlpha,
445
+ isIE : function() {
446
+ return !!document.all && !!window.attachEvent && !window.opera;
447
+ }
448
+ },
449
+
450
+ Actions : {}
451
+ }
452
+
453
+
454
+ })();
455
+ /*
456
+ * Pixastic Lib - jQuery plugin
457
+ * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
458
+ * License: [http://www.pixastic.com/lib/license.txt]
459
+ */
460
+
461
+ if (typeof jQuery != "undefined" && jQuery && jQuery.fn) {
462
+ jQuery.fn.pixastic = function(action, options) {
463
+ var newElements = [];
464
+ this.each(
465
+ function () {
466
+ if (this.tagName.toLowerCase() == "img" && !this.complete) {
467
+ return;
468
+ }
469
+ var res = Pixastic.process(this, action, options);
470
+ if (res) {
471
+ newElements.push(res);
472
+ }
473
+ }
474
+ );
475
+ if (newElements.length > 0)
476
+ return jQuery(newElements);
477
+ else
478
+ return this;
479
+ };
480
+
481
+ };
482
+ /*
483
+ * Pixastic Lib - Blend - v0.1.1
484
+ * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
485
+ * License: [http://www.pixastic.com/lib/license.txt]
486
+ */
487
+
488
+ Pixastic.Actions.blend = {
489
+
490
+ process : function(params) {
491
+ var amount = parseFloat(params.options.amount);
492
+ var mode = (params.options.mode || "normal").toLowerCase();
493
+ var image = params.options.image;
494
+
495
+ amount = Math.max(0,Math.min(1,amount));
496
+
497
+ if (!image) return false;
498
+
499
+ if (Pixastic.Client.hasCanvasImageData()) {
500
+
501
+ var rect = params.options.rect;
502
+ var data = Pixastic.prepareData(params);
503
+ var w = rect.width;
504
+ var h = rect.height;
505
+
506
+ params.useData = false;
507
+
508
+ var otherCanvas = document.createElement("canvas");
509
+ otherCanvas.width = params.canvas.width;
510
+ otherCanvas.height = params.canvas.height;
511
+ var otherCtx = otherCanvas.getContext("2d");
512
+ otherCtx.drawImage(image,0,0);
513
+
514
+ var params2 = {canvas:otherCanvas,options:params.options};
515
+ var data2 = Pixastic.prepareData(params2);
516
+ var dataDesc2 = params2.canvasData;
517
+
518
+ var p = w*h;
519
+ var pix = p*4;
520
+ var pix1, pix2;
521
+ var r1, g1, b1;
522
+ var r2, g2, b2;
523
+ var r3, g3, b3;
524
+ var r4, g4, b4;
525
+
526
+ var dataChanged = false;
527
+
528
+ switch (mode) {
529
+ case "normal" :
530
+ //while (p--) {
531
+ // data2[pix-=4] = data2[pix];
532
+ // data2[pix1=pix+1] = data2[pix1];
533
+ // data2[pix2=pix+2] = data2[pix2];
534
+ //}
535
+ break;
536
+
537
+ case "multiply" :
538
+ while (p--) {
539
+ data2[pix-=4] = data[pix] * data2[pix] / 255;
540
+ data2[pix1=pix+1] = data[pix1] * data2[pix1] / 255;
541
+ data2[pix2=pix+2] = data[pix2] * data2[pix2] / 255;
542
+ }
543
+ dataChanged = true;
544
+ break;
545
+
546
+ case "lighten" :
547
+ while (p--) {
548
+ if ((r1 = data[pix-=4]) > data2[pix])
549
+ data2[pix] = r1;
550
+ if ((g1 = data[pix1=pix+1]) > data2[pix1])
551
+ data2[pix1] = g1;
552
+ if ((b1 = data[pix2=pix+2]) > data2[pix2])
553
+ data2[pix2] = b1;
554
+ }
555
+ dataChanged = true;
556
+ break;
557
+
558
+ case "darken" :
559
+ while (p--) {
560
+ if ((r1 = data[pix-=4]) < data2[pix])
561
+ data2[pix] = r1;
562
+ if ((g1 = data[pix1=pix+1]) < data2[pix1])
563
+ data2[pix1] = g1;
564
+ if ((b1 = data[pix2=pix+2]) < data2[pix2])
565
+ data2[pix2] = b1;
566
+
567
+ }
568
+ dataChanged = true;
569
+ break;
570
+
571
+ case "darkercolor" :
572
+ while (p--) {
573
+ if (((r1 = data[pix-=4])*0.3+(g1 = data[pix1=pix+1])*0.59+(b1 = data[pix2=pix+2])*0.11) <= (data2[pix]*0.3+data2[pix1]*0.59+data2[pix2]*0.11)) {
574
+ data2[pix] = r1;
575
+ data2[pix1] = g1;
576
+ data2[pix2] = b1;
577
+ }
578
+ }
579
+ dataChanged = true;
580
+ break;
581
+
582
+ case "lightercolor" :
583
+ while (p--) {
584
+ if (((r1 = data[pix-=4])*0.3+(g1 = data[pix1=pix+1])*0.59+(b1 = data[pix2=pix+2])*0.11) > (data2[pix]*0.3+data2[pix1]*0.59+data2[pix2]*0.11)) {
585
+ data2[pix] = r1;
586
+ data2[pix1] = g1;
587
+ data2[pix2] = b1;
588
+ }
589
+ }
590
+ dataChanged = true;
591
+ break;
592
+
593
+ case "lineardodge" :
594
+ /*
595
+ otherCtx.globalCompositeOperation = "source-over";
596
+ otherCtx.drawImage(params.canvas, 0, 0);
597
+ otherCtx.globalCompositeOperation = "lighter";
598
+ otherCtx.drawImage(image, 0, 0);
599
+ */
600
+
601
+ while (p--) {
602
+ if ((r3 = data[pix-=4] + data2[pix]) > 255)
603
+ data2[pix] = 255;
604
+ else
605
+ data2[pix] = r3;
606
+ if ((g3 = data[pix1=pix+1] + data2[pix1]) > 255)
607
+ data2[pix1] = 255;
608
+ else
609
+ data2[pix1] = g3;
610
+ if ((b3 = data[pix2=pix+2] + data2[pix2]) > 255)
611
+ data2[pix2] = 255;
612
+ else
613
+ data2[pix2] = b3;
614
+ }
615
+ dataChanged = true;
616
+
617
+ break;
618
+
619
+ case "linearburn" :
620
+ while (p--) {
621
+ if ((r3 = data[pix-=4] + data2[pix]) < 255)
622
+ data2[pix] = 0;
623
+ else
624
+ data2[pix] = (r3 - 255);
625
+ if ((g3 = data[pix1=pix+1] + data2[pix1]) < 255)
626
+ data2[pix1] = 0;
627
+ else
628
+ data2[pix1] = (g3 - 255);
629
+ if ((b3 = data[pix2=pix+2] + data2[pix2]) < 255)
630
+ data2[pix2] = 0;
631
+ else
632
+ data2[pix2] = (b3 - 255);
633
+ }
634
+ dataChanged = true;
635
+ break;
636
+
637
+ case "difference" :
638
+ while (p--) {
639
+ if ((r3 = data[pix-=4] - data2[pix]) < 0)
640
+ data2[pix] = -r3;
641
+ else
642
+ data2[pix] = r3;
643
+ if ((g3 = data[pix1=pix+1] - data2[pix1]) < 0)
644
+ data2[pix1] = -g3;
645
+ else
646
+ data2[pix1] = g3;
647
+ if ((b3 = data[pix2=pix+2] - data2[pix2]) < 0)
648
+ data2[pix2] = -b3;
649
+ else
650
+ data2[pix2] = b3;
651
+ }
652
+ dataChanged = true;
653
+ break;
654
+
655
+ case "screen" :
656
+ while (p--) {
657
+ data2[pix-=4] = (255 - ( ((255-data2[pix])*(255-data[pix])) >> 8));
658
+ data2[pix1=pix+1] = (255 - ( ((255-data2[pix1])*(255-data[pix1])) >> 8));
659
+ data2[pix2=pix+2] = (255 - ( ((255-data2[pix2])*(255-data[pix2])) >> 8));
660
+ }
661
+ dataChanged = true;
662
+ break;
663
+
664
+ case "exclusion" :
665
+ var div_2_255 = 2 / 255;
666
+ while (p--) {
667
+ data2[pix-=4] = (r1 = data[pix]) - (r1 * div_2_255 - 1) * data2[pix];
668
+ data2[pix1=pix+1] = (g1 = data[pix1]) - (g1 * div_2_255 - 1) * data2[pix1];
669
+ data2[pix2=pix+2] = (b1 = data[pix2]) - (b1 * div_2_255 - 1) * data2[pix2];
670
+ }
671
+ dataChanged = true;
672
+ break;
673
+
674
+ case "overlay" :
675
+ var div_2_255 = 2 / 255;
676
+ while (p--) {
677
+ if ((r1 = data[pix-=4]) < 128)
678
+ data2[pix] = data2[pix]*r1*div_2_255;
679
+ else
680
+ data2[pix] = 255 - (255-data2[pix])*(255-r1)*div_2_255;
681
+
682
+ if ((g1 = data[pix1=pix+1]) < 128)
683
+ data2[pix1] = data2[pix1]*g1*div_2_255;
684
+ else
685
+ data2[pix1] = 255 - (255-data2[pix1])*(255-g1)*div_2_255;
686
+
687
+ if ((b1 = data[pix2=pix+2]) < 128)
688
+ data2[pix2] = data2[pix2]*b1*div_2_255;
689
+ else
690
+ data2[pix2] = 255 - (255-data2[pix2])*(255-b1)*div_2_255;
691
+
692
+ }
693
+ dataChanged = true;
694
+ break;
695
+
696
+ case "softlight" :
697
+ var div_2_255 = 2 / 255;
698
+ while (p--) {
699
+ if ((r1 = data[pix-=4]) < 128)
700
+ data2[pix] = ((data2[pix]>>1) + 64) * r1 * div_2_255;
701
+ else
702
+ data2[pix] = 255 - (191 - (data2[pix]>>1)) * (255-r1) * div_2_255;
703
+
704
+ if ((g1 = data[pix1=pix+1]) < 128)
705
+ data2[pix1] = ((data2[pix1]>>1)+64) * g1 * div_2_255;
706
+ else
707
+ data2[pix1] = 255 - (191 - (data2[pix1]>>1)) * (255-g1) * div_2_255;
708
+
709
+ if ((b1 = data[pix2=pix+2]) < 128)
710
+ data2[pix2] = ((data2[pix2]>>1)+64) * b1 * div_2_255;
711
+ else
712
+ data2[pix2] = 255 - (191 - (data2[pix2]>>1)) * (255-b1) * div_2_255;
713
+
714
+ }
715
+ dataChanged = true;
716
+ break;
717
+
718
+ case "hardlight" :
719
+ var div_2_255 = 2 / 255;
720
+ while (p--) {
721
+ if ((r2 = data2[pix-=4]) < 128)
722
+ data2[pix] = data[pix] * r2 * div_2_255;
723
+ else
724
+ data2[pix] = 255 - (255-data[pix]) * (255-r2) * div_2_255;
725
+
726
+ if ((g2 = data2[pix1=pix+1]) < 128)
727
+ data2[pix1] = data[pix1] * g2 * div_2_255;
728
+ else
729
+ data2[pix1] = 255 - (255-data[pix1]) * (255-g2) * div_2_255;
730
+
731
+ if ((b2 = data2[pix2=pix+2]) < 128)
732
+ data2[pix2] = data[pix2] * b2 * div_2_255;
733
+ else
734
+ data2[pix2] = 255 - (255-data[pix2]) * (255-b2) * div_2_255;
735
+
736
+ }
737
+ dataChanged = true;
738
+ break;
739
+
740
+ case "colordodge" :
741
+ while (p--) {
742
+ if ((r3 = (data[pix-=4]<<8)/(255-(r2 = data2[pix]))) > 255 || r2 == 255)
743
+ data2[pix] = 255;
744
+ else
745
+ data2[pix] = r3;
746
+
747
+ if ((g3 = (data[pix1=pix+1]<<8)/(255-(g2 = data2[pix1]))) > 255 || g2 == 255)
748
+ data2[pix1] = 255;
749
+ else
750
+ data2[pix1] = g3;
751
+
752
+ if ((b3 = (data[pix2=pix+2]<<8)/(255-(b2 = data2[pix2]))) > 255 || b2 == 255)
753
+ data2[pix2] = 255;
754
+ else
755
+ data2[pix2] = b3;
756
+ }
757
+ dataChanged = true;
758
+ break;
759
+
760
+ case "colorburn" :
761
+ while (p--) {
762
+ if ((r3 = 255-((255-data[pix-=4])<<8)/data2[pix]) < 0 || data2[pix] == 0)
763
+ data2[pix] = 0;
764
+ else
765
+ data2[pix] = r3;
766
+
767
+ if ((g3 = 255-((255-data[pix1=pix+1])<<8)/data2[pix1]) < 0 || data2[pix1] == 0)
768
+ data2[pix1] = 0;
769
+ else
770
+ data2[pix1] = g3;
771
+
772
+ if ((b3 = 255-((255-data[pix2=pix+2])<<8)/data2[pix2]) < 0 || data2[pix2] == 0)
773
+ data2[pix2] = 0;
774
+ else
775
+ data2[pix2] = b3;
776
+ }
777
+ dataChanged = true;
778
+ break;
779
+
780
+ case "linearlight" :
781
+ while (p--) {
782
+ if ( ((r3 = 2*(r2=data2[pix-=4])+data[pix]-256) < 0) || (r2 < 128 && r3 < 0)) {
783
+ data2[pix] = 0
784
+ } else {
785
+ if (r3 > 255)
786
+ data2[pix] = 255;
787
+ else
788
+ data2[pix] = r3;
789
+ }
790
+ if ( ((g3 = 2*(g2=data2[pix1=pix+1])+data[pix1]-256) < 0) || (g2 < 128 && g3 < 0)) {
791
+ data2[pix1] = 0
792
+ } else {
793
+ if (g3 > 255)
794
+ data2[pix1] = 255;
795
+ else
796
+ data2[pix1] = g3;
797
+ }
798
+ if ( ((b3 = 2*(b2=data2[pix2=pix+2])+data[pix2]-256) < 0) || (b2 < 128 && b3 < 0)) {
799
+ data2[pix2] = 0
800
+ } else {
801
+ if (b3 > 255)
802
+ data2[pix2] = 255;
803
+ else
804
+ data2[pix2] = b3;
805
+ }
806
+ }
807
+ dataChanged = true;
808
+ break;
809
+
810
+ case "vividlight" :
811
+ while (p--) {
812
+ if ((r2=data2[pix-=4]) < 128) {
813
+ if (r2) {
814
+ if ((r3 = 255 - ((255-data[pix])<<8) / (2*r2)) < 0)
815
+ data2[pix] = 0;
816
+ else
817
+ data2[pix] = r3
818
+ } else {
819
+ data2[pix] = 0;
820
+ }
821
+ } else if ((r3 = (r4=2*r2-256)) < 255) {
822
+ if ((r3 = (data[pix]<<8)/(255-r4)) > 255)
823
+ data2[pix] = 255;
824
+ else
825
+ data2[pix] = r3;
826
+ } else {
827
+ if (r3 < 0)
828
+ data2[pix] = 0;
829
+ else
830
+ data2[pix] = r3
831
+ }
832
+
833
+ if ((g2=data2[pix1=pix+1]) < 128) {
834
+ if (g2) {
835
+ if ((g3 = 255 - ((255-data[pix1])<<8) / (2*g2)) < 0)
836
+ data2[pix1] = 0;
837
+ else
838
+ data2[pix1] = g3;
839
+ } else {
840
+ data2[pix1] = 0;
841
+ }
842
+ } else if ((g3 = (g4=2*g2-256)) < 255) {
843
+ if ((g3 = (data[pix1]<<8)/(255-g4)) > 255)
844
+ data2[pix1] = 255;
845
+ else
846
+ data2[pix1] = g3;
847
+ } else {
848
+ if (g3 < 0)
849
+ data2[pix1] = 0;
850
+ else
851
+ data2[pix1] = g3;
852
+ }
853
+
854
+ if ((b2=data2[pix2=pix+2]) < 128) {
855
+ if (b2) {
856
+ if ((b3 = 255 - ((255-data[pix2])<<8) / (2*b2)) < 0)
857
+ data2[pix2] = 0;
858
+ else
859
+ data2[pix2] = b3;
860
+ } else {
861
+ data2[pix2] = 0;
862
+ }
863
+ } else if ((b3 = (b4=2*b2-256)) < 255) {
864
+ if ((b3 = (data[pix2]<<8)/(255-b4)) > 255)
865
+ data2[pix2] = 255;
866
+ else
867
+ data2[pix2] = b3;
868
+ } else {
869
+ if (b3 < 0)
870
+ data2[pix2] = 0;
871
+ else
872
+ data2[pix2] = b3;
873
+ }
874
+ }
875
+ dataChanged = true;
876
+ break;
877
+
878
+ case "pinlight" :
879
+ while (p--) {
880
+ if ((r2=data2[pix-=4]) < 128)
881
+ if ((r1=data[pix]) < (r4=2*r2))
882
+ data2[pix] = r1;
883
+ else
884
+ data2[pix] = r4;
885
+ else
886
+ if ((r1=data[pix]) > (r4=2*r2-256))
887
+ data2[pix] = r1;
888
+ else
889
+ data2[pix] = r4;
890
+
891
+ if ((g2=data2[pix1=pix+1]) < 128)
892
+ if ((g1=data[pix1]) < (g4=2*g2))
893
+ data2[pix1] = g1;
894
+ else
895
+ data2[pix1] = g4;
896
+ else
897
+ if ((g1=data[pix1]) > (g4=2*g2-256))
898
+ data2[pix1] = g1;
899
+ else
900
+ data2[pix1] = g4;
901
+
902
+ if ((r2=data2[pix2=pix+2]) < 128)
903
+ if ((r1=data[pix2]) < (r4=2*r2))
904
+ data2[pix2] = r1;
905
+ else
906
+ data2[pix2] = r4;
907
+ else
908
+ if ((r1=data[pix2]) > (r4=2*r2-256))
909
+ data2[pix2] = r1;
910
+ else
911
+ data2[pix2] = r4;
912
+ }
913
+ dataChanged = true;
914
+ break;
915
+
916
+ case "hardmix" :
917
+ while (p--) {
918
+ if ((r2 = data2[pix-=4]) < 128)
919
+ if (255 - ((255-data[pix])<<8)/(2*r2) < 128 || r2 == 0)
920
+ data2[pix] = 0;
921
+ else
922
+ data2[pix] = 255;
923
+ else if ((r4=2*r2-256) < 255 && (data[pix]<<8)/(255-r4) < 128)
924
+ data2[pix] = 0;
925
+ else
926
+ data2[pix] = 255;
927
+
928
+ if ((g2 = data2[pix1=pix+1]) < 128)
929
+ if (255 - ((255-data[pix1])<<8)/(2*g2) < 128 || g2 == 0)
930
+ data2[pix1] = 0;
931
+ else
932
+ data2[pix1] = 255;
933
+ else if ((g4=2*g2-256) < 255 && (data[pix1]<<8)/(255-g4) < 128)
934
+ data2[pix1] = 0;
935
+ else
936
+ data2[pix1] = 255;
937
+
938
+ if ((b2 = data2[pix2=pix+2]) < 128)
939
+ if (255 - ((255-data[pix2])<<8)/(2*b2) < 128 || b2 == 0)
940
+ data2[pix2] = 0;
941
+ else
942
+ data2[pix2] = 255;
943
+ else if ((b4=2*b2-256) < 255 && (data[pix2]<<8)/(255-b4) < 128)
944
+ data2[pix2] = 0;
945
+ else
946
+ data2[pix2] = 255;
947
+ }
948
+ dataChanged = true;
949
+ break;
950
+ }
951
+
952
+ if (dataChanged)
953
+ otherCtx.putImageData(dataDesc2,0,0);
954
+
955
+ if (amount != 1 && !Pixastic.Client.hasGlobalAlpha()) {
956
+ var p = w*h;
957
+ var amount2 = amount;
958
+ var amount1 = 1 - amount;
959
+ while (p--) {
960
+ var pix = p*4;
961
+ var r = (data[pix] * amount1 + data2[pix] * amount2)>>0;
962
+ var g = (data[pix+1] * amount1 + data2[pix+1] * amount2)>>0;
963
+ var b = (data[pix+2] * amount1 + data2[pix+2] * amount2)>>0;
964
+
965
+ data[pix] = r;
966
+ data[pix+1] = g;
967
+ data[pix+2] = b;
968
+ }
969
+ params.useData = true;
970
+ } else {
971
+ var ctx = params.canvas.getContext("2d");
972
+ ctx.save();
973
+ ctx.globalAlpha = amount;
974
+ ctx.drawImage(
975
+ otherCanvas,
976
+ 0,0,rect.width,rect.height,
977
+ rect.left,rect.top,rect.width,rect.height
978
+ );
979
+ ctx.globalAlpha = 1;
980
+ ctx.restore();
981
+ }
982
+
983
+ return true;
984
+ }
985
+ },
986
+ checkSupport : function() {
987
+ return Pixastic.Client.hasCanvasImageData();
988
+ }
989
+ }/*
990
+ * Pixastic Lib - Blur filter - v0.1.0
991
+ * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
992
+ * License: [http://www.pixastic.com/lib/license.txt]
993
+ */
994
+
995
+ Pixastic.Actions.blur = {
996
+ process : function(params) {
997
+
998
+ if (typeof params.options.fixMargin == "undefined")
999
+ params.options.fixMargin = true;
1000
+
1001
+ if (Pixastic.Client.hasCanvasImageData()) {
1002
+ var data = Pixastic.prepareData(params);
1003
+ var dataCopy = Pixastic.prepareData(params, true)
1004
+
1005
+ /*
1006
+ var kernel = [
1007
+ [0.5, 1, 0.5],
1008
+ [1, 2, 1],
1009
+ [0.5, 1, 0.5]
1010
+ ];
1011
+ */
1012
+
1013
+ var kernel = [
1014
+ [0, 1, 0],
1015
+ [1, 2, 1],
1016
+ [0, 1, 0]
1017
+ ];
1018
+
1019
+ var weight = 0;
1020
+ for (var i=0;i<3;i++) {
1021
+ for (var j=0;j<3;j++) {
1022
+ weight += kernel[i][j];
1023
+ }
1024
+ }
1025
+
1026
+ weight = 1 / (weight*2);
1027
+
1028
+ var rect = params.options.rect;
1029
+ var w = rect.width;
1030
+ var h = rect.height;
1031
+
1032
+ var w4 = w*4;
1033
+ var y = h;
1034
+ do {
1035
+ var offsetY = (y-1)*w4;
1036
+
1037
+ var prevY = (y == 1) ? 0 : y-2;
1038
+ var nextY = (y == h) ? y - 1 : y;
1039
+
1040
+ var offsetYPrev = prevY*w*4;
1041
+ var offsetYNext = nextY*w*4;
1042
+
1043
+ var x = w;
1044
+ do {
1045
+ var offset = offsetY + (x*4-4);
1046
+
1047
+ var offsetPrev = offsetYPrev + ((x == 1) ? 0 : x-2) * 4;
1048
+ var offsetNext = offsetYNext + ((x == w) ? x-1 : x) * 4;
1049
+
1050
+ data[offset] = (
1051
+ /*
1052
+ dataCopy[offsetPrev - 4]
1053
+ + dataCopy[offsetPrev+4]
1054
+ + dataCopy[offsetNext - 4]
1055
+ + dataCopy[offsetNext+4]
1056
+ +
1057
+ */
1058
+ (dataCopy[offsetPrev]
1059
+ + dataCopy[offset-4]
1060
+ + dataCopy[offset+4]
1061
+ + dataCopy[offsetNext]) * 2
1062
+ + dataCopy[offset] * 4
1063
+ ) * weight;
1064
+
1065
+ data[offset+1] = (
1066
+ /*
1067
+ dataCopy[offsetPrev - 3]
1068
+ + dataCopy[offsetPrev+5]
1069
+ + dataCopy[offsetNext - 3]
1070
+ + dataCopy[offsetNext+5]
1071
+ +
1072
+ */
1073
+ (dataCopy[offsetPrev+1]
1074
+ + dataCopy[offset-3]
1075
+ + dataCopy[offset+5]
1076
+ + dataCopy[offsetNext+1]) * 2
1077
+ + dataCopy[offset+1] * 4
1078
+ ) * weight;
1079
+
1080
+ data[offset+2] = (
1081
+ /*
1082
+ dataCopy[offsetPrev - 2]
1083
+ + dataCopy[offsetPrev+6]
1084
+ + dataCopy[offsetNext - 2]
1085
+ + dataCopy[offsetNext+6]
1086
+ +
1087
+ */
1088
+ (dataCopy[offsetPrev+2]
1089
+ + dataCopy[offset-2]
1090
+ + dataCopy[offset+6]
1091
+ + dataCopy[offsetNext+2]) * 2
1092
+ + dataCopy[offset+2] * 4
1093
+ ) * weight;
1094
+
1095
+ } while (--x);
1096
+ } while (--y);
1097
+
1098
+ return true;
1099
+
1100
+ } else if (Pixastic.Client.isIE()) {
1101
+ params.image.style.filter += " progid:DXImageTransform.Microsoft.Blur(pixelradius=1.5)";
1102
+
1103
+ if (params.options.fixMargin) {
1104
+ params.image.style.marginLeft = (parseInt(params.image.style.marginLeft,10)||0) - 2 + "px";
1105
+ params.image.style.marginTop = (parseInt(params.image.style.marginTop,10)||0) - 2 + "px";
1106
+ }
1107
+
1108
+ return true;
1109
+ }
1110
+ },
1111
+ checkSupport : function() {
1112
+ return (Pixastic.Client.hasCanvasImageData() || Pixastic.Client.isIE());
1113
+ }
1114
+ }/*
1115
+ * Pixastic Lib - Blur Fast - v0.1.1
1116
+ * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
1117
+ * License: [http://www.pixastic.com/lib/license.txt]
1118
+ */
1119
+
1120
+ Pixastic.Actions.blurfast = {
1121
+ process : function(params) {
1122
+
1123
+ var amount = parseFloat(params.options.amount)||0;
1124
+ var clear = !!(params.options.clear && params.options.clear != "false");
1125
+
1126
+ amount = Math.max(0,Math.min(5,amount));
1127
+
1128
+ if (Pixastic.Client.hasCanvas()) {
1129
+ var rect = params.options.rect;
1130
+
1131
+ var ctx = params.canvas.getContext("2d");
1132
+ ctx.save();
1133
+ ctx.beginPath();
1134
+ ctx.rect(rect.left, rect.top, rect.width, rect.height);
1135
+ ctx.clip();
1136
+
1137
+ var scale = 2;
1138
+ var smallWidth = Math.round(params.width / scale);
1139
+ var smallHeight = Math.round(params.height / scale);
1140
+
1141
+ var copy = document.createElement("canvas");
1142
+ copy.width = smallWidth;
1143
+ copy.height = smallHeight;
1144
+
1145
+ var clear = false;
1146
+ var steps = Math.round(amount * 20);
1147
+
1148
+ var copyCtx = copy.getContext("2d");
1149
+ for (var i=0;i<steps;i++) {
1150
+ var scaledWidth = Math.max(1,Math.round(smallWidth - i));
1151
+ var scaledHeight = Math.max(1,Math.round(smallHeight - i));
1152
+
1153
+ copyCtx.clearRect(0,0,smallWidth,smallHeight);
1154
+
1155
+ copyCtx.drawImage(
1156
+ params.canvas,
1157
+ 0,0,params.width,params.height,
1158
+ 0,0,scaledWidth,scaledHeight
1159
+ );
1160
+
1161
+ if (clear)
1162
+ ctx.clearRect(rect.left,rect.top,rect.width,rect.height);
1163
+
1164
+ ctx.drawImage(
1165
+ copy,
1166
+ 0,0,scaledWidth,scaledHeight,
1167
+ 0,0,params.width,params.height
1168
+ );
1169
+ }
1170
+
1171
+ ctx.restore();
1172
+
1173
+ params.useData = false;
1174
+ return true;
1175
+ } else if (Pixastic.Client.isIE()) {
1176
+ var radius = 10 * amount;
1177
+ params.image.style.filter += " progid:DXImageTransform.Microsoft.Blur(pixelradius=" + radius + ")";
1178
+
1179
+ if (params.options.fixMargin || 1) {
1180
+ params.image.style.marginLeft = (parseInt(params.image.style.marginLeft,10)||0) - Math.round(radius) + "px";
1181
+ params.image.style.marginTop = (parseInt(params.image.style.marginTop,10)||0) - Math.round(radius) + "px";
1182
+ }
1183
+
1184
+ return true;
1185
+ }
1186
+ },
1187
+ checkSupport : function() {
1188
+ return (Pixastic.Client.hasCanvas() || Pixastic.Client.isIE());
1189
+ }
1190
+ }
1191
+ /*
1192
+ * Pixastic Lib - Brightness/Contrast filter - v0.1.1
1193
+ * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
1194
+ * License: [http://www.pixastic.com/lib/license.txt]
1195
+ */
1196
+
1197
+ Pixastic.Actions.brightness = {
1198
+
1199
+ process : function(params) {
1200
+
1201
+ var brightness = parseInt(params.options.brightness,10) || 0;
1202
+ var contrast = parseFloat(params.options.contrast)||0;
1203
+ var legacy = !!(params.options.legacy && params.options.legacy != "false");
1204
+
1205
+ if (legacy) {
1206
+ brightness = Math.min(150,Math.max(-150,brightness));
1207
+ } else {
1208
+ var brightMul = 1 + Math.min(150,Math.max(-150,brightness)) / 150;
1209
+ }
1210
+ contrast = Math.max(0,contrast+1);
1211
+
1212
+ if (Pixastic.Client.hasCanvasImageData()) {
1213
+ var data = Pixastic.prepareData(params);
1214
+ var rect = params.options.rect;
1215
+ var w = rect.width;
1216
+ var h = rect.height;
1217
+
1218
+ var p = w*h;
1219
+ var pix = p*4, pix1, pix2;
1220
+
1221
+ var mul, add;
1222
+ if (contrast != 1) {
1223
+ if (legacy) {
1224
+ mul = contrast;
1225
+ add = (brightness - 128) * contrast + 128;
1226
+ } else {
1227
+ mul = brightMul * contrast;
1228
+ add = - contrast * 128 + 128;
1229
+ }
1230
+ } else { // this if-then is not necessary anymore, is it?
1231
+ if (legacy) {
1232
+ mul = 1;
1233
+ add = brightness;
1234
+ } else {
1235
+ mul = brightMul;
1236
+ add = 0;
1237
+ }
1238
+ }
1239
+ var r, g, b;
1240
+ while (p--) {
1241
+ if ((r = data[pix-=4] * mul + add) > 255 )
1242
+ data[pix] = 255;
1243
+ else if (r < 0)
1244
+ data[pix] = 0;
1245
+ else
1246
+ data[pix] = r;
1247
+
1248
+ if ((g = data[pix1=pix+1] * mul + add) > 255 )
1249
+ data[pix1] = 255;
1250
+ else if (g < 0)
1251
+ data[pix1] = 0;
1252
+ else
1253
+ data[pix1] = g;
1254
+
1255
+ if ((b = data[pix2=pix+2] * mul + add) > 255 )
1256
+ data[pix2] = 255;
1257
+ else if (b < 0)
1258
+ data[pix2] = 0;
1259
+ else
1260
+ data[pix2] = b;
1261
+ }
1262
+ return true;
1263
+ }
1264
+ },
1265
+ checkSupport : function() {
1266
+ return Pixastic.Client.hasCanvasImageData();
1267
+ }
1268
+ }
1269
+
1270
+ /*
1271
+ * Pixastic Lib - Color adjust filter - v0.1.1
1272
+ * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
1273
+ * License: [http://www.pixastic.com/lib/license.txt]
1274
+ */
1275
+
1276
+ Pixastic.Actions.coloradjust = {
1277
+
1278
+ process : function(params) {
1279
+ var red = parseFloat(params.options.red) || 0;
1280
+ var green = parseFloat(params.options.green) || 0;
1281
+ var blue = parseFloat(params.options.blue) || 0;
1282
+
1283
+ red = Math.round(red*255);
1284
+ green = Math.round(green*255);
1285
+ blue = Math.round(blue*255);
1286
+
1287
+ if (Pixastic.Client.hasCanvasImageData()) {
1288
+ var data = Pixastic.prepareData(params);
1289
+ var rect = params.options.rect;
1290
+
1291
+ var p = rect.width*rect.height;
1292
+ var pix = p*4, pix1, pix2;
1293
+
1294
+ var r, g, b;
1295
+ while (p--) {
1296
+ pix -= 4;
1297
+
1298
+ if (red) {
1299
+ if ((r = data[pix] + red) < 0 )
1300
+ data[pix] = 0;
1301
+ else if (r > 255 )
1302
+ data[pix] = 255;
1303
+ else
1304
+ data[pix] = r;
1305
+ }
1306
+
1307
+ if (green) {
1308
+ if ((g = data[pix1=pix+1] + green) < 0 )
1309
+ data[pix1] = 0;
1310
+ else if (g > 255 )
1311
+ data[pix1] = 255;
1312
+ else
1313
+ data[pix1] = g;
1314
+ }
1315
+
1316
+ if (blue) {
1317
+ if ((b = data[pix2=pix+2] + blue) < 0 )
1318
+ data[pix2] = 0;
1319
+ else if (b > 255 )
1320
+ data[pix2] = 255;
1321
+ else
1322
+ data[pix2] = b;
1323
+ }
1324
+ }
1325
+ return true;
1326
+ }
1327
+ },
1328
+ checkSupport : function() {
1329
+ return (Pixastic.Client.hasCanvasImageData());
1330
+ }
1331
+ }
1332
+ /*
1333
+ * Pixastic Lib - Histogram - v0.1.0
1334
+ * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
1335
+ * License: [http://www.pixastic.com/lib/license.txt]
1336
+ */
1337
+
1338
+
1339
+ Pixastic.Actions.colorhistogram = {
1340
+
1341
+ array256 : function(default_value) {
1342
+ arr = [];
1343
+ for (var i=0; i<256; i++) { arr[i] = default_value; }
1344
+ return arr
1345
+ },
1346
+
1347
+ process : function(params) {
1348
+ var values = [];
1349
+ if (typeof params.options.returnValue != "object") {
1350
+ params.options.returnValue = {rvals:[], gvals:[], bvals:[]};
1351
+ }
1352
+ var paint = !!(params.options.paint);
1353
+
1354
+ var returnValue = params.options.returnValue;
1355
+ if (typeof returnValue.values != "array") {
1356
+ returnValue.rvals = [];
1357
+ returnValue.gvals = [];
1358
+ returnValue.bvals = [];
1359
+ }
1360
+
1361
+ if (Pixastic.Client.hasCanvasImageData()) {
1362
+ var data = Pixastic.prepareData(params);
1363
+ params.useData = false;
1364
+
1365
+ var rvals = this.array256(0);
1366
+ var gvals = this.array256(0);
1367
+ var bvals = this.array256(0);
1368
+
1369
+ var rect = params.options.rect;
1370
+
1371
+ var p = rect.width*rect.height;
1372
+ var pix = p*4;
1373
+ while (p--) {
1374
+ rvals[data[pix-=4]]++;
1375
+ gvals[data[pix+1]]++;
1376
+ bvals[data[pix+2]]++;
1377
+ }
1378
+
1379
+ returnValue.rvals = rvals;
1380
+ returnValue.gvals = gvals;
1381
+ returnValue.bvals = bvals;
1382
+
1383
+ if (paint) {
1384
+ var ctx = params.canvas.getContext("2d");
1385
+ var vals = [rvals, gvals, bvals];
1386
+ for (var v=0;v<3;v++) {
1387
+ var yoff = (v+1) * params.height / 3;
1388
+ var maxValue = 0;
1389
+ for (var i=0;i<256;i++) {
1390
+ if (vals[v][i] > maxValue)
1391
+ maxValue = vals[v][i];
1392
+ }
1393
+ var heightScale = params.height / 3 / maxValue;
1394
+ var widthScale = params.width / 256;
1395
+ if (v==0) ctx.fillStyle = "rgba(255,0,0,0.5)";
1396
+ else if (v==1) ctx.fillStyle = "rgba(0,255,0,0.5)";
1397
+ else if (v==2) ctx.fillStyle = "rgba(0,0,255,0.5)";
1398
+ for (var i=0;i<256;i++) {
1399
+ ctx.fillRect(
1400
+ i * widthScale, params.height - heightScale * vals[v][i] - params.height + yoff,
1401
+ widthScale, vals[v][i] * heightScale
1402
+ );
1403
+ }
1404
+ }
1405
+ }
1406
+ return true;
1407
+ }
1408
+ },
1409
+
1410
+ checkSupport : function() {
1411
+ return Pixastic.Client.hasCanvasImageData();
1412
+ }
1413
+ }/*
1414
+ * Pixastic Lib - Crop - v0.1.1
1415
+ * Copyright (c) 2008-2009 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
1416
+ * License: [http://www.pixastic.com/lib/license.txt]
1417
+ */
1418
+
1419
+ Pixastic.Actions.crop = {
1420
+ process : function(params) {
1421
+ if (Pixastic.Client.hasCanvas()) {
1422
+ var rect = params.options.rect;
1423
+
1424
+ var width = rect.width;
1425
+ var height = rect.height;
1426
+ var top = rect.top;
1427
+ var left = rect.left;
1428
+
1429
+ if (typeof params.options.left != "undefined")
1430
+ left = parseInt(params.options.left,10);
1431
+ if (typeof params.options.top != "undefined")
1432
+ top = parseInt(params.options.top,10);
1433
+ if (typeof params.options.height != "undefined")
1434
+ width = parseInt(params.options.width,10);
1435
+ if (typeof params.options.height != "undefined")
1436
+ height = parseInt(params.options.height,10);
1437
+
1438
+ if (left < 0) left = 0;
1439
+ if (left > params.width-1) left = params.width-1;
1440
+
1441
+ if (top < 0) top = 0;
1442
+ if (top > params.height-1) top = params.height-1;
1443
+
1444
+ if (width < 1) width = 1;
1445
+ if (left + width > params.width)
1446
+ width = params.width - left;
1447
+
1448
+ if (height < 1) height = 1;
1449
+ if (top + height > params.height)
1450
+ height = params.height - top;
1451
+
1452
+ var copy = document.createElement("canvas");
1453
+ copy.width = params.width;
1454
+ copy.height = params.height;
1455
+ copy.getContext("2d").drawImage(params.canvas,0,0);
1456
+
1457
+ params.canvas.width = width;
1458
+ params.canvas.height = height;
1459
+ params.canvas.getContext("2d").clearRect(0,0,width,height);
1460
+
1461
+ params.canvas.getContext("2d").drawImage(copy,
1462
+ left,top,width,height,
1463
+ 0,0,width,height
1464
+ );
1465
+
1466
+ params.useData = false;
1467
+ return true;
1468
+ }
1469
+ },
1470
+ checkSupport : function() {
1471
+ return Pixastic.Client.hasCanvas();
1472
+ }
1473
+ }
1474
+
1475
+
1476
+ /*
1477
+ * Pixastic Lib - Desaturation filter - v0.1.1
1478
+ * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
1479
+ * License: [http://www.pixastic.com/lib/license.txt]
1480
+ */
1481
+
1482
+ Pixastic.Actions.desaturate = {
1483
+
1484
+ process : function(params) {
1485
+ var useAverage = !!(params.options.average && params.options.average != "false");
1486
+
1487
+ if (Pixastic.Client.hasCanvasImageData()) {
1488
+ var data = Pixastic.prepareData(params);
1489
+ var rect = params.options.rect;
1490
+ var w = rect.width;
1491
+ var h = rect.height;
1492
+
1493
+ var p = w*h;
1494
+ var pix = p*4, pix1, pix2;
1495
+
1496
+ if (useAverage) {
1497
+ while (p--)
1498
+ data[pix-=4] = data[pix1=pix+1] = data[pix2=pix+2] = (data[pix]+data[pix1]+data[pix2])/3
1499
+ } else {
1500
+ while (p--)
1501
+ data[pix-=4] = data[pix1=pix+1] = data[pix2=pix+2] = (data[pix]*0.3 + data[pix1]*0.59 + data[pix2]*0.11);
1502
+ }
1503
+ return true;
1504
+ } else if (Pixastic.Client.isIE()) {
1505
+ params.image.style.filter += " gray";
1506
+ return true;
1507
+ }
1508
+ },
1509
+ checkSupport : function() {
1510
+ return (Pixastic.Client.hasCanvasImageData() || Pixastic.Client.isIE());
1511
+ }
1512
+ }/*
1513
+ * Pixastic Lib - Edge detection filter - v0.1.1
1514
+ * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
1515
+ * License: [http://www.pixastic.com/lib/license.txt]
1516
+ */
1517
+
1518
+ Pixastic.Actions.edges = {
1519
+ process : function(params) {
1520
+
1521
+ var mono = !!(params.options.mono && params.options.mono != "false");
1522
+ var invert = !!(params.options.invert && params.options.invert != "false");
1523
+
1524
+ if (Pixastic.Client.hasCanvasImageData()) {
1525
+ var data = Pixastic.prepareData(params);
1526
+ var dataCopy = Pixastic.prepareData(params, true)
1527
+
1528
+ var c = -1/8;
1529
+ var kernel = [
1530
+ [c, c, c],
1531
+ [c, 1, c],
1532
+ [c, c, c]
1533
+ ];
1534
+
1535
+ weight = 1/c;
1536
+
1537
+ var rect = params.options.rect;
1538
+ var w = rect.width;
1539
+ var h = rect.height;
1540
+
1541
+ var w4 = w*4;
1542
+ var y = h;
1543
+ do {
1544
+ var offsetY = (y-1)*w4;
1545
+
1546
+ var nextY = (y == h) ? y - 1 : y;
1547
+ var prevY = (y == 1) ? 0 : y-2;
1548
+
1549
+ var offsetYPrev = prevY*w*4;
1550
+ var offsetYNext = nextY*w*4;
1551
+
1552
+ var x = w;
1553
+ do {
1554
+ var offset = offsetY + (x*4-4);
1555
+
1556
+ var offsetPrev = offsetYPrev + ((x == 1) ? 0 : x-2) * 4;
1557
+ var offsetNext = offsetYNext + ((x == w) ? x-1 : x) * 4;
1558
+
1559
+ var r = ((dataCopy[offsetPrev-4]
1560
+ + dataCopy[offsetPrev]
1561
+ + dataCopy[offsetPrev+4]
1562
+ + dataCopy[offset-4]
1563
+ + dataCopy[offset+4]
1564
+ + dataCopy[offsetNext-4]
1565
+ + dataCopy[offsetNext]
1566
+ + dataCopy[offsetNext+4]) * c
1567
+ + dataCopy[offset]
1568
+ )
1569
+ * weight;
1570
+
1571
+ var g = ((dataCopy[offsetPrev-3]
1572
+ + dataCopy[offsetPrev+1]
1573
+ + dataCopy[offsetPrev+5]
1574
+ + dataCopy[offset-3]
1575
+ + dataCopy[offset+5]
1576
+ + dataCopy[offsetNext-3]
1577
+ + dataCopy[offsetNext+1]
1578
+ + dataCopy[offsetNext+5]) * c
1579
+ + dataCopy[offset+1])
1580
+ * weight;
1581
+
1582
+ var b = ((dataCopy[offsetPrev-2]
1583
+ + dataCopy[offsetPrev+2]
1584
+ + dataCopy[offsetPrev+6]
1585
+ + dataCopy[offset-2]
1586
+ + dataCopy[offset+6]
1587
+ + dataCopy[offsetNext-2]
1588
+ + dataCopy[offsetNext+2]
1589
+ + dataCopy[offsetNext+6]) * c
1590
+ + dataCopy[offset+2])
1591
+ * weight;
1592
+
1593
+ if (mono) {
1594
+ var brightness = (r*0.3 + g*0.59 + b*0.11)||0;
1595
+ if (invert) brightness = 255 - brightness;
1596
+ if (brightness < 0 ) brightness = 0;
1597
+ if (brightness > 255 ) brightness = 255;
1598
+ r = g = b = brightness;
1599
+ } else {
1600
+ if (invert) {
1601
+ r = 255 - r;
1602
+ g = 255 - g;
1603
+ b = 255 - b;
1604
+ }
1605
+ if (r < 0 ) r = 0;
1606
+ if (g < 0 ) g = 0;
1607
+ if (b < 0 ) b = 0;
1608
+ if (r > 255 ) r = 255;
1609
+ if (g > 255 ) g = 255;
1610
+ if (b > 255 ) b = 255;
1611
+ }
1612
+
1613
+ data[offset] = r;
1614
+ data[offset+1] = g;
1615
+ data[offset+2] = b;
1616
+
1617
+ } while (--x);
1618
+ } while (--y);
1619
+
1620
+ return true;
1621
+ }
1622
+ },
1623
+ checkSupport : function() {
1624
+ return Pixastic.Client.hasCanvasImageData();
1625
+ }
1626
+ }/*
1627
+ * Pixastic Lib - Edge detection 2 - v0.1.0
1628
+ * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
1629
+ * License: [http://www.pixastic.com/lib/license.txt]
1630
+ *
1631
+ * Contribution by Oliver Hunt (http://nerget.com/, http://nerget.com/canvas/edgeDetection.js). Thanks Oliver!
1632
+ *
1633
+ */
1634
+
1635
+ Pixastic.Actions.edges2 = {
1636
+ process : function(params) {
1637
+
1638
+ if (Pixastic.Client.hasCanvasImageData()) {
1639
+ var data = Pixastic.prepareData(params);
1640
+ var dataCopy = Pixastic.prepareData(params, true)
1641
+
1642
+ var rect = params.options.rect;
1643
+ var w = rect.width;
1644
+ var h = rect.height;
1645
+
1646
+ var w4 = w * 4;
1647
+ var pixel = w4 + 4; // Start at (1,1)
1648
+ var hm1 = h - 1;
1649
+ var wm1 = w - 1;
1650
+ for (var y = 1; y < hm1; ++y) {
1651
+ // Prepare initial cached values for current row
1652
+ var centerRow = pixel - 4;
1653
+ var priorRow = centerRow - w4;
1654
+ var nextRow = centerRow + w4;
1655
+
1656
+ var r1 = - dataCopy[priorRow] - dataCopy[centerRow] - dataCopy[nextRow];
1657
+ var g1 = - dataCopy[++priorRow] - dataCopy[++centerRow] - dataCopy[++nextRow];
1658
+ var b1 = - dataCopy[++priorRow] - dataCopy[++centerRow] - dataCopy[++nextRow];
1659
+
1660
+ var rp = dataCopy[priorRow += 2];
1661
+ var gp = dataCopy[++priorRow];
1662
+ var bp = dataCopy[++priorRow];
1663
+
1664
+ var rc = dataCopy[centerRow += 2];
1665
+ var gc = dataCopy[++centerRow];
1666
+ var bc = dataCopy[++centerRow];
1667
+
1668
+ var rn = dataCopy[nextRow += 2];
1669
+ var gn = dataCopy[++nextRow];
1670
+ var bn = dataCopy[++nextRow];
1671
+
1672
+ var r2 = - rp - rc - rn;
1673
+ var g2 = - gp - gc - gn;
1674
+ var b2 = - bp - bc - bn;
1675
+
1676
+ // Main convolution loop
1677
+ for (var x = 1; x < wm1; ++x) {
1678
+ centerRow = pixel + 4;
1679
+ priorRow = centerRow - w4;
1680
+ nextRow = centerRow + w4;
1681
+
1682
+ var r = 127 + r1 - rp - (rc * -8) - rn;
1683
+ var g = 127 + g1 - gp - (gc * -8) - gn;
1684
+ var b = 127 + b1 - bp - (bc * -8) - bn;
1685
+
1686
+ r1 = r2;
1687
+ g1 = g2;
1688
+ b1 = b2;
1689
+
1690
+ rp = dataCopy[ priorRow];
1691
+ gp = dataCopy[++priorRow];
1692
+ bp = dataCopy[++priorRow];
1693
+
1694
+ rc = dataCopy[ centerRow];
1695
+ gc = dataCopy[++centerRow];
1696
+ bc = dataCopy[++centerRow];
1697
+
1698
+ rn = dataCopy[ nextRow];
1699
+ gn = dataCopy[++nextRow];
1700
+ bn = dataCopy[++nextRow];
1701
+
1702
+ r += (r2 = - rp - rc - rn);
1703
+ g += (g2 = - gp - gc - gn);
1704
+ b += (b2 = - bp - bc - bn);
1705
+
1706
+ if (r > 255) r = 255;
1707
+ if (g > 255) g = 255;
1708
+ if (b > 255) b = 255;
1709
+ if (r < 0) r = 0;
1710
+ if (g < 0) g = 0;
1711
+ if (b < 0) b = 0;
1712
+
1713
+ data[pixel] = r;
1714
+ data[++pixel] = g;
1715
+ data[++pixel] = b;
1716
+ //data[++pixel] = 255; // alpha
1717
+
1718
+ pixel+=2;
1719
+ }
1720
+ pixel += 8;
1721
+ }
1722
+ return true;
1723
+ }
1724
+ },
1725
+ checkSupport : function() {
1726
+ return Pixastic.Client.hasCanvasImageData();
1727
+ }
1728
+ }/*
1729
+ * Pixastic Lib - Emboss filter - v0.1.0
1730
+ * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
1731
+ * License: [http://www.pixastic.com/lib/license.txt]
1732
+ */
1733
+
1734
+ Pixastic.Actions.emboss = {
1735
+ process : function(params) {
1736
+
1737
+ var strength = parseFloat(params.options.strength)||1;
1738
+ var greyLevel = typeof params.options.greyLevel != "undefined" ? parseInt(params.options.greyLevel) : 180;
1739
+ var direction = params.options.direction||"topleft";
1740
+ var blend = !!(params.options.blend && params.options.blend != "false");
1741
+
1742
+ var dirY = 0;
1743
+ var dirX = 0;
1744
+
1745
+ switch (direction) {
1746
+ case "topleft": // top left
1747
+ dirY = -1;
1748
+ dirX = -1;
1749
+ break;
1750
+ case "top": // top
1751
+ dirY = -1;
1752
+ dirX = 0;
1753
+ break;
1754
+ case "topright": // top right
1755
+ dirY = -1;
1756
+ dirX = 1;
1757
+ break;
1758
+ case "right": // right
1759
+ dirY = 0;
1760
+ dirX = 1;
1761
+ break;
1762
+ case "bottomright": // bottom right
1763
+ dirY = 1;
1764
+ dirX = 1;
1765
+ break;
1766
+ case "bottom": // bottom
1767
+ dirY = 1;
1768
+ dirX = 0;
1769
+ break;
1770
+ case "bottomleft": // bottom left
1771
+ dirY = 1;
1772
+ dirX = -1;
1773
+ break;
1774
+ case "left": // left
1775
+ dirY = 0;
1776
+ dirX = -1;
1777
+ break;
1778
+ }
1779
+
1780
+ if (Pixastic.Client.hasCanvasImageData()) {
1781
+ var data = Pixastic.prepareData(params);
1782
+ var dataCopy = Pixastic.prepareData(params, true)
1783
+
1784
+ var invertAlpha = !!params.options.invertAlpha;
1785
+ var rect = params.options.rect;
1786
+ var w = rect.width;
1787
+ var h = rect.height;
1788
+
1789
+ var w4 = w*4;
1790
+ var y = h;
1791
+ do {
1792
+ var offsetY = (y-1)*w4;
1793
+
1794
+ var otherY = dirY;
1795
+ if (y + otherY < 1) otherY = 0;
1796
+ if (y + otherY > h) otherY = 0;
1797
+
1798
+ var offsetYOther = (y-1+otherY)*w*4;
1799
+
1800
+ var x = w;
1801
+ do {
1802
+ var offset = offsetY + (x-1)*4;
1803
+
1804
+ var otherX = dirX;
1805
+ if (x + otherX < 1) otherX = 0;
1806
+ if (x + otherX > w) otherX = 0;
1807
+
1808
+ var offsetOther = offsetYOther + (x-1+otherX)*4;
1809
+
1810
+ var dR = dataCopy[offset] - dataCopy[offsetOther];
1811
+ var dG = dataCopy[offset+1] - dataCopy[offsetOther+1];
1812
+ var dB = dataCopy[offset+2] - dataCopy[offsetOther+2];
1813
+
1814
+ var dif = dR;
1815
+ var absDif = dif > 0 ? dif : -dif;
1816
+
1817
+ var absG = dG > 0 ? dG : -dG;
1818
+ var absB = dB > 0 ? dB : -dB;
1819
+
1820
+ if (absG > absDif) {
1821
+ dif = dG;
1822
+ }
1823
+ if (absB > absDif) {
1824
+ dif = dB;
1825
+ }
1826
+
1827
+ dif *= strength;
1828
+
1829
+ if (blend) {
1830
+ var r = data[offset] + dif;
1831
+ var g = data[offset+1] + dif;
1832
+ var b = data[offset+2] + dif;
1833
+
1834
+ data[offset] = (r > 255) ? 255 : (r < 0 ? 0 : r);
1835
+ data[offset+1] = (g > 255) ? 255 : (g < 0 ? 0 : g);
1836
+ data[offset+2] = (b > 255) ? 255 : (b < 0 ? 0 : b);
1837
+ } else {
1838
+ var grey = greyLevel - dif;
1839
+ if (grey < 0) {
1840
+ grey = 0;
1841
+ } else if (grey > 255) {
1842
+ grey = 255;
1843
+ }
1844
+
1845
+ data[offset] = data[offset+1] = data[offset+2] = grey;
1846
+ }
1847
+
1848
+ } while (--x);
1849
+ } while (--y);
1850
+ return true;
1851
+
1852
+ } else if (Pixastic.Client.isIE()) {
1853
+ params.image.style.filter += " progid:DXImageTransform.Microsoft.emboss()";
1854
+ return true;
1855
+ }
1856
+ },
1857
+ checkSupport : function() {
1858
+ return (Pixastic.Client.hasCanvasImageData() || Pixastic.Client.isIE());
1859
+ }
1860
+
1861
+ }
1862
+ /*
1863
+ * Pixastic Lib - Flip - v0.1.0
1864
+ * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
1865
+ * License: [http://www.pixastic.com/lib/license.txt]
1866
+ */
1867
+
1868
+ Pixastic.Actions.flip = {
1869
+ process : function(params) {
1870
+ var rect = params.options.rect;
1871
+ var copyCanvas = document.createElement("canvas");
1872
+ copyCanvas.width = rect.width;
1873
+ copyCanvas.height = rect.height;
1874
+ copyCanvas.getContext("2d").drawImage(params.image, rect.left, rect.top, rect.width, rect.height, 0, 0, rect.width, rect.height);
1875
+
1876
+ var ctx = params.canvas.getContext("2d");
1877
+ ctx.clearRect(rect.left, rect.top, rect.width, rect.height);
1878
+
1879
+ if (params.options.axis == "horizontal") {
1880
+ ctx.scale(-1,1);
1881
+ ctx.drawImage(copyCanvas, -rect.left-rect.width, rect.top, rect.width, rect.height)
1882
+ } else {
1883
+ ctx.scale(1,-1);
1884
+ ctx.drawImage(copyCanvas, rect.left, -rect.top-rect.height, rect.width, rect.height)
1885
+ }
1886
+
1887
+ params.useData = false;
1888
+
1889
+ return true;
1890
+ },
1891
+ checkSupport : function() {
1892
+ return Pixastic.Client.hasCanvas();
1893
+ }
1894
+ }
1895
+
1896
+ /*
1897
+ * Pixastic Lib - Horizontal flip - v0.1.0
1898
+ * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
1899
+ * License: [http://www.pixastic.com/lib/license.txt]
1900
+ */
1901
+
1902
+ Pixastic.Actions.fliph = {
1903
+ process : function(params) {
1904
+ if (Pixastic.Client.hasCanvas()) {
1905
+ var rect = params.options.rect;
1906
+ var copyCanvas = document.createElement("canvas");
1907
+ copyCanvas.width = rect.width;
1908
+ copyCanvas.height = rect.height;
1909
+ copyCanvas.getContext("2d").drawImage(params.image, rect.left, rect.top, rect.width, rect.height, 0, 0, rect.width, rect.height);
1910
+
1911
+ var ctx = params.canvas.getContext("2d");
1912
+ ctx.clearRect(rect.left, rect.top, rect.width, rect.height);
1913
+ ctx.scale(-1,1);
1914
+ ctx.drawImage(copyCanvas, -rect.left-rect.width, rect.top, rect.width, rect.height)
1915
+ params.useData = false;
1916
+
1917
+ return true;
1918
+
1919
+ } else if (Pixastic.Client.isIE()) {
1920
+ params.image.style.filter += " fliph";
1921
+ return true;
1922
+ }
1923
+ },
1924
+ checkSupport : function() {
1925
+ return (Pixastic.Client.hasCanvas() || Pixastic.Client.isIE());
1926
+ }
1927
+ }
1928
+
1929
+ /*
1930
+ * Pixastic Lib - Vertical flip - v0.1.0
1931
+ * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
1932
+ * License: [http://www.pixastic.com/lib/license.txt]
1933
+ */
1934
+
1935
+ Pixastic.Actions.flipv = {
1936
+ process : function(params) {
1937
+ if (Pixastic.Client.hasCanvas()) {
1938
+ var rect = params.options.rect;
1939
+ var copyCanvas = document.createElement("canvas");
1940
+ copyCanvas.width = rect.width;
1941
+ copyCanvas.height = rect.height;
1942
+ copyCanvas.getContext("2d").drawImage(params.image, rect.left, rect.top, rect.width, rect.height, 0, 0, rect.width, rect.height);
1943
+
1944
+ var ctx = params.canvas.getContext("2d");
1945
+ ctx.clearRect(rect.left, rect.top, rect.width, rect.height);
1946
+ ctx.scale(1,-1);
1947
+ ctx.drawImage(copyCanvas, rect.left, -rect.top-rect.height, rect.width, rect.height)
1948
+ params.useData = false;
1949
+
1950
+ return true;
1951
+
1952
+ } else if (Pixastic.Client.isIE()) {
1953
+ params.image.style.filter += " flipv";
1954
+ return true;
1955
+ }
1956
+ },
1957
+ checkSupport : function() {
1958
+ return (Pixastic.Client.hasCanvas() || Pixastic.Client.isIE());
1959
+ }
1960
+ }
1961
+
1962
+ /*
1963
+ * Pixastic Lib - Glow - v0.1.0
1964
+ * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
1965
+ * License: [http://www.pixastic.com/lib/license.txt]
1966
+ */
1967
+
1968
+
1969
+ Pixastic.Actions.glow = {
1970
+ process : function(params) {
1971
+
1972
+ var amount = (parseFloat(params.options.amount)||0);
1973
+ var blurAmount = parseFloat(params.options.radius)||0;
1974
+
1975
+ amount = Math.min(1,Math.max(0,amount));
1976
+ blurAmount = Math.min(5,Math.max(0,blurAmount));
1977
+
1978
+ if (Pixastic.Client.hasCanvasImageData()) {
1979
+ var rect = params.options.rect;
1980
+
1981
+ var blurCanvas = document.createElement("canvas");
1982
+ blurCanvas.width = params.width;
1983
+ blurCanvas.height = params.height;
1984
+ var blurCtx = blurCanvas.getContext("2d");
1985
+ blurCtx.drawImage(params.canvas,0,0);
1986
+
1987
+ var scale = 2;
1988
+ var smallWidth = Math.round(params.width / scale);
1989
+ var smallHeight = Math.round(params.height / scale);
1990
+
1991
+ var copy = document.createElement("canvas");
1992
+ copy.width = smallWidth;
1993
+ copy.height = smallHeight;
1994
+
1995
+ var clear = true;
1996
+ var steps = Math.round(blurAmount * 20);
1997
+
1998
+ var copyCtx = copy.getContext("2d");
1999
+ for (var i=0;i<steps;i++) {
2000
+ var scaledWidth = Math.max(1,Math.round(smallWidth - i));
2001
+ var scaledHeight = Math.max(1,Math.round(smallHeight - i));
2002
+
2003
+ copyCtx.clearRect(0,0,smallWidth,smallHeight);
2004
+
2005
+ copyCtx.drawImage(
2006
+ blurCanvas,
2007
+ 0,0,params.width,params.height,
2008
+ 0,0,scaledWidth,scaledHeight
2009
+ );
2010
+
2011
+ blurCtx.clearRect(0,0,params.width,params.height);
2012
+
2013
+ blurCtx.drawImage(
2014
+ copy,
2015
+ 0,0,scaledWidth,scaledHeight,
2016
+ 0,0,params.width,params.height
2017
+ );
2018
+ }
2019
+
2020
+ var data = Pixastic.prepareData(params);
2021
+ var blurData = Pixastic.prepareData({canvas:blurCanvas,options:params.options});
2022
+
2023
+ var p = rect.width * rect.height;
2024
+
2025
+ var pix = p*4, pix1 = pix + 1, pix2 = pix + 2, pix3 = pix + 3;
2026
+ while (p--) {
2027
+ if ((data[pix-=4] += amount * blurData[pix]) > 255) data[pix] = 255;
2028
+ if ((data[pix1-=4] += amount * blurData[pix1]) > 255) data[pix1] = 255;
2029
+ if ((data[pix2-=4] += amount * blurData[pix2]) > 255) data[pix2] = 255;
2030
+ }
2031
+
2032
+ return true;
2033
+ }
2034
+ },
2035
+ checkSupport : function() {
2036
+ return Pixastic.Client.hasCanvasImageData();
2037
+ }
2038
+ }
2039
+
2040
+
2041
+
2042
+ /*
2043
+ * Pixastic Lib - Histogram - v0.1.1
2044
+ * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
2045
+ * License: [http://www.pixastic.com/lib/license.txt]
2046
+ */
2047
+
2048
+ Pixastic.Actions.histogram = {
2049
+ process : function(params) {
2050
+
2051
+ var average = !!(params.options.average && params.options.average != "false");
2052
+ var paint = !!(params.options.paint && params.options.paint != "false");
2053
+ var color = params.options.color || "rgba(255,255,255,0.5)";
2054
+ var values = [];
2055
+ if (typeof params.options.returnValue != "object") {
2056
+ params.options.returnValue = {values:[]};
2057
+ }
2058
+ var returnValue = params.options.returnValue;
2059
+ if (typeof returnValue.values != "array") {
2060
+ returnValue.values = [];
2061
+ }
2062
+ values = returnValue.values;
2063
+
2064
+ if (Pixastic.Client.hasCanvasImageData()) {
2065
+ var data = Pixastic.prepareData(params);
2066
+ params.useData = false;
2067
+
2068
+ for (var i=0;i<256;i++) {
2069
+ values[i] = 0;
2070
+ }
2071
+
2072
+ var rect = params.options.rect;
2073
+ var p = rect.width * rect.height;
2074
+
2075
+ var pix = p*4, pix1 = pix + 1, pix2 = pix + 2, pix3 = pix + 3;
2076
+ var round = Math.round;
2077
+
2078
+ if (average) {
2079
+ while (p--) {
2080
+ values[ round((data[pix-=4]+data[pix+1]+data[pix+2])/3) ]++;
2081
+ }
2082
+ } else {
2083
+ while (p--) {
2084
+ values[ round(data[pix-=4]*0.3 + data[pix+1]*0.59 + data[pix+2]*0.11) ]++;
2085
+ }
2086
+ }
2087
+
2088
+ if (paint) {
2089
+ var maxValue = 0;
2090
+ for (var i=0;i<256;i++) {
2091
+ if (values[i] > maxValue) {
2092
+ maxValue = values[i];
2093
+ }
2094
+ }
2095
+ var heightScale = params.height / maxValue;
2096
+ var widthScale = params.width / 256;
2097
+ var ctx = params.canvas.getContext("2d");
2098
+ ctx.fillStyle = color;
2099
+ for (var i=0;i<256;i++) {
2100
+ ctx.fillRect(
2101
+ i * widthScale, params.height - heightScale * values[i],
2102
+ widthScale, values[i] * heightScale
2103
+ );
2104
+ }
2105
+ }
2106
+
2107
+ returnValue.values = values;
2108
+
2109
+ return true;
2110
+ }
2111
+ },
2112
+ checkSupport : function() {
2113
+ return Pixastic.Client.hasCanvasImageData();
2114
+ }
2115
+ }
2116
+ /*
2117
+ * Pixastic Lib - HSL Adjust - v0.1.1
2118
+ * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
2119
+ * License: [http://www.pixastic.com/lib/license.txt]
2120
+ */
2121
+
2122
+ Pixastic.Actions.hsl = {
2123
+ process : function(params) {
2124
+
2125
+ var hue = parseInt(params.options.hue,10)||0;
2126
+ var saturation = (parseInt(params.options.saturation,10)||0) / 100;
2127
+ var lightness = (parseInt(params.options.lightness,10)||0) / 100;
2128
+
2129
+
2130
+ // this seems to give the same result as Photoshop
2131
+ if (saturation < 0) {
2132
+ var satMul = 1+saturation;
2133
+ } else {
2134
+ var satMul = 1+saturation*2;
2135
+ }
2136
+
2137
+ hue = (hue%360) / 360;
2138
+ var hue6 = hue * 6;
2139
+
2140
+ var rgbDiv = 1 / 255;
2141
+
2142
+ var light255 = lightness * 255;
2143
+ var lightp1 = 1 + lightness;
2144
+ var lightm1 = 1 - lightness;
2145
+ if (Pixastic.Client.hasCanvasImageData()) {
2146
+ var data = Pixastic.prepareData(params);
2147
+
2148
+ var rect = params.options.rect;
2149
+
2150
+ var p = rect.width * rect.height;
2151
+
2152
+ var pix = p*4, pix1 = pix + 1, pix2 = pix + 2, pix3 = pix + 3;
2153
+
2154
+ while (p--) {
2155
+
2156
+ var r = data[pix-=4];
2157
+ var g = data[pix1=pix+1];
2158
+ var b = data[pix2=pix+2];
2159
+
2160
+ if (hue != 0 || saturation != 0) {
2161
+ // ok, here comes rgb to hsl + adjust + hsl to rgb, all in one jumbled mess.
2162
+ // It's not so pretty, but it's been optimized to get somewhat decent performance.
2163
+ // The transforms were originally adapted from the ones found in Graphics Gems, but have been heavily modified.
2164
+ var vs = r;
2165
+ if (g > vs) vs = g;
2166
+ if (b > vs) vs = b;
2167
+ var ms = r;
2168
+ if (g < ms) ms = g;
2169
+ if (b < ms) ms = b;
2170
+ var vm = (vs-ms);
2171
+ var l = (ms+vs)/510;
2172
+ if (l > 0) {
2173
+ if (vm > 0) {
2174
+ if (l <= 0.5) {
2175
+ var s = vm / (vs+ms) * satMul;
2176
+ if (s > 1) s = 1;
2177
+ var v = (l * (1+s));
2178
+ } else {
2179
+ var s = vm / (510-vs-ms) * satMul;
2180
+ if (s > 1) s = 1;
2181
+ var v = (l+s - l*s);
2182
+ }
2183
+ if (r == vs) {
2184
+ if (g == ms)
2185
+ var h = 5 + ((vs-b)/vm) + hue6;
2186
+ else
2187
+ var h = 1 - ((vs-g)/vm) + hue6;
2188
+ } else if (g == vs) {
2189
+ if (b == ms)
2190
+ var h = 1 + ((vs-r)/vm) + hue6;
2191
+ else
2192
+ var h = 3 - ((vs-b)/vm) + hue6;
2193
+ } else {
2194
+ if (r == ms)
2195
+ var h = 3 + ((vs-g)/vm) + hue6;
2196
+ else
2197
+ var h = 5 - ((vs-r)/vm) + hue6;
2198
+ }
2199
+ if (h < 0) h+=6;
2200
+ if (h >= 6) h-=6;
2201
+ var m = (l+l-v);
2202
+ var sextant = h>>0;
2203
+ if (sextant == 0) {
2204
+ r = v*255; g = (m+((v-m)*(h-sextant)))*255; b = m*255;
2205
+ } else if (sextant == 1) {
2206
+ r = (v-((v-m)*(h-sextant)))*255; g = v*255; b = m*255;
2207
+ } else if (sextant == 2) {
2208
+ r = m*255; g = v*255; b = (m+((v-m)*(h-sextant)))*255;
2209
+ } else if (sextant == 3) {
2210
+ r = m*255; g = (v-((v-m)*(h-sextant)))*255; b = v*255;
2211
+ } else if (sextant == 4) {
2212
+ r = (m+((v-m)*(h-sextant)))*255; g = m*255; b = v*255;
2213
+ } else if (sextant == 5) {
2214
+ r = v*255; g = m*255; b = (v-((v-m)*(h-sextant)))*255;
2215
+ }
2216
+ }
2217
+ }
2218
+ }
2219
+
2220
+ if (lightness < 0) {
2221
+ r *= lightp1;
2222
+ g *= lightp1;
2223
+ b *= lightp1;
2224
+ } else if (lightness > 0) {
2225
+ r = r * lightm1 + light255;
2226
+ g = g * lightm1 + light255;
2227
+ b = b * lightm1 + light255;
2228
+ }
2229
+
2230
+ if (r < 0)
2231
+ data[pix] = 0
2232
+ else if (r > 255)
2233
+ data[pix] = 255
2234
+ else
2235
+ data[pix] = r;
2236
+
2237
+ if (g < 0)
2238
+ data[pix1] = 0
2239
+ else if (g > 255)
2240
+ data[pix1] = 255
2241
+ else
2242
+ data[pix1] = g;
2243
+
2244
+ if (b < 0)
2245
+ data[pix2] = 0
2246
+ else if (b > 255)
2247
+ data[pix2] = 255
2248
+ else
2249
+ data[pix2] = b;
2250
+
2251
+ }
2252
+
2253
+ return true;
2254
+ }
2255
+ },
2256
+ checkSupport : function() {
2257
+ return Pixastic.Client.hasCanvasImageData();
2258
+ }
2259
+
2260
+ }
2261
+ /*
2262
+ * Pixastic Lib - Invert filter - v0.1.1
2263
+ * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
2264
+ * License: [http://www.pixastic.com/lib/license.txt]
2265
+ */
2266
+
2267
+ Pixastic.Actions.invert = {
2268
+ process : function(params) {
2269
+ if (Pixastic.Client.hasCanvasImageData()) {
2270
+ var data = Pixastic.prepareData(params);
2271
+
2272
+ var invertAlpha = !!params.options.invertAlpha;
2273
+ var rect = params.options.rect;
2274
+
2275
+ var p = rect.width * rect.height;
2276
+
2277
+ var pix = p*4, pix1 = pix + 1, pix2 = pix + 2, pix3 = pix + 3;
2278
+
2279
+ while (p--) {
2280
+ data[pix-=4] = 255 - data[pix];
2281
+ data[pix1-=4] = 255 - data[pix1];
2282
+ data[pix2-=4] = 255 - data[pix2];
2283
+ if (invertAlpha)
2284
+ data[pix3-=4] = 255 - data[pix3];
2285
+ }
2286
+
2287
+ return true;
2288
+ } else if (Pixastic.Client.isIE()) {
2289
+ params.image.style.filter += " invert";
2290
+ return true;
2291
+ }
2292
+ },
2293
+ checkSupport : function() {
2294
+ return (Pixastic.Client.hasCanvasImageData() || Pixastic.Client.isIE());
2295
+ }
2296
+ }
2297
+ /*
2298
+ * Pixastic Lib - Laplace filter - v0.1.0
2299
+ * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
2300
+ * License: [http://www.pixastic.com/lib/license.txt]
2301
+ */
2302
+
2303
+ Pixastic.Actions.laplace = {
2304
+ process : function(params) {
2305
+
2306
+ var strength = 1.0;
2307
+ var invert = !!(params.options.invert && params.options.invert != "false");
2308
+ var contrast = parseFloat(params.options.edgeStrength)||0;
2309
+
2310
+ var greyLevel = parseInt(params.options.greyLevel)||0;
2311
+
2312
+ contrast = -contrast;
2313
+
2314
+ if (Pixastic.Client.hasCanvasImageData()) {
2315
+ var data = Pixastic.prepareData(params);
2316
+ var dataCopy = Pixastic.prepareData(params, true)
2317
+
2318
+ var kernel = [
2319
+ [-1, -1, -1],
2320
+ [-1, 8, -1],
2321
+ [-1, -1, -1]
2322
+ ];
2323
+
2324
+ var weight = 1/8;
2325
+
2326
+ var rect = params.options.rect;
2327
+ var w = rect.width;
2328
+ var h = rect.height;
2329
+
2330
+ var w4 = w*4;
2331
+ var y = h;
2332
+ do {
2333
+ var offsetY = (y-1)*w4;
2334
+
2335
+ var nextY = (y == h) ? y - 1 : y;
2336
+ var prevY = (y == 1) ? 0 : y-2;
2337
+
2338
+ var offsetYPrev = prevY*w*4;
2339
+ var offsetYNext = nextY*w*4;
2340
+
2341
+ var x = w;
2342
+ do {
2343
+ var offset = offsetY + (x*4-4);
2344
+
2345
+ var offsetPrev = offsetYPrev + ((x == 1) ? 0 : x-2) * 4;
2346
+ var offsetNext = offsetYNext + ((x == w) ? x-1 : x) * 4;
2347
+
2348
+ var r = ((-dataCopy[offsetPrev-4]
2349
+ - dataCopy[offsetPrev]
2350
+ - dataCopy[offsetPrev+4]
2351
+ - dataCopy[offset-4]
2352
+ - dataCopy[offset+4]
2353
+ - dataCopy[offsetNext-4]
2354
+ - dataCopy[offsetNext]
2355
+ - dataCopy[offsetNext+4])
2356
+ + dataCopy[offset] * 8)
2357
+ * weight;
2358
+
2359
+ var g = ((-dataCopy[offsetPrev-3]
2360
+ - dataCopy[offsetPrev+1]
2361
+ - dataCopy[offsetPrev+5]
2362
+ - dataCopy[offset-3]
2363
+ - dataCopy[offset+5]
2364
+ - dataCopy[offsetNext-3]
2365
+ - dataCopy[offsetNext+1]
2366
+ - dataCopy[offsetNext+5])
2367
+ + dataCopy[offset+1] * 8)
2368
+ * weight;
2369
+
2370
+ var b = ((-dataCopy[offsetPrev-2]
2371
+ - dataCopy[offsetPrev+2]
2372
+ - dataCopy[offsetPrev+6]
2373
+ - dataCopy[offset-2]
2374
+ - dataCopy[offset+6]
2375
+ - dataCopy[offsetNext-2]
2376
+ - dataCopy[offsetNext+2]
2377
+ - dataCopy[offsetNext+6])
2378
+ + dataCopy[offset+2] * 8)
2379
+ * weight;
2380
+
2381
+ var brightness = ((r + g + b)/3) + greyLevel;
2382
+
2383
+ if (contrast != 0) {
2384
+ if (brightness > 127) {
2385
+ brightness += ((brightness + 1) - 128) * contrast;
2386
+ } else if (brightness < 127) {
2387
+ brightness -= (brightness + 1) * contrast;
2388
+ }
2389
+ }
2390
+ if (invert) {
2391
+ brightness = 255 - brightness;
2392
+ }
2393
+ if (brightness < 0 ) brightness = 0;
2394
+ if (brightness > 255 ) brightness = 255;
2395
+
2396
+ data[offset] = data[offset+1] = data[offset+2] = brightness;
2397
+
2398
+ } while (--x);
2399
+ } while (--y);
2400
+
2401
+ return true;
2402
+ }
2403
+ },
2404
+ checkSupport : function() {
2405
+ return Pixastic.Client.hasCanvasImageData();
2406
+ }
2407
+ }
2408
+
2409
+ /*
2410
+ * Pixastic Lib - Lighten filter - v0.1.1
2411
+ * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
2412
+ * License: [http://www.pixastic.com/lib/license.txt]
2413
+ */
2414
+
2415
+ Pixastic.Actions.lighten = {
2416
+
2417
+ process : function(params) {
2418
+ var amount = parseFloat(params.options.amount) || 0;
2419
+ amount = Math.max(-1, Math.min(1, amount));
2420
+
2421
+ if (Pixastic.Client.hasCanvasImageData()) {
2422
+ var data = Pixastic.prepareData(params);
2423
+ var rect = params.options.rect;
2424
+
2425
+ var p = rect.width * rect.height;
2426
+
2427
+ var pix = p*4, pix1 = pix + 1, pix2 = pix + 2;
2428
+ var mul = amount + 1;
2429
+
2430
+ while (p--) {
2431
+ if ((data[pix-=4] = data[pix] * mul) > 255)
2432
+ data[pix] = 255;
2433
+
2434
+ if ((data[pix1-=4] = data[pix1] * mul) > 255)
2435
+ data[pix1] = 255;
2436
+
2437
+ if ((data[pix2-=4] = data[pix2] * mul) > 255)
2438
+ data[pix2] = 255;
2439
+
2440
+ }
2441
+
2442
+ return true;
2443
+
2444
+ } else if (Pixastic.Client.isIE()) {
2445
+ var img = params.image;
2446
+ if (amount < 0) {
2447
+ img.style.filter += " light()";
2448
+ img.filters[img.filters.length-1].addAmbient(
2449
+ 255,255,255,
2450
+ 100 * -amount
2451
+ );
2452
+ } else if (amount > 0) {
2453
+ img.style.filter += " light()";
2454
+ img.filters[img.filters.length-1].addAmbient(
2455
+ 255,255,255,
2456
+ 100
2457
+ );
2458
+ img.filters[img.filters.length-1].addAmbient(
2459
+ 255,255,255,
2460
+ 100 * amount
2461
+ );
2462
+ }
2463
+ return true;
2464
+ }
2465
+ },
2466
+ checkSupport : function() {
2467
+ return (Pixastic.Client.hasCanvasImageData() || Pixastic.Client.isIE());
2468
+ }
2469
+ }
2470
+ /*
2471
+ * Pixastic Lib - Mosaic filter - v0.1.0
2472
+ * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
2473
+ * License: [http://www.pixastic.com/lib/license.txt]
2474
+ */
2475
+
2476
+ Pixastic.Actions.mosaic = {
2477
+
2478
+ process : function(params) {
2479
+ var blockSize = Math.max(1,parseInt(params.options.blockSize,10));
2480
+
2481
+ if (Pixastic.Client.hasCanvasImageData()) {
2482
+ var rect = params.options.rect;
2483
+ var w = rect.width;
2484
+ var h = rect.height;
2485
+ var w4 = w*4;
2486
+ var y = h;
2487
+
2488
+ var ctx = params.canvas.getContext("2d");
2489
+
2490
+ var pixel = document.createElement("canvas");
2491
+ pixel.width = pixel.height = 1;
2492
+ var pixelCtx = pixel.getContext("2d");
2493
+
2494
+ var copy = document.createElement("canvas");
2495
+ copy.width = w;
2496
+ copy.height = h;
2497
+ var copyCtx = copy.getContext("2d");
2498
+ copyCtx.drawImage(params.canvas,rect.left,rect.top,w,h, 0,0,w,h);
2499
+
2500
+ for (var y=0;y<h;y+=blockSize) {
2501
+ for (var x=0;x<w;x+=blockSize) {
2502
+ var blockSizeX = blockSize;
2503
+ var blockSizeY = blockSize;
2504
+
2505
+ if (blockSizeX + x > w)
2506
+ blockSizeX = w - x;
2507
+ if (blockSizeY + y > h)
2508
+ blockSizeY = h - y;
2509
+
2510
+ pixelCtx.drawImage(copy, x, y, blockSizeX, blockSizeY, 0, 0, 1, 1);
2511
+ var data = pixelCtx.getImageData(0,0,1,1).data;
2512
+ ctx.fillStyle = "rgb(" + data[0] + "," + data[1] + "," + data[2] + ")";
2513
+ ctx.fillRect(rect.left + x, rect.top + y, blockSize, blockSize);
2514
+ }
2515
+ }
2516
+ params.useData = false;
2517
+
2518
+ return true;
2519
+ }
2520
+ },
2521
+ checkSupport : function() {
2522
+ return (Pixastic.Client.hasCanvasImageData());
2523
+ }
2524
+ }/*
2525
+ * Pixastic Lib - Noise filter - v0.1.0
2526
+ * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
2527
+ * License: [http://www.pixastic.com/lib/license.txt]
2528
+ */
2529
+
2530
+ Pixastic.Actions.noise = {
2531
+
2532
+ process : function(params) {
2533
+ var amount = 0;
2534
+ var strength = 0;
2535
+ var mono = false;
2536
+
2537
+ if (typeof params.options.amount != "undefined")
2538
+ amount = parseFloat(params.options.amount)||0;
2539
+ if (typeof params.options.strength != "undefined")
2540
+ strength = parseFloat(params.options.strength)||0;
2541
+ if (typeof params.options.mono != "undefined")
2542
+ mono = !!(params.options.mono && params.options.mono != "false");
2543
+
2544
+ amount = Math.max(0,Math.min(1,amount));
2545
+ strength = Math.max(0,Math.min(1,strength));
2546
+
2547
+ var noise = 128 * strength;
2548
+ var noise2 = noise / 2;
2549
+
2550
+ if (Pixastic.Client.hasCanvasImageData()) {
2551
+ var data = Pixastic.prepareData(params);
2552
+ var rect = params.options.rect;
2553
+ var w = rect.width;
2554
+ var h = rect.height;
2555
+ var w4 = w*4;
2556
+ var y = h;
2557
+ var random = Math.random;
2558
+
2559
+ do {
2560
+ var offsetY = (y-1)*w4;
2561
+ var x = w;
2562
+ do {
2563
+ var offset = offsetY + (x-1)*4;
2564
+ if (random() < amount) {
2565
+ if (mono) {
2566
+ var pixelNoise = - noise2 + random() * noise;
2567
+ var r = data[offset] + pixelNoise;
2568
+ var g = data[offset+1] + pixelNoise;
2569
+ var b = data[offset+2] + pixelNoise;
2570
+ } else {
2571
+ var r = data[offset] - noise2 + (random() * noise);
2572
+ var g = data[offset+1] - noise2 + (random() * noise);
2573
+ var b = data[offset+2] - noise2 + (random() * noise);
2574
+ }
2575
+
2576
+ if (r < 0 ) r = 0;
2577
+ if (g < 0 ) g = 0;
2578
+ if (b < 0 ) b = 0;
2579
+ if (r > 255 ) r = 255;
2580
+ if (g > 255 ) g = 255;
2581
+ if (b > 255 ) b = 255;
2582
+
2583
+ data[offset] = r;
2584
+ data[offset+1] = g;
2585
+ data[offset+2] = b;
2586
+ }
2587
+ } while (--x);
2588
+ } while (--y);
2589
+ return true;
2590
+ }
2591
+ },
2592
+ checkSupport : function() {
2593
+ return Pixastic.Client.hasCanvasImageData();
2594
+ }
2595
+ }
2596
+
2597
+ /*
2598
+ * Pixastic Lib - Posterize effect - v0.1.0
2599
+ * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
2600
+ * License: [http://www.pixastic.com/lib/license.txt]
2601
+ */
2602
+
2603
+ Pixastic.Actions.posterize = {
2604
+
2605
+ process : function(params) {
2606
+
2607
+
2608
+ var numLevels = 256;
2609
+ if (typeof params.options.levels != "undefined")
2610
+ numLevels = parseInt(params.options.levels,10)||1;
2611
+
2612
+ if (Pixastic.Client.hasCanvasImageData()) {
2613
+ var data = Pixastic.prepareData(params);
2614
+
2615
+ numLevels = Math.max(2,Math.min(256,numLevels));
2616
+
2617
+ var numAreas = 256 / numLevels;
2618
+ var numValues = 256 / (numLevels-1);
2619
+
2620
+ var rect = params.options.rect;
2621
+ var w = rect.width;
2622
+ var h = rect.height;
2623
+ var w4 = w*4;
2624
+ var y = h;
2625
+ do {
2626
+ var offsetY = (y-1)*w4;
2627
+ var x = w;
2628
+ do {
2629
+ var offset = offsetY + (x-1)*4;
2630
+
2631
+ var r = numValues * ((data[offset] / numAreas)>>0);
2632
+ var g = numValues * ((data[offset+1] / numAreas)>>0);
2633
+ var b = numValues * ((data[offset+2] / numAreas)>>0);
2634
+
2635
+ if (r > 255) r = 255;
2636
+ if (g > 255) g = 255;
2637
+ if (b > 255) b = 255;
2638
+
2639
+ data[offset] = r;
2640
+ data[offset+1] = g;
2641
+ data[offset+2] = b;
2642
+
2643
+ } while (--x);
2644
+ } while (--y);
2645
+ return true;
2646
+ }
2647
+ },
2648
+ checkSupport : function() {
2649
+ return Pixastic.Client.hasCanvasImageData();
2650
+ }
2651
+ }
2652
+
2653
+
2654
+ /*
2655
+ * Pixastic Lib - Pointillize filter - v0.1.0
2656
+ * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
2657
+ * License: [http://www.pixastic.com/lib/license.txt]
2658
+ */
2659
+
2660
+ Pixastic.Actions.pointillize = {
2661
+
2662
+ process : function(params) {
2663
+ var radius = Math.max(1,parseInt(params.options.radius,10));
2664
+ var density = Math.min(5,Math.max(0,parseFloat(params.options.density)||0));
2665
+ var noise = Math.max(0,parseFloat(params.options.noise)||0);
2666
+ var transparent = !!(params.options.transparent && params.options.transparent != "false");
2667
+
2668
+ if (Pixastic.Client.hasCanvasImageData()) {
2669
+ var rect = params.options.rect;
2670
+ var w = rect.width;
2671
+ var h = rect.height;
2672
+ var w4 = w*4;
2673
+ var y = h;
2674
+
2675
+ var ctx = params.canvas.getContext("2d");
2676
+ var canvasWidth = params.canvas.width;
2677
+ var canvasHeight = params.canvas.height;
2678
+
2679
+ var pixel = document.createElement("canvas");
2680
+ pixel.width = pixel.height = 1;
2681
+ var pixelCtx = pixel.getContext("2d");
2682
+
2683
+ var copy = document.createElement("canvas");
2684
+ copy.width = w;
2685
+ copy.height = h;
2686
+ var copyCtx = copy.getContext("2d");
2687
+ copyCtx.drawImage(params.canvas,rect.left,rect.top,w,h, 0,0,w,h);
2688
+
2689
+ var diameter = radius * 2;
2690
+
2691
+ if (transparent)
2692
+ ctx.clearRect(rect.left, rect.top, rect.width, rect.height);
2693
+
2694
+ var noiseRadius = radius * noise;
2695
+
2696
+ var dist = 1 / density;
2697
+
2698
+ for (var y=0;y<h+radius;y+=diameter*dist) {
2699
+ for (var x=0;x<w+radius;x+=diameter*dist) {
2700
+ rndX = noise ? (x+((Math.random()*2-1) * noiseRadius))>>0 : x;
2701
+ rndY = noise ? (y+((Math.random()*2-1) * noiseRadius))>>0 : y;
2702
+
2703
+ var pixX = rndX - radius;
2704
+ var pixY = rndY - radius;
2705
+ if (pixX < 0) pixX = 0;
2706
+ if (pixY < 0) pixY = 0;
2707
+
2708
+ var cx = rndX + rect.left;
2709
+ var cy = rndY + rect.top;
2710
+ if (cx < 0) cx = 0;
2711
+ if (cx > canvasWidth) cx = canvasWidth;
2712
+ if (cy < 0) cy = 0;
2713
+ if (cy > canvasHeight) cy = canvasHeight;
2714
+
2715
+ var diameterX = diameter;
2716
+ var diameterY = diameter;
2717
+
2718
+ if (diameterX + pixX > w)
2719
+ diameterX = w - pixX;
2720
+ if (diameterY + pixY > h)
2721
+ diameterY = h - pixY;
2722
+ if (diameterX < 1) diameterX = 1;
2723
+ if (diameterY < 1) diameterY = 1;
2724
+
2725
+ pixelCtx.drawImage(copy, pixX, pixY, diameterX, diameterY, 0, 0, 1, 1);
2726
+ var data = pixelCtx.getImageData(0,0,1,1).data;
2727
+
2728
+ ctx.fillStyle = "rgb(" + data[0] + "," + data[1] + "," + data[2] + ")";
2729
+ ctx.beginPath();
2730
+ ctx.arc(cx, cy, radius, 0, Math.PI*2, true);
2731
+ ctx.closePath();
2732
+ ctx.fill();
2733
+ }
2734
+ }
2735
+
2736
+ params.useData = false;
2737
+
2738
+ return true;
2739
+ }
2740
+ },
2741
+ checkSupport : function() {
2742
+ return (Pixastic.Client.hasCanvasImageData());
2743
+ }
2744
+ }/*
2745
+ * Pixastic Lib - Remove noise - v0.1.0
2746
+ * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
2747
+ * License: [http://www.pixastic.com/lib/license.txt]
2748
+ */
2749
+
2750
+ Pixastic.Actions.removenoise = {
2751
+ process : function(params) {
2752
+
2753
+ if (Pixastic.Client.hasCanvasImageData()) {
2754
+ var data = Pixastic.prepareData(params);
2755
+
2756
+ var rect = params.options.rect;
2757
+ var w = rect.width;
2758
+ var h = rect.height;
2759
+
2760
+ var w4 = w*4;
2761
+ var y = h;
2762
+ do {
2763
+ var offsetY = (y-1)*w4;
2764
+
2765
+ var nextY = (y == h) ? y - 1 : y;
2766
+ var prevY = (y == 1) ? 0 : y-2;
2767
+
2768
+ var offsetYPrev = prevY*w*4;
2769
+ var offsetYNext = nextY*w*4;
2770
+
2771
+ var x = w;
2772
+ do {
2773
+ var offset = offsetY + (x*4-4);
2774
+
2775
+ var offsetPrev = offsetYPrev + ((x == 1) ? 0 : x-2) * 4;
2776
+ var offsetNext = offsetYNext + ((x == w) ? x-1 : x) * 4;
2777
+
2778
+ var minR, maxR, minG, maxG, minB, maxB;
2779
+
2780
+ minR = maxR = data[offsetPrev];
2781
+ var r1 = data[offset-4], r2 = data[offset+4], r3 = data[offsetNext];
2782
+ if (r1 < minR) minR = r1;
2783
+ if (r2 < minR) minR = r2;
2784
+ if (r3 < minR) minR = r3;
2785
+ if (r1 > maxR) maxR = r1;
2786
+ if (r2 > maxR) maxR = r2;
2787
+ if (r3 > maxR) maxR = r3;
2788
+
2789
+ minG = maxG = data[offsetPrev+1];
2790
+ var g1 = data[offset-3], g2 = data[offset+5], g3 = data[offsetNext+1];
2791
+ if (g1 < minG) minG = g1;
2792
+ if (g2 < minG) minG = g2;
2793
+ if (g3 < minG) minG = g3;
2794
+ if (g1 > maxG) maxG = g1;
2795
+ if (g2 > maxG) maxG = g2;
2796
+ if (g3 > maxG) maxG = g3;
2797
+
2798
+ minB = maxB = data[offsetPrev+2];
2799
+ var b1 = data[offset-2], b2 = data[offset+6], b3 = data[offsetNext+2];
2800
+ if (b1 < minB) minB = b1;
2801
+ if (b2 < minB) minB = b2;
2802
+ if (b3 < minB) minB = b3;
2803
+ if (b1 > maxB) maxB = b1;
2804
+ if (b2 > maxB) maxB = b2;
2805
+ if (b3 > maxB) maxB = b3;
2806
+
2807
+ if (data[offset] > maxR) {
2808
+ data[offset] = maxR;
2809
+ } else if (data[offset] < minR) {
2810
+ data[offset] = minR;
2811
+ }
2812
+ if (data[offset+1] > maxG) {
2813
+ data[offset+1] = maxG;
2814
+ } else if (data[offset+1] < minG) {
2815
+ data[offset+1] = minG;
2816
+ }
2817
+ if (data[offset+2] > maxB) {
2818
+ data[offset+2] = maxB;
2819
+ } else if (data[offset+2] < minB) {
2820
+ data[offset+2] = minB;
2821
+ }
2822
+
2823
+ } while (--x);
2824
+ } while (--y);
2825
+
2826
+ return true;
2827
+ }
2828
+ },
2829
+ checkSupport : function() {
2830
+ return Pixastic.Client.hasCanvasImageData();
2831
+ }
2832
+ }/*
2833
+ * Pixastic Lib - Resize - v0.1.0
2834
+ * Copyright (c) 2009 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
2835
+ * License: [http://www.pixastic.com/lib/license.txt]
2836
+ */
2837
+
2838
+ Pixastic.Actions.resize = {
2839
+ process : function(params) {
2840
+ if (Pixastic.Client.hasCanvas()) {
2841
+ var width = parseInt(params.options.width,10);
2842
+ var height = parseInt(params.options.height,10);
2843
+ var canvas = params.canvas;
2844
+
2845
+ if (width < 1) width = 1;
2846
+ if (width < 2) width = 2;
2847
+
2848
+ var copy = document.createElement("canvas");
2849
+ copy.width = width;
2850
+ copy.height = height;
2851
+
2852
+ copy.getContext("2d").drawImage(canvas,0,0,width,height);
2853
+ canvas.width = width;
2854
+ canvas.height = height;
2855
+
2856
+ canvas.getContext("2d").drawImage(copy,0,0);
2857
+
2858
+ params.useData = false;
2859
+ return true;
2860
+ }
2861
+ },
2862
+ checkSupport : function() {
2863
+ return Pixastic.Client.hasCanvas();
2864
+ }
2865
+ }
2866
+
2867
+
2868
+ /*
2869
+ * Pixastic Lib - Rotate - v0.1.0
2870
+ * Copyright (c) 2009 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
2871
+ * License: [http://www.pixastic.com/lib/license.txt]
2872
+ */
2873
+
2874
+ Pixastic.Actions.rotate = {
2875
+ process : function(params) {
2876
+ if (Pixastic.Client.hasCanvas()) {
2877
+ var canvas = params.canvas;
2878
+
2879
+ var width = params.width;
2880
+ var height = params.height;
2881
+
2882
+ var copy = document.createElement("canvas");
2883
+ copy.width = width;
2884
+ copy.height = height;
2885
+ copy.getContext("2d").drawImage(canvas,0,0,width,height);
2886
+
2887
+ var angle = -parseFloat(params.options.angle) * Math.PI / 180;
2888
+
2889
+ var dimAngle = angle;
2890
+ if (dimAngle > Math.PI*0.5)
2891
+ dimAngle = Math.PI - dimAngle;
2892
+ if (dimAngle < -Math.PI*0.5)
2893
+ dimAngle = -Math.PI - dimAngle;
2894
+
2895
+ var diag = Math.sqrt(width*width + height*height);
2896
+
2897
+ var diagAngle1 = Math.abs(dimAngle) - Math.abs(Math.atan2(height, width));
2898
+ var diagAngle2 = Math.abs(dimAngle) + Math.abs(Math.atan2(height, width));
2899
+
2900
+ var newWidth = Math.abs(Math.cos(diagAngle1) * diag);
2901
+ var newHeight = Math.abs(Math.sin(diagAngle2) * diag);
2902
+
2903
+ canvas.width = newWidth;
2904
+ canvas.height = newHeight;
2905
+
2906
+ var ctx = canvas.getContext("2d");
2907
+ ctx.translate(newWidth/2, newHeight/2);
2908
+ ctx.rotate(angle);
2909
+ ctx.drawImage(copy,-width/2,-height/2);
2910
+
2911
+ params.useData = false;
2912
+ return true;
2913
+ }
2914
+ },
2915
+ checkSupport : function() {
2916
+ return Pixastic.Client.hasCanvas();
2917
+ }
2918
+ }
2919
+
2920
+
2921
+ /*
2922
+ * Pixastic Lib - Sepia filter - v0.1.0
2923
+ * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
2924
+ * License: [http://www.pixastic.com/lib/license.txt]
2925
+ */
2926
+
2927
+ Pixastic.Actions.sepia = {
2928
+
2929
+ process : function(params) {
2930
+ var mode = (parseInt(params.options.mode,10)||0);
2931
+ if (mode < 0) mode = 0;
2932
+ if (mode > 1) mode = 1;
2933
+
2934
+ if (Pixastic.Client.hasCanvasImageData()) {
2935
+ var data = Pixastic.prepareData(params);
2936
+ var rect = params.options.rect;
2937
+ var w = rect.width;
2938
+ var h = rect.height;
2939
+ var w4 = w*4;
2940
+ var y = h;
2941
+ do {
2942
+ var offsetY = (y-1)*w4;
2943
+ var x = w;
2944
+ do {
2945
+ var offset = offsetY + (x-1)*4;
2946
+
2947
+ if (mode) {
2948
+ // a bit faster, but not as good
2949
+ var d = data[offset] * 0.299 + data[offset+1] * 0.587 + data[offset+2] * 0.114;
2950
+ var r = (d + 39);
2951
+ var g = (d + 14);
2952
+ var b = (d - 36);
2953
+ } else {
2954
+ // Microsoft
2955
+ var or = data[offset];
2956
+ var og = data[offset+1];
2957
+ var ob = data[offset+2];
2958
+
2959
+ var r = (or * 0.393 + og * 0.769 + ob * 0.189);
2960
+ var g = (or * 0.349 + og * 0.686 + ob * 0.168);
2961
+ var b = (or * 0.272 + og * 0.534 + ob * 0.131);
2962
+ }
2963
+
2964
+ if (r < 0) r = 0; if (r > 255) r = 255;
2965
+ if (g < 0) g = 0; if (g > 255) g = 255;
2966
+ if (b < 0) b = 0; if (b > 255) b = 255;
2967
+
2968
+ data[offset] = r;
2969
+ data[offset+1] = g;
2970
+ data[offset+2] = b;
2971
+
2972
+ } while (--x);
2973
+ } while (--y);
2974
+ return true;
2975
+ }
2976
+ },
2977
+ checkSupport : function() {
2978
+ return Pixastic.Client.hasCanvasImageData();
2979
+ }
2980
+ }/*
2981
+ * Pixastic Lib - Sharpen filter - v0.1.0
2982
+ * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
2983
+ * License: [http://www.pixastic.com/lib/license.txt]
2984
+ */
2985
+
2986
+ Pixastic.Actions.sharpen = {
2987
+ process : function(params) {
2988
+
2989
+ var strength = 0;
2990
+ if (typeof params.options.amount != "undefined")
2991
+ strength = parseFloat(params.options.amount)||0;
2992
+
2993
+ if (strength < 0) strength = 0;
2994
+ if (strength > 1) strength = 1;
2995
+
2996
+ if (Pixastic.Client.hasCanvasImageData()) {
2997
+ var data = Pixastic.prepareData(params);
2998
+ var dataCopy = Pixastic.prepareData(params, true)
2999
+
3000
+ var mul = 15;
3001
+ var mulOther = 1 + 3*strength;
3002
+
3003
+ var kernel = [
3004
+ [0, -mulOther, 0],
3005
+ [-mulOther, mul, -mulOther],
3006
+ [0, -mulOther, 0]
3007
+ ];
3008
+
3009
+ var weight = 0;
3010
+ for (var i=0;i<3;i++) {
3011
+ for (var j=0;j<3;j++) {
3012
+ weight += kernel[i][j];
3013
+ }
3014
+ }
3015
+
3016
+ weight = 1 / weight;
3017
+
3018
+ var rect = params.options.rect;
3019
+ var w = rect.width;
3020
+ var h = rect.height;
3021
+
3022
+ mul *= weight;
3023
+ mulOther *= weight;
3024
+
3025
+ var w4 = w*4;
3026
+ var y = h;
3027
+ do {
3028
+ var offsetY = (y-1)*w4;
3029
+
3030
+ var nextY = (y == h) ? y - 1 : y;
3031
+ var prevY = (y == 1) ? 0 : y-2;
3032
+
3033
+ var offsetYPrev = prevY*w4;
3034
+ var offsetYNext = nextY*w4;
3035
+
3036
+ var x = w;
3037
+ do {
3038
+ var offset = offsetY + (x*4-4);
3039
+
3040
+ var offsetPrev = offsetYPrev + ((x == 1) ? 0 : x-2) * 4;
3041
+ var offsetNext = offsetYNext + ((x == w) ? x-1 : x) * 4;
3042
+
3043
+ var r = ((
3044
+ - dataCopy[offsetPrev]
3045
+ - dataCopy[offset-4]
3046
+ - dataCopy[offset+4]
3047
+ - dataCopy[offsetNext]) * mulOther
3048
+ + dataCopy[offset] * mul
3049
+ );
3050
+
3051
+ var g = ((
3052
+ - dataCopy[offsetPrev+1]
3053
+ - dataCopy[offset-3]
3054
+ - dataCopy[offset+5]
3055
+ - dataCopy[offsetNext+1]) * mulOther
3056
+ + dataCopy[offset+1] * mul
3057
+ );
3058
+
3059
+ var b = ((
3060
+ - dataCopy[offsetPrev+2]
3061
+ - dataCopy[offset-2]
3062
+ - dataCopy[offset+6]
3063
+ - dataCopy[offsetNext+2]) * mulOther
3064
+ + dataCopy[offset+2] * mul
3065
+ );
3066
+
3067
+
3068
+ if (r < 0 ) r = 0;
3069
+ if (g < 0 ) g = 0;
3070
+ if (b < 0 ) b = 0;
3071
+ if (r > 255 ) r = 255;
3072
+ if (g > 255 ) g = 255;
3073
+ if (b > 255 ) b = 255;
3074
+
3075
+ data[offset] = r;
3076
+ data[offset+1] = g;
3077
+ data[offset+2] = b;
3078
+
3079
+ } while (--x);
3080
+ } while (--y);
3081
+
3082
+ return true;
3083
+
3084
+ }
3085
+ },
3086
+ checkSupport : function() {
3087
+ return Pixastic.Client.hasCanvasImageData();
3088
+ }
3089
+ }
3090
+ /*
3091
+ * Pixastic Lib - Solarize filter - v0.1.0
3092
+ * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
3093
+ * License: [http://www.pixastic.com/lib/license.txt]
3094
+ */
3095
+
3096
+ Pixastic.Actions.solarize = {
3097
+
3098
+ process : function(params) {
3099
+ var useAverage = !!(params.options.average && params.options.average != "false");
3100
+
3101
+ if (Pixastic.Client.hasCanvasImageData()) {
3102
+ var data = Pixastic.prepareData(params);
3103
+ var rect = params.options.rect;
3104
+ var w = rect.width;
3105
+ var h = rect.height;
3106
+ var w4 = w*4;
3107
+ var y = h;
3108
+ do {
3109
+ var offsetY = (y-1)*w4;
3110
+ var x = w;
3111
+ do {
3112
+ var offset = offsetY + (x-1)*4;
3113
+
3114
+ var r = data[offset];
3115
+ var g = data[offset+1];
3116
+ var b = data[offset+2];
3117
+
3118
+ if (r > 127) r = 255 - r;
3119
+ if (g > 127) g = 255 - g;
3120
+ if (b > 127) b = 255 - b;
3121
+
3122
+ data[offset] = r;
3123
+ data[offset+1] = g;
3124
+ data[offset+2] = b;
3125
+
3126
+ } while (--x);
3127
+ } while (--y);
3128
+ return true;
3129
+ }
3130
+ },
3131
+ checkSupport : function() {
3132
+ return (Pixastic.Client.hasCanvasImageData());
3133
+ }
3134
+ }/*
3135
+ * Pixastic Lib - USM - v0.1.0
3136
+ * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
3137
+ * License: [http://www.pixastic.com/lib/license.txt]
3138
+ */
3139
+
3140
+
3141
+ Pixastic.Actions.unsharpmask = {
3142
+ process : function(params) {
3143
+
3144
+ var amount = (parseFloat(params.options.amount)||0);
3145
+ var blurAmount = parseFloat(params.options.radius)||0;
3146
+ var threshold = parseFloat(params.options.threshold)||0;
3147
+
3148
+ amount = Math.min(500,Math.max(0,amount)) / 2;
3149
+ blurAmount = Math.min(5,Math.max(0,blurAmount)) / 10;
3150
+ threshold = Math.min(255,Math.max(0,threshold));
3151
+
3152
+ threshold--;
3153
+ var thresholdNeg = -threshold;
3154
+
3155
+ amount *= 0.016;
3156
+ amount++;
3157
+
3158
+ if (Pixastic.Client.hasCanvasImageData()) {
3159
+ var rect = params.options.rect;
3160
+
3161
+ var blurCanvas = document.createElement("canvas");
3162
+ blurCanvas.width = params.width;
3163
+ blurCanvas.height = params.height;
3164
+ var blurCtx = blurCanvas.getContext("2d");
3165
+ blurCtx.drawImage(params.canvas,0,0);
3166
+
3167
+ var scale = 2;
3168
+ var smallWidth = Math.round(params.width / scale);
3169
+ var smallHeight = Math.round(params.height / scale);
3170
+
3171
+ var copy = document.createElement("canvas");
3172
+ copy.width = smallWidth;
3173
+ copy.height = smallHeight;
3174
+
3175
+ var steps = Math.round(blurAmount * 20);
3176
+
3177
+ var copyCtx = copy.getContext("2d");
3178
+ for (var i=0;i<steps;i++) {
3179
+ var scaledWidth = Math.max(1,Math.round(smallWidth - i));
3180
+ var scaledHeight = Math.max(1,Math.round(smallHeight - i));
3181
+
3182
+ copyCtx.clearRect(0,0,smallWidth,smallHeight);
3183
+
3184
+ copyCtx.drawImage(
3185
+ blurCanvas,
3186
+ 0,0,params.width,params.height,
3187
+ 0,0,scaledWidth,scaledHeight
3188
+ );
3189
+
3190
+ blurCtx.clearRect(0,0,params.width,params.height);
3191
+
3192
+ blurCtx.drawImage(
3193
+ copy,
3194
+ 0,0,scaledWidth,scaledHeight,
3195
+ 0,0,params.width,params.height
3196
+ );
3197
+ }
3198
+
3199
+ var data = Pixastic.prepareData(params);
3200
+ var blurData = Pixastic.prepareData({canvas:blurCanvas,options:params.options});
3201
+ var w = rect.width;
3202
+ var h = rect.height;
3203
+ var w4 = w*4;
3204
+ var y = h;
3205
+ do {
3206
+ var offsetY = (y-1)*w4;
3207
+ var x = w;
3208
+ do {
3209
+ var offset = offsetY + (x*4-4);
3210
+
3211
+ var difR = data[offset] - blurData[offset];
3212
+ if (difR > threshold || difR < thresholdNeg) {
3213
+ var blurR = blurData[offset];
3214
+ blurR = amount * difR + blurR;
3215
+ data[offset] = blurR > 255 ? 255 : (blurR < 0 ? 0 : blurR);
3216
+ }
3217
+
3218
+ var difG = data[offset+1] - blurData[offset+1];
3219
+ if (difG > threshold || difG < thresholdNeg) {
3220
+ var blurG = blurData[offset+1];
3221
+ blurG = amount * difG + blurG;
3222
+ data[offset+1] = blurG > 255 ? 255 : (blurG < 0 ? 0 : blurG);
3223
+ }
3224
+
3225
+ var difB = data[offset+2] - blurData[offset+2];
3226
+ if (difB > threshold || difB < thresholdNeg) {
3227
+ var blurB = blurData[offset+2];
3228
+ blurB = amount * difB + blurB;
3229
+ data[offset+2] = blurB > 255 ? 255 : (blurB < 0 ? 0 : blurB);
3230
+ }
3231
+
3232
+ } while (--x);
3233
+ } while (--y);
3234
+
3235
+ return true;
3236
+ }
3237
+ },
3238
+ checkSupport : function() {
3239
+ return Pixastic.Client.hasCanvasImageData();
3240
+ }
3241
+ }
3242
+
3243
+
3244
+