wpDataTables Lite - Version 1.2.3

Version Description

  • Security issues fixed for deleting and loading wpDataTable.
Download this release

Release Info

Developer wpDataTables
Plugin Icon 128x128 wpDataTables Lite
Version 1.2.3
Comparing to
See all releases

Code changes from version 1.2.2 to 1.2.3

Files changed (596) hide show
  1. Readme_documentation.pdf +0 -0
  2. assets/css/datatables.responsive.css +0 -0
  3. assets/css/datepicker.default.css +0 -0
  4. assets/css/datepicker.default.date.css +0 -0
  5. assets/css/datepicker.default.time.css +0 -0
  6. assets/css/handsontable.full.min.css +0 -0
  7. assets/css/icheck.minimal.css +0 -0
  8. assets/css/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  9. assets/css/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  10. assets/css/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  11. assets/css/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  12. assets/css/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  13. assets/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  14. assets/css/images/ui-icons_222222_256x240.png +0 -0
  15. assets/css/images/ui-icons_2e83ff_256x240.png +0 -0
  16. assets/css/images/ui-icons_454545_256x240.png +0 -0
  17. assets/css/images/ui-icons_888888_256x240.png +0 -0
  18. assets/css/images/ui-icons_cd0a0a_256x240.png +0 -0
  19. assets/css/jquery-ui.css +1177 -0
  20. assets/css/jquery-ui.min.css +0 -0
  21. assets/css/jquery.dataTables.css +0 -0
  22. assets/css/jquery.fs.selecter-arrow.png +0 -0
  23. assets/css/jquery.fs.selecter.css +0 -0
  24. assets/css/jquery.fs.tipper-icon.png +0 -0
  25. assets/css/jquery.remodal.css +0 -0
  26. assets/css/jquery.tagsinput.min.css +0 -0
  27. assets/css/minimal.png +0 -0
  28. assets/css/minimal@2x.png +0 -0
  29. assets/css/phpDataTables.css +0 -0
  30. assets/css/wpDataTablesSkin.css +0 -0
  31. assets/css/wpDataTablesSkin_1.css +0 -0
  32. assets/css/wpdatatables-excel.min.css +0 -0
  33. assets/css/wpdatatables.min.css +0 -0
  34. assets/css/wpdatatables_admin.css +0 -0
  35. assets/fonts/wpdatatables-icons.eot +0 -0
  36. assets/fonts/wpdatatables-icons.svg +0 -0
  37. assets/fonts/wpdatatables-icons.ttf +0 -0
  38. assets/fonts/wpdatatables-icons.woff +0 -0
  39. assets/fonts/wpdatatablesicons-base.eot +0 -0
  40. assets/fonts/wpdatatablesicons-base.svg +0 -0
  41. assets/fonts/wpdatatablesicons-base.ttf +0 -0
  42. assets/fonts/wpdatatablesicons-base.woff +0 -0
  43. assets/img/buttonplus.png +0 -0
  44. assets/img/chart_thumbs/google_area_chart.jpg +0 -0
  45. assets/img/chart_thumbs/google_bar_chart.jpg +0 -0
  46. assets/img/chart_thumbs/google_bubble_chart.jpg +0 -0
  47. assets/img/chart_thumbs/google_candlestick_chart.jpg +0 -0
  48. assets/img/chart_thumbs/google_column_chart.jpg +0 -0
  49. assets/img/chart_thumbs/google_donut_chart.jpg +0 -0
  50. assets/img/chart_thumbs/google_gauge_chart.jpg +0 -0
  51. assets/img/chart_thumbs/google_histogram.jpg +0 -0
  52. assets/img/chart_thumbs/google_line_chart.jpg +0 -0
  53. assets/img/chart_thumbs/google_pie_chart.jpg +0 -0
  54. assets/img/chart_thumbs/google_scatter_chart.jpg +0 -0
  55. assets/img/chart_thumbs/google_stepped_area_chart.jpg +0 -0
  56. assets/img/chart_thumbs/highcharts_3d_column_chart.jpg +0 -0
  57. assets/img/chart_thumbs/highcharts_3d_donut_chart.jpg +0 -0
  58. assets/img/chart_thumbs/highcharts_3d_pie_chart.jpg +0 -0
  59. assets/img/chart_thumbs/highcharts_angular_gauge_chart.jpg +0 -0
  60. assets/img/chart_thumbs/highcharts_basic_area_chart.jpg +0 -0
  61. assets/img/chart_thumbs/highcharts_basic_bar_chart.jpg +0 -0
  62. assets/img/chart_thumbs/highcharts_basic_column_chart.jpg +0 -0
  63. assets/img/chart_thumbs/highcharts_donut_chart.jpg +0 -0
  64. assets/img/chart_thumbs/highcharts_line_chart.jpg +0 -0
  65. assets/img/chart_thumbs/highcharts_pie_chart.jpg +0 -0
  66. assets/img/chart_thumbs/highcharts_pie_with_gradient_chart.jpg +0 -0
  67. assets/img/chart_thumbs/highcharts_scatter_plot.jpg +0 -0
  68. assets/img/chart_thumbs/highcharts_solid_gauge_chart.jpg +0 -0
  69. assets/img/chart_thumbs/highcharts_stacked_area_chart.jpg +0 -0
  70. assets/img/chart_thumbs/highcharts_stacked_bar_chart.jpg +0 -0
  71. assets/img/chart_thumbs/highcharts_stacked_column_chart.jpg +0 -0
  72. assets/img/document-blank-icon.png +0 -0
  73. assets/img/icons.png +0 -0
  74. assets/img/loadingAnimation.gif +0 -0
  75. assets/img/reportbuilder_addon.png +0 -0
  76. assets/img/spinner.gif +0 -0
  77. assets/img/vc-charts-icon.png +0 -0
  78. assets/img/vc-icon.png +0 -0
  79. assets/img/wpdatatables-logo.png +0 -0
  80. assets/index.html +0 -0
  81. assets/js/colorpicker/bg.png +0 -0
  82. assets/js/colorpicker/hue.png +0 -0
  83. assets/js/colorpicker/jquery.modcoder.excolor.js +13 -0
  84. assets/js/colorpicker/ok.png +0 -0
  85. assets/js/colorpicker/sel.gif +0 -0
  86. assets/js/colorpicker/shbg.png +0 -0
  87. assets/js/colorpicker/slider.gif +0 -0
  88. assets/js/colorpicker/transp.gif +0 -0
  89. assets/js/colorpicker/transp0.gif +0 -0
  90. assets/js/datepicker/legacy.js +10 -0
  91. assets/js/datepicker/picker.date.js +5 -0
  92. assets/js/datepicker/picker.js +7 -0
  93. assets/js/datepicker/picker.time.js +5 -0
  94. assets/js/export-tools/buttons.bootstrap.js +0 -0
  95. assets/js/export-tools/buttons.bootstrap.min.js +0 -0
  96. assets/js/export-tools/buttons.bootstrap4.js +0 -0
  97. assets/js/export-tools/buttons.bootstrap4.min.js +0 -0
  98. assets/js/export-tools/buttons.colVis.js +0 -0
  99. assets/js/export-tools/buttons.colVis.min.js +0 -0
  100. assets/js/export-tools/buttons.dataTables.css +0 -0
  101. assets/js/export-tools/buttons.flash.js +0 -0
  102. assets/js/export-tools/buttons.flash.min.js +0 -0
  103. assets/js/export-tools/buttons.foundation.js +0 -0
  104. assets/js/export-tools/buttons.foundation.min.js +0 -0
  105. assets/js/export-tools/buttons.html5.js +0 -0
  106. assets/js/export-tools/buttons.html5.min.js +0 -0
  107. assets/js/export-tools/buttons.jqueryui.js +0 -0
  108. assets/js/export-tools/buttons.jqueryui.min.js +0 -0
  109. assets/js/export-tools/buttons.print.js +0 -0
  110. assets/js/export-tools/buttons.print.min.js +0 -0
  111. assets/js/export-tools/dataTables.buttons.js +0 -0
  112. assets/js/export-tools/dataTables.buttons.min.js +0 -0
  113. assets/js/export-tools/jszip.js +0 -0
  114. assets/js/export-tools/jszip.min.js +0 -0
  115. assets/js/export-tools/pdfmake.js +12 -12
  116. assets/js/export-tools/pdfmake.min.js +0 -0
  117. assets/js/export-tools/vfs_fonts.js +0 -0
  118. assets/js/fileupload/jquery.fileupload-jquery-ui.js +144 -0
  119. assets/js/fileupload/jquery.fileupload-process.js +172 -0
  120. assets/js/fileupload/jquery.fileupload-ui.js +699 -0
  121. assets/js/fileupload/jquery.fileupload.js +1367 -0
  122. assets/js/fileupload/jquery.iframe-transport.js +208 -0
  123. assets/js/handsontable/handsontable.full.js +0 -0
  124. assets/js/handsontable/handsontable.full.min.js +0 -0
  125. assets/js/icheck/icheck.min.js +11 -0
  126. assets/js/jquery-datatables/FixedHeader.js +0 -0
  127. assets/js/jquery-datatables/jquery.dataTables.min.js +0 -0
  128. assets/js/jquery-datatables/jquery.dataTables.rowGrouping.js +0 -0
  129. assets/js/jquery-datatables/jquery.dataTables.rowGrouping.min.js +0 -0
  130. assets/js/jquery-datatables/media/swf/copy_cvs_xls_pdf.swf +0 -0
  131. assets/js/jsrender/jsrender.min.js +3 -3
  132. assets/js/jsrender/jsrender.min.js.map +0 -0
  133. assets/js/maskmoney/jquery.maskMoney.js +392 -0
  134. assets/js/moment/LICENSE +0 -0
  135. assets/js/moment/locale/af.js +0 -0
  136. assets/js/moment/locale/ar-ma.js +0 -0
  137. assets/js/moment/locale/ar-sa.js +0 -0
  138. assets/js/moment/locale/ar-tn.js +0 -0
  139. assets/js/moment/locale/ar.js +0 -0
  140. assets/js/moment/locale/az.js +0 -0
  141. assets/js/moment/locale/be.js +0 -0
  142. assets/js/moment/locale/bg.js +0 -0
  143. assets/js/moment/locale/bn.js +0 -0
  144. assets/js/moment/locale/bo.js +0 -0
  145. assets/js/moment/locale/br.js +0 -0
  146. assets/js/moment/locale/bs.js +0 -0
  147. assets/js/moment/locale/ca.js +0 -0
  148. assets/js/moment/locale/cs.js +0 -0
  149. assets/js/moment/locale/cv.js +0 -0
  150. assets/js/moment/locale/cy.js +0 -0
  151. assets/js/moment/locale/da.js +0 -0
  152. assets/js/moment/locale/de-at.js +0 -0
  153. assets/js/moment/locale/de.js +0 -0
  154. assets/js/moment/locale/dv.js +0 -0
  155. assets/js/moment/locale/el.js +0 -0
  156. assets/js/moment/locale/en-au.js +0 -0
  157. assets/js/moment/locale/en-ca.js +0 -0
  158. assets/js/moment/locale/en-gb.js +0 -0
  159. assets/js/moment/locale/en-ie.js +0 -0
  160. assets/js/moment/locale/en-nz.js +0 -0
  161. assets/js/moment/locale/eo.js +0 -0
  162. assets/js/moment/locale/es.js +0 -0
  163. assets/js/moment/locale/et.js +0 -0
  164. assets/js/moment/locale/eu.js +0 -0
  165. assets/js/moment/locale/fa.js +0 -0
  166. assets/js/moment/locale/fi.js +0 -0
  167. assets/js/moment/locale/fo.js +0 -0
  168. assets/js/moment/locale/fr-ca.js +0 -0
  169. assets/js/moment/locale/fr-ch.js +0 -0
  170. assets/js/moment/locale/fr.js +0 -0
  171. assets/js/moment/locale/fy.js +0 -0
  172. assets/js/moment/locale/gd.js +0 -0
  173. assets/js/moment/locale/gl.js +0 -0
  174. assets/js/moment/locale/he.js +0 -0
  175. assets/js/moment/locale/hi.js +0 -0
  176. assets/js/moment/locale/hr.js +0 -0
  177. assets/js/moment/locale/hu.js +0 -0
  178. assets/js/moment/locale/hy-am.js +0 -0
  179. assets/js/moment/locale/id.js +0 -0
  180. assets/js/moment/locale/is.js +0 -0
  181. assets/js/moment/locale/it.js +0 -0
  182. assets/js/moment/locale/ja.js +0 -0
  183. assets/js/moment/locale/jv.js +0 -0
  184. assets/js/moment/locale/ka.js +0 -0
  185. assets/js/moment/locale/kk.js +0 -0
  186. assets/js/moment/locale/km.js +0 -0
  187. assets/js/moment/locale/ko.js +0 -0
  188. assets/js/moment/locale/lb.js +0 -0
  189. assets/js/moment/locale/lo.js +0 -0
  190. assets/js/moment/locale/lt.js +0 -0
  191. assets/js/moment/locale/lv.js +0 -0
  192. assets/js/moment/locale/me.js +0 -0
  193. assets/js/moment/locale/mk.js +0 -0
  194. assets/js/moment/locale/ml.js +0 -0
  195. assets/js/moment/locale/mr.js +0 -0
  196. assets/js/moment/locale/ms-my.js +0 -0
  197. assets/js/moment/locale/ms.js +0 -0
  198. assets/js/moment/locale/my.js +0 -0
  199. assets/js/moment/locale/nb.js +0 -0
  200. assets/js/moment/locale/ne.js +0 -0
  201. assets/js/moment/locale/nl.js +0 -0
  202. assets/js/moment/locale/nn.js +0 -0
  203. assets/js/moment/locale/pl.js +0 -0
  204. assets/js/moment/locale/pt-br.js +0 -0
  205. assets/js/moment/locale/pt.js +0 -0
  206. assets/js/moment/locale/ro.js +0 -0
  207. assets/js/moment/locale/ru.js +0 -0
  208. assets/js/moment/locale/se.js +0 -0
  209. assets/js/moment/locale/si.js +0 -0
  210. assets/js/moment/locale/sk.js +0 -0
  211. assets/js/moment/locale/sl.js +0 -0
  212. assets/js/moment/locale/sq.js +0 -0
  213. assets/js/moment/locale/sr-cyrl.js +0 -0
  214. assets/js/moment/locale/sr.js +0 -0
  215. assets/js/moment/locale/sv.js +0 -0
  216. assets/js/moment/locale/sw.js +0 -0
  217. assets/js/moment/locale/ta.js +0 -0
  218. assets/js/moment/locale/te.js +0 -0
  219. assets/js/moment/locale/th.js +0 -0
  220. assets/js/moment/locale/tl-ph.js +0 -0
  221. assets/js/moment/locale/tlh.js +0 -0
  222. assets/js/moment/locale/tr.js +0 -0
  223. assets/js/moment/locale/tzl.js +0 -0
  224. assets/js/moment/locale/tzm-latn.js +0 -0
  225. assets/js/moment/locale/tzm.js +0 -0
  226. assets/js/moment/locale/uk.js +0 -0
  227. assets/js/moment/locale/uz.js +0 -0
  228. assets/js/moment/locale/vi.js +0 -0
  229. assets/js/moment/locale/zh-cn.js +0 -0
  230. assets/js/moment/locale/zh-tw.js +0 -0
  231. assets/js/moment/moment.js +0 -0
  232. assets/js/php-datatables/wpdatatables.funcs.js +334 -334
  233. assets/js/php-datatables/wpdatatables.funcs.min.js +0 -0
  234. assets/js/popup/jquery.remodal.min.js +0 -0
  235. assets/js/selecter/jquery.fs.selecter.min.js +0 -0
  236. assets/js/slider.gif +0 -0
  237. assets/js/tagsinput/jquery.tagsinput.js +0 -0
  238. assets/js/tagsinput/jquery.tagsinput.min.js +0 -0
  239. assets/js/urijs/URI.min.js +0 -0
  240. assets/js/wpdatatables/wpdatatables.js +0 -0
  241. assets/js/wpdatatables/wpdatatables.min.js +0 -0
  242. assets/js/wpdatatables/wpdatatables_admin.js +0 -0
  243. assets/js/wpdatatables/wpdatatables_chart_wizard.js +0 -0
  244. assets/js/wpdatatables/wpdatatables_edit_table.js +0 -0
  245. assets/js/wpdatatables/wpdatatables_mce.js +0 -0
  246. config/config.inc.php +0 -0
  247. controllers/wdt_admin.php +12 -7
  248. controllers/wdt_admin_ajax_actions.php +2 -0
  249. controllers/wdt_functions.php +4 -3
  250. languages/en_US/wpdatatables.mo +0 -0
  251. languages/en_US/wpdatatables.po +0 -0
  252. languages/nl_NL/nl_NL.mo +0 -0
  253. languages/nl_NL/nl_NL.po +0 -0
  254. languages/nl_NL/wpdatatables-nl_NL.mo +0 -0
  255. languages/nl_NL/wpdatatables-nl_NL.po +0 -0
  256. languages/ru_RU/wpdatatables-ru_RU.mo +0 -0
  257. languages/ru_RU/wpdatatables-ru_RU.po +0 -0
  258. lib/phpExcel/PHPExcel.php +0 -0
  259. lib/phpExcel/PHPExcel/Autoloader.php +0 -0
  260. lib/phpExcel/PHPExcel/CachedObjectStorage/APC.php +0 -0
  261. lib/phpExcel/PHPExcel/CachedObjectStorage/CacheBase.php +0 -0
  262. lib/phpExcel/PHPExcel/CachedObjectStorage/DiscISAM.php +0 -0
  263. lib/phpExcel/PHPExcel/CachedObjectStorage/ICache.php +0 -0
  264. lib/phpExcel/PHPExcel/CachedObjectStorage/Igbinary.php +0 -0
  265. lib/phpExcel/PHPExcel/CachedObjectStorage/Memcache.php +0 -0
  266. lib/phpExcel/PHPExcel/CachedObjectStorage/Memory.php +0 -0
  267. lib/phpExcel/PHPExcel/CachedObjectStorage/MemoryGZip.php +0 -0
  268. lib/phpExcel/PHPExcel/CachedObjectStorage/MemorySerialized.php +0 -0
  269. lib/phpExcel/PHPExcel/CachedObjectStorage/PHPTemp.php +0 -0
  270. lib/phpExcel/PHPExcel/CachedObjectStorage/SQLite.php +0 -0
  271. lib/phpExcel/PHPExcel/CachedObjectStorage/SQLite3.php +0 -0
  272. lib/phpExcel/PHPExcel/CachedObjectStorage/Wincache.php +0 -0
  273. lib/phpExcel/PHPExcel/CachedObjectStorageFactory.php +0 -0
  274. lib/phpExcel/PHPExcel/CalcEngine/CyclicReferenceStack.php +0 -0
  275. lib/phpExcel/PHPExcel/CalcEngine/Logger.php +0 -0
  276. lib/phpExcel/PHPExcel/Calculation.php +0 -0
  277. lib/phpExcel/PHPExcel/Calculation/Database.php +0 -0
  278. lib/phpExcel/PHPExcel/Calculation/DateTime.php +0 -0
  279. lib/phpExcel/PHPExcel/Calculation/Engineering.php +0 -0
  280. lib/phpExcel/PHPExcel/Calculation/Exception.php +0 -0
  281. lib/phpExcel/PHPExcel/Calculation/ExceptionHandler.php +0 -0
  282. lib/phpExcel/PHPExcel/Calculation/Financial.php +0 -0
  283. lib/phpExcel/PHPExcel/Calculation/FormulaParser.php +0 -0
  284. lib/phpExcel/PHPExcel/Calculation/FormulaToken.php +0 -0
  285. lib/phpExcel/PHPExcel/Calculation/Function.php +0 -0
  286. lib/phpExcel/PHPExcel/Calculation/Functions.php +0 -0
  287. lib/phpExcel/PHPExcel/Calculation/Logical.php +0 -0
  288. lib/phpExcel/PHPExcel/Calculation/LookupRef.php +0 -0
  289. lib/phpExcel/PHPExcel/Calculation/MathTrig.php +0 -0
  290. lib/phpExcel/PHPExcel/Calculation/Statistical.php +0 -0
  291. lib/phpExcel/PHPExcel/Calculation/TextData.php +0 -0
  292. lib/phpExcel/PHPExcel/Calculation/Token/Stack.php +0 -0
  293. lib/phpExcel/PHPExcel/Calculation/functionlist.txt +0 -0
  294. lib/phpExcel/PHPExcel/Cell.php +0 -0
  295. lib/phpExcel/PHPExcel/Cell/AdvancedValueBinder.php +0 -0
  296. lib/phpExcel/PHPExcel/Cell/DataType.php +0 -0
  297. lib/phpExcel/PHPExcel/Cell/DataValidation.php +0 -0
  298. lib/phpExcel/PHPExcel/Cell/DefaultValueBinder.php +0 -0
  299. lib/phpExcel/PHPExcel/Cell/Hyperlink.php +0 -0
  300. lib/phpExcel/PHPExcel/Cell/IValueBinder.php +0 -0
  301. lib/phpExcel/PHPExcel/Chart.php +0 -0
  302. lib/phpExcel/PHPExcel/Chart/Axis.php +0 -0
  303. lib/phpExcel/PHPExcel/Chart/DataSeries.php +0 -0
  304. lib/phpExcel/PHPExcel/Chart/DataSeriesValues.php +0 -0
  305. lib/phpExcel/PHPExcel/Chart/Exception.php +0 -0
  306. lib/phpExcel/PHPExcel/Chart/GridLines.php +0 -0
  307. lib/phpExcel/PHPExcel/Chart/Layout.php +0 -0
  308. lib/phpExcel/PHPExcel/Chart/Legend.php +0 -0
  309. lib/phpExcel/PHPExcel/Chart/PlotArea.php +0 -0
  310. lib/phpExcel/PHPExcel/Chart/Properties.php +0 -0
  311. lib/phpExcel/PHPExcel/Chart/Renderer/PHP Charting Libraries.txt +19 -19
  312. lib/phpExcel/PHPExcel/Chart/Renderer/jpgraph.php +0 -0
  313. lib/phpExcel/PHPExcel/Chart/Title.php +0 -0
  314. lib/phpExcel/PHPExcel/Comment.php +0 -0
  315. lib/phpExcel/PHPExcel/DocumentProperties.php +0 -0
  316. lib/phpExcel/PHPExcel/DocumentSecurity.php +0 -0
  317. lib/phpExcel/PHPExcel/Exception.php +0 -0
  318. lib/phpExcel/PHPExcel/HashTable.php +0 -0
  319. lib/phpExcel/PHPExcel/Helper/HTML.php +0 -0
  320. lib/phpExcel/PHPExcel/IComparable.php +0 -0
  321. lib/phpExcel/PHPExcel/IOFactory.php +0 -0
  322. lib/phpExcel/PHPExcel/NamedRange.php +0 -0
  323. lib/phpExcel/PHPExcel/Reader/Abstract.php +0 -0
  324. lib/phpExcel/PHPExcel/Reader/CSV.php +0 -0
  325. lib/phpExcel/PHPExcel/Reader/DefaultReadFilter.php +0 -0
  326. lib/phpExcel/PHPExcel/Reader/Excel2003XML.php +0 -0
  327. lib/phpExcel/PHPExcel/Reader/Excel2007.php +0 -0
  328. lib/phpExcel/PHPExcel/Reader/Excel2007/Chart.php +0 -0
  329. lib/phpExcel/PHPExcel/Reader/Excel2007/Theme.php +0 -0
  330. lib/phpExcel/PHPExcel/Reader/Excel5.php +0 -0
  331. lib/phpExcel/PHPExcel/Reader/Excel5/Color.php +0 -0
  332. lib/phpExcel/PHPExcel/Reader/Excel5/Color/BIFF5.php +0 -0
  333. lib/phpExcel/PHPExcel/Reader/Excel5/Color/BIFF8.php +0 -0
  334. lib/phpExcel/PHPExcel/Reader/Excel5/Color/BuiltIn.php +0 -0
  335. lib/phpExcel/PHPExcel/Reader/Excel5/ErrorCode.php +0 -0
  336. lib/phpExcel/PHPExcel/Reader/Excel5/Escher.php +0 -0
  337. lib/phpExcel/PHPExcel/Reader/Excel5/MD5.php +0 -0
  338. lib/phpExcel/PHPExcel/Reader/Excel5/RC4.php +0 -0
  339. lib/phpExcel/PHPExcel/Reader/Excel5/Style/Border.php +0 -0
  340. lib/phpExcel/PHPExcel/Reader/Excel5/Style/FillPattern.php +0 -0
  341. lib/phpExcel/PHPExcel/Reader/Exception.php +0 -0
  342. lib/phpExcel/PHPExcel/Reader/Gnumeric.php +0 -0
  343. lib/phpExcel/PHPExcel/Reader/HTML.php +0 -0
  344. lib/phpExcel/PHPExcel/Reader/IReadFilter.php +0 -0
  345. lib/phpExcel/PHPExcel/Reader/IReader.php +0 -0
  346. lib/phpExcel/PHPExcel/Reader/OOCalc.php +0 -0
  347. lib/phpExcel/PHPExcel/Reader/SYLK.php +0 -0
  348. lib/phpExcel/PHPExcel/ReferenceHelper.php +0 -0
  349. lib/phpExcel/PHPExcel/RichText.php +0 -0
  350. lib/phpExcel/PHPExcel/RichText/ITextElement.php +0 -0
  351. lib/phpExcel/PHPExcel/RichText/Run.php +0 -0
  352. lib/phpExcel/PHPExcel/RichText/TextElement.php +0 -0
  353. lib/phpExcel/PHPExcel/Settings.php +0 -0
  354. lib/phpExcel/PHPExcel/Shared/CodePage.php +0 -0
  355. lib/phpExcel/PHPExcel/Shared/Date.php +0 -0
  356. lib/phpExcel/PHPExcel/Shared/Drawing.php +0 -0
  357. lib/phpExcel/PHPExcel/Shared/Escher.php +0 -0
  358. lib/phpExcel/PHPExcel/Shared/Escher/DgContainer.php +0 -0
  359. lib/phpExcel/PHPExcel/Shared/Escher/DgContainer/SpgrContainer.php +0 -0
  360. lib/phpExcel/PHPExcel/Shared/Escher/DgContainer/SpgrContainer/SpContainer.php +0 -0
  361. lib/phpExcel/PHPExcel/Shared/Escher/DggContainer.php +0 -0
  362. lib/phpExcel/PHPExcel/Shared/Escher/DggContainer/BstoreContainer.php +0 -0
  363. lib/phpExcel/PHPExcel/Shared/Escher/DggContainer/BstoreContainer/BSE.php +0 -0
  364. lib/phpExcel/PHPExcel/Shared/Escher/DggContainer/BstoreContainer/BSE/Blip.php +0 -0
  365. lib/phpExcel/PHPExcel/Shared/Excel5.php +0 -0
  366. lib/phpExcel/PHPExcel/Shared/File.php +0 -0
  367. lib/phpExcel/PHPExcel/Shared/Font.php +0 -0
  368. lib/phpExcel/PHPExcel/Shared/JAMA/CHANGELOG.TXT +0 -0
  369. lib/phpExcel/PHPExcel/Shared/JAMA/CholeskyDecomposition.php +0 -0
  370. lib/phpExcel/PHPExcel/Shared/JAMA/EigenvalueDecomposition.php +0 -0
  371. lib/phpExcel/PHPExcel/Shared/JAMA/LUDecomposition.php +0 -0
  372. lib/phpExcel/PHPExcel/Shared/JAMA/Matrix.php +0 -0
  373. lib/phpExcel/PHPExcel/Shared/JAMA/QRDecomposition.php +0 -0
  374. lib/phpExcel/PHPExcel/Shared/JAMA/SingularValueDecomposition.php +0 -0
  375. lib/phpExcel/PHPExcel/Shared/JAMA/examples/LMQuadTest.php +116 -0
  376. lib/phpExcel/PHPExcel/Shared/JAMA/examples/LagrangeInterpolation.php +59 -0
  377. lib/phpExcel/PHPExcel/Shared/JAMA/examples/LagrangeInterpolation2.php +59 -0
  378. lib/phpExcel/PHPExcel/Shared/JAMA/examples/LevenbergMarquardt.php +185 -0
  379. lib/phpExcel/PHPExcel/Shared/JAMA/examples/MagicSquareExample.php +182 -0
  380. lib/phpExcel/PHPExcel/Shared/JAMA/examples/Stats.php +1605 -0
  381. lib/phpExcel/PHPExcel/Shared/JAMA/examples/benchmark.php +263 -0
  382. lib/phpExcel/PHPExcel/Shared/JAMA/examples/polyfit.php +73 -0
  383. lib/phpExcel/PHPExcel/Shared/JAMA/examples/tile.php +78 -0
  384. lib/phpExcel/PHPExcel/Shared/JAMA/tests/TestMatrix.php +415 -0
  385. lib/phpExcel/PHPExcel/Shared/JAMA/utils/Error.php +0 -0
  386. lib/phpExcel/PHPExcel/Shared/JAMA/utils/Maths.php +0 -0
  387. lib/phpExcel/PHPExcel/Shared/OLE.php +0 -0
  388. lib/phpExcel/PHPExcel/Shared/OLE/ChainedBlockStream.php +0 -0
  389. lib/phpExcel/PHPExcel/Shared/OLE/PPS.php +0 -0
  390. lib/phpExcel/PHPExcel/Shared/OLE/PPS/File.php +0 -0
  391. lib/phpExcel/PHPExcel/Shared/OLE/PPS/Root.php +0 -0
  392. lib/phpExcel/PHPExcel/Shared/OLERead.php +0 -0
  393. lib/phpExcel/PHPExcel/Shared/PCLZip/gnu-lgpl.txt +504 -504
  394. lib/phpExcel/PHPExcel/Shared/PCLZip/pclzip.lib.php +0 -0
  395. lib/phpExcel/PHPExcel/Shared/PCLZip/readme.txt +421 -421
  396. lib/phpExcel/PHPExcel/Shared/PasswordHasher.php +0 -0
  397. lib/phpExcel/PHPExcel/Shared/String.php +0 -0
  398. lib/phpExcel/PHPExcel/Shared/TimeZone.php +0 -0
  399. lib/phpExcel/PHPExcel/Shared/XMLWriter.php +0 -0
  400. lib/phpExcel/PHPExcel/Shared/ZipArchive.php +0 -0
  401. lib/phpExcel/PHPExcel/Shared/ZipStreamWrapper.php +0 -0
  402. lib/phpExcel/PHPExcel/Shared/trend/bestFitClass.php +0 -0
  403. lib/phpExcel/PHPExcel/Shared/trend/exponentialBestFitClass.php +0 -0
  404. lib/phpExcel/PHPExcel/Shared/trend/linearBestFitClass.php +0 -0
  405. lib/phpExcel/PHPExcel/Shared/trend/logarithmicBestFitClass.php +0 -0
  406. lib/phpExcel/PHPExcel/Shared/trend/polynomialBestFitClass.php +0 -0
  407. lib/phpExcel/PHPExcel/Shared/trend/powerBestFitClass.php +0 -0
  408. lib/phpExcel/PHPExcel/Shared/trend/trendClass.php +0 -0
  409. lib/phpExcel/PHPExcel/Style.php +0 -0
  410. lib/phpExcel/PHPExcel/Style/Alignment.php +0 -0
  411. lib/phpExcel/PHPExcel/Style/Border.php +0 -0
  412. lib/phpExcel/PHPExcel/Style/Borders.php +0 -0
  413. lib/phpExcel/PHPExcel/Style/Color.php +0 -0
  414. lib/phpExcel/PHPExcel/Style/Conditional.php +0 -0
  415. lib/phpExcel/PHPExcel/Style/Fill.php +0 -0
  416. lib/phpExcel/PHPExcel/Style/Font.php +0 -0
  417. lib/phpExcel/PHPExcel/Style/NumberFormat.php +0 -0
  418. lib/phpExcel/PHPExcel/Style/Protection.php +0 -0
  419. lib/phpExcel/PHPExcel/Style/Supervisor.php +0 -0
  420. lib/phpExcel/PHPExcel/Worksheet.php +0 -0
  421. lib/phpExcel/PHPExcel/Worksheet/AutoFilter.php +0 -0
  422. lib/phpExcel/PHPExcel/Worksheet/AutoFilter/Column.php +0 -0
  423. lib/phpExcel/PHPExcel/Worksheet/AutoFilter/Column/Rule.php +0 -0
  424. lib/phpExcel/PHPExcel/Worksheet/BaseDrawing.php +0 -0
  425. lib/phpExcel/PHPExcel/Worksheet/CellIterator.php +0 -0
  426. lib/phpExcel/PHPExcel/Worksheet/Column.php +0 -0
  427. lib/phpExcel/PHPExcel/Worksheet/ColumnCellIterator.php +0 -0
  428. lib/phpExcel/PHPExcel/Worksheet/ColumnDimension.php +0 -0
  429. lib/phpExcel/PHPExcel/Worksheet/ColumnIterator.php +0 -0
  430. lib/phpExcel/PHPExcel/Worksheet/Dimension.php +0 -0
  431. lib/phpExcel/PHPExcel/Worksheet/Drawing.php +0 -0
  432. lib/phpExcel/PHPExcel/Worksheet/Drawing/Shadow.php +0 -0
  433. lib/phpExcel/PHPExcel/Worksheet/HeaderFooter.php +0 -0
  434. lib/phpExcel/PHPExcel/Worksheet/HeaderFooterDrawing.php +0 -0
  435. lib/phpExcel/PHPExcel/Worksheet/MemoryDrawing.php +0 -0
  436. lib/phpExcel/PHPExcel/Worksheet/PageMargins.php +0 -0
  437. lib/phpExcel/PHPExcel/Worksheet/PageSetup.php +0 -0
  438. lib/phpExcel/PHPExcel/Worksheet/Protection.php +0 -0
  439. lib/phpExcel/PHPExcel/Worksheet/Row.php +0 -0
  440. lib/phpExcel/PHPExcel/Worksheet/RowCellIterator.php +0 -0
  441. lib/phpExcel/PHPExcel/Worksheet/RowDimension.php +0 -0
  442. lib/phpExcel/PHPExcel/Worksheet/RowIterator.php +0 -0
  443. lib/phpExcel/PHPExcel/Worksheet/SheetView.php +0 -0
  444. lib/phpExcel/PHPExcel/WorksheetIterator.php +0 -0
  445. lib/phpExcel/PHPExcel/Writer/Abstract.php +0 -0
  446. lib/phpExcel/PHPExcel/Writer/CSV.php +0 -0
  447. lib/phpExcel/PHPExcel/Writer/Excel2007.php +0 -0
  448. lib/phpExcel/PHPExcel/Writer/Excel2007/Chart.php +0 -0
  449. lib/phpExcel/PHPExcel/Writer/Excel2007/Comments.php +0 -0
  450. lib/phpExcel/PHPExcel/Writer/Excel2007/ContentTypes.php +0 -0
  451. lib/phpExcel/PHPExcel/Writer/Excel2007/DocProps.php +0 -0
  452. lib/phpExcel/PHPExcel/Writer/Excel2007/Drawing.php +0 -0
  453. lib/phpExcel/PHPExcel/Writer/Excel2007/Rels.php +0 -0
  454. lib/phpExcel/PHPExcel/Writer/Excel2007/RelsRibbon.php +0 -0
  455. lib/phpExcel/PHPExcel/Writer/Excel2007/RelsVBA.php +0 -0
  456. lib/phpExcel/PHPExcel/Writer/Excel2007/StringTable.php +0 -0
  457. lib/phpExcel/PHPExcel/Writer/Excel2007/Style.php +0 -0
  458. lib/phpExcel/PHPExcel/Writer/Excel2007/Theme.php +0 -0
  459. lib/phpExcel/PHPExcel/Writer/Excel2007/Workbook.php +0 -0
  460. lib/phpExcel/PHPExcel/Writer/Excel2007/Worksheet.php +0 -0
  461. lib/phpExcel/PHPExcel/Writer/Excel2007/WriterPart.php +0 -0
  462. lib/phpExcel/PHPExcel/Writer/Excel5.php +0 -0
  463. lib/phpExcel/PHPExcel/Writer/Excel5/BIFFwriter.php +0 -0
  464. lib/phpExcel/PHPExcel/Writer/Excel5/Escher.php +0 -0
  465. lib/phpExcel/PHPExcel/Writer/Excel5/Font.php +0 -0
  466. lib/phpExcel/PHPExcel/Writer/Excel5/Parser.php +0 -0
  467. lib/phpExcel/PHPExcel/Writer/Excel5/Workbook.php +0 -0
  468. lib/phpExcel/PHPExcel/Writer/Excel5/Worksheet.php +0 -0
  469. lib/phpExcel/PHPExcel/Writer/Excel5/Xf.php +0 -0
  470. lib/phpExcel/PHPExcel/Writer/Exception.php +0 -0
  471. lib/phpExcel/PHPExcel/Writer/HTML.php +0 -0
  472. lib/phpExcel/PHPExcel/Writer/IWriter.php +0 -0
  473. lib/phpExcel/PHPExcel/Writer/OpenDocument.php +0 -0
  474. lib/phpExcel/PHPExcel/Writer/OpenDocument/Cell/Comment.php +0 -0
  475. lib/phpExcel/PHPExcel/Writer/OpenDocument/Content.php +0 -0
  476. lib/phpExcel/PHPExcel/Writer/OpenDocument/Meta.php +0 -0
  477. lib/phpExcel/PHPExcel/Writer/OpenDocument/MetaInf.php +0 -0
  478. lib/phpExcel/PHPExcel/Writer/OpenDocument/Mimetype.php +0 -0
  479. lib/phpExcel/PHPExcel/Writer/OpenDocument/Settings.php +0 -0
  480. lib/phpExcel/PHPExcel/Writer/OpenDocument/Styles.php +0 -0
  481. lib/phpExcel/PHPExcel/Writer/OpenDocument/Thumbnails.php +0 -0
  482. lib/phpExcel/PHPExcel/Writer/OpenDocument/WriterPart.php +0 -0
  483. lib/phpExcel/PHPExcel/Writer/PDF.php +0 -0
  484. lib/phpExcel/PHPExcel/Writer/PDF/Core.php +0 -0
  485. lib/phpExcel/PHPExcel/Writer/PDF/DomPDF.php +0 -0
  486. lib/phpExcel/PHPExcel/Writer/PDF/mPDF.php +0 -0
  487. lib/phpExcel/PHPExcel/Writer/PDF/tcPDF.php +0 -0
  488. lib/phpExcel/PHPExcel/locale/bg/config +0 -0
  489. lib/phpExcel/PHPExcel/locale/cs/config +0 -0
  490. lib/phpExcel/PHPExcel/locale/cs/functions +0 -0
  491. lib/phpExcel/PHPExcel/locale/da/config +0 -0
  492. lib/phpExcel/PHPExcel/locale/da/functions +0 -0
  493. lib/phpExcel/PHPExcel/locale/de/config +0 -0
  494. lib/phpExcel/PHPExcel/locale/de/functions +0 -0
  495. lib/phpExcel/PHPExcel/locale/en/uk/config +0 -0
  496. lib/phpExcel/PHPExcel/locale/es/config +0 -0
  497. lib/phpExcel/PHPExcel/locale/es/functions +0 -0
  498. lib/phpExcel/PHPExcel/locale/fi/config +0 -0
  499. lib/phpExcel/PHPExcel/locale/fi/functions +0 -0
  500. lib/phpExcel/PHPExcel/locale/fr/config +0 -0
  501. lib/phpExcel/PHPExcel/locale/fr/functions +0 -0
  502. lib/phpExcel/PHPExcel/locale/hu/config +0 -0
  503. lib/phpExcel/PHPExcel/locale/hu/functions +0 -0
  504. lib/phpExcel/PHPExcel/locale/it/config +0 -0
  505. lib/phpExcel/PHPExcel/locale/it/functions +0 -0
  506. lib/phpExcel/PHPExcel/locale/nl/config +0 -0
  507. lib/phpExcel/PHPExcel/locale/nl/functions +0 -0
  508. lib/phpExcel/PHPExcel/locale/no/config +0 -0
  509. lib/phpExcel/PHPExcel/locale/no/functions +0 -0
  510. lib/phpExcel/PHPExcel/locale/pl/config +0 -0
  511. lib/phpExcel/PHPExcel/locale/pl/functions +0 -0
  512. lib/phpExcel/PHPExcel/locale/pt/br/config +0 -0
  513. lib/phpExcel/PHPExcel/locale/pt/br/functions +408 -408
  514. lib/phpExcel/PHPExcel/locale/pt/config +0 -0
  515. lib/phpExcel/PHPExcel/locale/pt/functions +408 -408
  516. lib/phpExcel/PHPExcel/locale/ru/config +0 -0
  517. lib/phpExcel/PHPExcel/locale/ru/functions +0 -0
  518. lib/phpExcel/PHPExcel/locale/sv/config +0 -0
  519. lib/phpExcel/PHPExcel/locale/sv/functions +408 -408
  520. lib/phpExcel/PHPExcel/locale/tr/config +0 -0
  521. lib/phpExcel/PHPExcel/locale/tr/functions +0 -0
  522. readme.txt +5 -2
  523. source/class.date.wpdatacolumn.php +2 -0
  524. source/class.datetime.wpdatacolumn.php +2 -0
  525. source/class.email.wpdatacolumn.php +3 -0
  526. source/class.float.wpdatacolumn.php +3 -0
  527. source/class.image.wpdatacolumn.php +3 -0
  528. source/class.int.wpdatacolumn.php +3 -0
  529. source/class.link.wpdatacolumn.php +3 -0
  530. source/class.sql.php +2 -0
  531. source/class.string.wpdatacolumn.php +3 -0
  532. source/class.time.wpdatacolumn.php +2 -0
  533. source/class.tpl.php +3 -0
  534. source/class.wdtbrowsechartstable.php +2 -0
  535. source/class.wdtbrowsetable.php +3 -1
  536. source/class.wdtexception.php +3 -0
  537. source/class.wdttools.php +2 -0
  538. source/class.wpdatacolumn.php +3 -0
  539. source/class.wpdatatable.php +2 -0
  540. source/lang/albanian.inc.php +0 -0
  541. source/lang/arabic.inc.php +0 -0
  542. source/lang/azerbaijan.inc.php +0 -0
  543. source/lang/bangla.inc.php +0 -0
  544. source/lang/bulgarian.inc.php +0 -0
  545. source/lang/catalan.inc.php +0 -0
  546. source/lang/chinese.inc.php +0 -0
  547. source/lang/croatian.inc.php +0 -0
  548. source/lang/czech.inc.php +0 -0
  549. source/lang/danish.inc.php +0 -0
  550. source/lang/dutch.inc.php +0 -0
  551. source/lang/estonian.inc.php +0 -0
  552. source/lang/filipino.inc.php +0 -0
  553. source/lang/finnish.inc.php +0 -0
  554. source/lang/french.inc.php +0 -0
  555. source/lang/georgian.inc.php +0 -0
  556. source/lang/german.inc.php +0 -0
  557. source/lang/greek.inc.php +0 -0
  558. source/lang/hebrew.inc.php +0 -0
  559. source/lang/hindi.inc.php +0 -0
  560. source/lang/hungarian.inc.php +0 -0
  561. source/lang/indonesian.inc.php +0 -0
  562. source/lang/irish.inc.php +0 -0
  563. source/lang/italian.inc.php +0 -0
  564. source/lang/japanese.inc.php +0 -0
  565. source/lang/latvian.inc.php +0 -0
  566. source/lang/lithuanian.inc.php +0 -0
  567. source/lang/macedonian.inc.php +0 -0
  568. source/lang/norwegian.inc.php +0 -0
  569. source/lang/persian.inc.php +0 -0
  570. source/lang/polish.inc.php +0 -0
  571. source/lang/portuguese.inc.php +0 -0
  572. source/lang/portuguese_brazil.inc.php +0 -0
  573. source/lang/romanian.inc.php +0 -0
  574. source/lang/russian.inc.php +0 -0
  575. source/lang/serbian.inc.php +0 -0
  576. source/lang/slovak.inc.php +0 -0
  577. source/lang/slovenian.inc.php +0 -0
  578. source/lang/spanish.inc.php +0 -0
  579. source/lang/swedish.inc.php +0 -0
  580. source/lang/thai.inc.php +0 -0
  581. source/lang/turkish.inc.php +0 -0
  582. source/lang/ukranian.inc.php +0 -0
  583. source/lang/urdu.inc.php +0 -0
  584. source/lang/vietnamese.inc.php +0 -0
  585. templates/addons.inc.php +2 -0
  586. templates/browse.inc.php +4 -1
  587. templates/browse_charts.inc.php +2 -0
  588. templates/chart_js_template.inc.php +2 -0
  589. templates/chart_wizard.inc.php +2 -0
  590. templates/constructor.inc.php +2 -0
  591. templates/edit_table.inc.php +3 -1
  592. templates/settings.inc.php +2 -0
  593. templates/wpdatatables_excel_table_main.inc.php +2 -0
  594. templates/wpdatatables_table_main.inc.php +2 -0
  595. templates/wrap_template.inc.php +2 -0
  596. wpdatatables.php +3 -1
Readme_documentation.pdf CHANGED
File without changes
assets/css/datatables.responsive.css CHANGED
File without changes
assets/css/datepicker.default.css CHANGED
File without changes
assets/css/datepicker.default.date.css CHANGED
File without changes
assets/css/datepicker.default.time.css CHANGED
File without changes
assets/css/handsontable.full.min.css CHANGED
File without changes
assets/css/icheck.minimal.css CHANGED
File without changes
assets/css/images/ui-bg_glass_55_fbf9ee_1x400.png CHANGED
File without changes
assets/css/images/ui-bg_glass_65_ffffff_1x400.png CHANGED
File without changes
assets/css/images/ui-bg_glass_75_dadada_1x400.png CHANGED
File without changes
assets/css/images/ui-bg_glass_75_e6e6e6_1x400.png CHANGED
File without changes
assets/css/images/ui-bg_glass_95_fef1ec_1x400.png CHANGED
File without changes
assets/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png CHANGED
File without changes
assets/css/images/ui-icons_222222_256x240.png CHANGED
File without changes
assets/css/images/ui-icons_2e83ff_256x240.png CHANGED
File without changes
assets/css/images/ui-icons_454545_256x240.png CHANGED
File without changes
assets/css/images/ui-icons_888888_256x240.png CHANGED
File without changes
assets/css/images/ui-icons_cd0a0a_256x240.png CHANGED
File without changes
assets/css/jquery-ui.css ADDED
@@ -0,0 +1,1177 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*! jQuery UI - v1.10.3 - 2013-05-03
2
+ * http://jqueryui.com
3
+ * Includes: jquery.ui.core.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css
4
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
5
+ * Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
6
+
7
+ /* Layout helpers
8
+ ----------------------------------*/
9
+ .ui-helper-hidden {
10
+ display: none;
11
+ }
12
+ .ui-helper-hidden-accessible {
13
+ border: 0;
14
+ clip: rect(0 0 0 0);
15
+ height: 1px;
16
+ margin: -1px;
17
+ overflow: hidden;
18
+ padding: 0;
19
+ position: absolute;
20
+ width: 1px;
21
+ }
22
+ .ui-helper-reset {
23
+ margin: 0;
24
+ padding: 0;
25
+ border: 0;
26
+ outline: 0;
27
+ line-height: 1.3;
28
+ text-decoration: none;
29
+ font-size: 100%;
30
+ list-style: none;
31
+ }
32
+ .ui-helper-clearfix:before,
33
+ .ui-helper-clearfix:after {
34
+ content: "";
35
+ display: table;
36
+ border-collapse: collapse;
37
+ }
38
+ .ui-helper-clearfix:after {
39
+ clear: both;
40
+ }
41
+ .ui-helper-clearfix {
42
+ min-height: 0; /* support: IE7 */
43
+ }
44
+ .ui-helper-zfix {
45
+ width: 100%;
46
+ height: 100%;
47
+ top: 0;
48
+ left: 0;
49
+ position: absolute;
50
+ opacity: 0;
51
+ filter:Alpha(Opacity=0);
52
+ }
53
+
54
+ .ui-front {
55
+ z-index: 100;
56
+ }
57
+
58
+
59
+ /* Interaction Cues
60
+ ----------------------------------*/
61
+ .ui-state-disabled {
62
+ cursor: default !important;
63
+ }
64
+
65
+
66
+ /* Icons
67
+ ----------------------------------*/
68
+
69
+ /* states and images */
70
+ .ui-icon {
71
+ display: block;
72
+ text-indent: -99999px;
73
+ overflow: hidden;
74
+ background-repeat: no-repeat;
75
+ }
76
+
77
+
78
+ /* Misc visuals
79
+ ----------------------------------*/
80
+
81
+ /* Overlays */
82
+ .ui-widget-overlay {
83
+ position: fixed;
84
+ top: 0;
85
+ left: 0;
86
+ width: 100%;
87
+ height: 100%;
88
+ }
89
+ .ui-accordion .ui-accordion-header {
90
+ display: block;
91
+ cursor: pointer;
92
+ position: relative;
93
+ margin-top: 2px;
94
+ padding: .5em .5em .5em .7em;
95
+ min-height: 0; /* support: IE7 */
96
+ }
97
+ .ui-accordion .ui-accordion-icons {
98
+ padding-left: 2.2em;
99
+ }
100
+ .ui-accordion .ui-accordion-noicons {
101
+ padding-left: .7em;
102
+ }
103
+ .ui-accordion .ui-accordion-icons .ui-accordion-icons {
104
+ padding-left: 2.2em;
105
+ }
106
+ .ui-accordion .ui-accordion-header .ui-accordion-header-icon {
107
+ position: absolute;
108
+ left: .5em;
109
+ top: 50%;
110
+ margin-top: -8px;
111
+ }
112
+ .ui-accordion .ui-accordion-content {
113
+ padding: 1em 2.2em;
114
+ border-top: 0;
115
+ overflow: auto;
116
+ }
117
+ .ui-autocomplete {
118
+ position: absolute;
119
+ top: 0;
120
+ left: 0;
121
+ cursor: default;
122
+ }
123
+ .ui-button {
124
+ display: inline-block;
125
+ position: relative;
126
+ padding: 0;
127
+ line-height: normal;
128
+ margin-right: .1em;
129
+ cursor: pointer;
130
+ vertical-align: middle;
131
+ text-align: center;
132
+ overflow: visible; /* removes extra width in IE */
133
+ }
134
+ .ui-button,
135
+ .ui-button:link,
136
+ .ui-button:visited,
137
+ .ui-button:hover,
138
+ .ui-button:active {
139
+ text-decoration: none;
140
+ }
141
+ /* to make room for the icon, a width needs to be set here */
142
+ .ui-button-icon-only {
143
+ width: 2.2em;
144
+ }
145
+ /* button elements seem to need a little more width */
146
+ button.ui-button-icon-only {
147
+ width: 2.4em;
148
+ }
149
+ .ui-button-icons-only {
150
+ width: 3.4em;
151
+ }
152
+ button.ui-button-icons-only {
153
+ width: 3.7em;
154
+ }
155
+
156
+ /* button text element */
157
+ .ui-button .ui-button-text {
158
+ display: block;
159
+ line-height: normal;
160
+ }
161
+ .ui-button-text-only .ui-button-text {
162
+ padding: .4em 1em;
163
+ }
164
+ .ui-button-icon-only .ui-button-text,
165
+ .ui-button-icons-only .ui-button-text {
166
+ padding: .4em;
167
+ text-indent: -9999999px;
168
+ }
169
+ .ui-button-text-icon-primary .ui-button-text,
170
+ .ui-button-text-icons .ui-button-text {
171
+ padding: .4em 1em .4em 2.1em;
172
+ }
173
+ .ui-button-text-icon-secondary .ui-button-text,
174
+ .ui-button-text-icons .ui-button-text {
175
+ padding: .4em 2.1em .4em 1em;
176
+ }
177
+ .ui-button-text-icons .ui-button-text {
178
+ padding-left: 2.1em;
179
+ padding-right: 2.1em;
180
+ }
181
+ /* no icon support for input elements, provide padding by default */
182
+ input.ui-button {
183
+ padding: .4em 1em;
184
+ }
185
+
186
+ /* button icon element(s) */
187
+ .ui-button-icon-only .ui-icon,
188
+ .ui-button-text-icon-primary .ui-icon,
189
+ .ui-button-text-icon-secondary .ui-icon,
190
+ .ui-button-text-icons .ui-icon,
191
+ .ui-button-icons-only .ui-icon {
192
+ position: absolute;
193
+ top: 50%;
194
+ margin-top: -8px;
195
+ }
196
+ .ui-button-icon-only .ui-icon {
197
+ left: 50%;
198
+ margin-left: -8px;
199
+ }
200
+ .ui-button-text-icon-primary .ui-button-icon-primary,
201
+ .ui-button-text-icons .ui-button-icon-primary,
202
+ .ui-button-icons-only .ui-button-icon-primary {
203
+ left: .5em;
204
+ }
205
+ .ui-button-text-icon-secondary .ui-button-icon-secondary,
206
+ .ui-button-text-icons .ui-button-icon-secondary,
207
+ .ui-button-icons-only .ui-button-icon-secondary {
208
+ right: .5em;
209
+ }
210
+
211
+ /* button sets */
212
+ .ui-buttonset {
213
+ margin-right: 7px;
214
+ }
215
+ .ui-buttonset .ui-button {
216
+ margin-left: 0;
217
+ margin-right: -.3em;
218
+ }
219
+
220
+ /* workarounds */
221
+ /* reset extra padding in Firefox, see h5bp.com/l */
222
+ input.ui-button::-moz-focus-inner,
223
+ button.ui-button::-moz-focus-inner {
224
+ border: 0;
225
+ padding: 0;
226
+ }
227
+ .ui-datepicker {
228
+ width: 17em;
229
+ padding: .2em .2em 0;
230
+ display: none;
231
+ }
232
+ .ui-datepicker .ui-datepicker-header {
233
+ position: relative;
234
+ padding: .2em 0;
235
+ }
236
+ .ui-datepicker .ui-datepicker-prev,
237
+ .ui-datepicker .ui-datepicker-next {
238
+ position: absolute;
239
+ top: 2px;
240
+ width: 1.8em;
241
+ height: 1.8em;
242
+ }
243
+ .ui-datepicker .ui-datepicker-prev-hover,
244
+ .ui-datepicker .ui-datepicker-next-hover {
245
+ top: 1px;
246
+ }
247
+ .ui-datepicker .ui-datepicker-prev {
248
+ left: 2px;
249
+ }
250
+ .ui-datepicker .ui-datepicker-next {
251
+ right: 2px;
252
+ }
253
+ .ui-datepicker .ui-datepicker-prev-hover {
254
+ left: 1px;
255
+ }
256
+ .ui-datepicker .ui-datepicker-next-hover {
257
+ right: 1px;
258
+ }
259
+ .ui-datepicker .ui-datepicker-prev span,
260
+ .ui-datepicker .ui-datepicker-next span {
261
+ display: block;
262
+ position: absolute;
263
+ left: 50%;
264
+ margin-left: -8px;
265
+ top: 50%;
266
+ margin-top: -8px;
267
+ }
268
+ .ui-datepicker .ui-datepicker-title {
269
+ margin: 0 2.3em;
270
+ line-height: 1.8em;
271
+ text-align: center;
272
+ }
273
+ .ui-datepicker .ui-datepicker-title select {
274
+ font-size: 1em;
275
+ margin: 1px 0;
276
+ }
277
+ .ui-datepicker select.ui-datepicker-month-year {
278
+ width: 100%;
279
+ }
280
+ .ui-datepicker select.ui-datepicker-month,
281
+ .ui-datepicker select.ui-datepicker-year {
282
+ width: 49%;
283
+ }
284
+ .ui-datepicker table {
285
+ width: 100%;
286
+ font-size: .9em;
287
+ border-collapse: collapse;
288
+ margin: 0 0 .4em;
289
+ }
290
+ .ui-datepicker th {
291
+ padding: .7em .3em;
292
+ text-align: center;
293
+ font-weight: bold;
294
+ border: 0;
295
+ }
296
+ .ui-datepicker td {
297
+ border: 0;
298
+ padding: 1px;
299
+ }
300
+ .ui-datepicker td span,
301
+ .ui-datepicker td a {
302
+ display: block;
303
+ padding: .2em;
304
+ text-align: right;
305
+ text-decoration: none;
306
+ }
307
+ .ui-datepicker .ui-datepicker-buttonpane {
308
+ background-image: none;
309
+ margin: .7em 0 0 0;
310
+ padding: 0 .2em;
311
+ border-left: 0;
312
+ border-right: 0;
313
+ border-bottom: 0;
314
+ }
315
+ .ui-datepicker .ui-datepicker-buttonpane button {
316
+ float: right;
317
+ margin: .5em .2em .4em;
318
+ cursor: pointer;
319
+ padding: .2em .6em .3em .6em;
320
+ width: auto;
321
+ overflow: visible;
322
+ }
323
+ .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
324
+ float: left;
325
+ }
326
+
327
+ /* with multiple calendars */
328
+ .ui-datepicker.ui-datepicker-multi {
329
+ width: auto;
330
+ }
331
+ .ui-datepicker-multi .ui-datepicker-group {
332
+ float: left;
333
+ }
334
+ .ui-datepicker-multi .ui-datepicker-group table {
335
+ width: 95%;
336
+ margin: 0 auto .4em;
337
+ }
338
+ .ui-datepicker-multi-2 .ui-datepicker-group {
339
+ width: 50%;
340
+ }
341
+ .ui-datepicker-multi-3 .ui-datepicker-group {
342
+ width: 33.3%;
343
+ }
344
+ .ui-datepicker-multi-4 .ui-datepicker-group {
345
+ width: 25%;
346
+ }
347
+ .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
348
+ .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
349
+ border-left-width: 0;
350
+ }
351
+ .ui-datepicker-multi .ui-datepicker-buttonpane {
352
+ clear: left;
353
+ }
354
+ .ui-datepicker-row-break {
355
+ clear: both;
356
+ width: 100%;
357
+ font-size: 0;
358
+ }
359
+
360
+ /* RTL support */
361
+ .ui-datepicker-rtl {
362
+ direction: rtl;
363
+ }
364
+ .ui-datepicker-rtl .ui-datepicker-prev {
365
+ right: 2px;
366
+ left: auto;
367
+ }
368
+ .ui-datepicker-rtl .ui-datepicker-next {
369
+ left: 2px;
370
+ right: auto;
371
+ }
372
+ .ui-datepicker-rtl .ui-datepicker-prev:hover {
373
+ right: 1px;
374
+ left: auto;
375
+ }
376
+ .ui-datepicker-rtl .ui-datepicker-next:hover {
377
+ left: 1px;
378
+ right: auto;
379
+ }
380
+ .ui-datepicker-rtl .ui-datepicker-buttonpane {
381
+ clear: right;
382
+ }
383
+ .ui-datepicker-rtl .ui-datepicker-buttonpane button {
384
+ float: left;
385
+ }
386
+ .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
387
+ .ui-datepicker-rtl .ui-datepicker-group {
388
+ float: right;
389
+ }
390
+ .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
391
+ .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
392
+ border-right-width: 0;
393
+ border-left-width: 1px;
394
+ }
395
+ .ui-dialog {
396
+ position: absolute;
397
+ top: 0;
398
+ left: 0;
399
+ padding: .2em;
400
+ outline: 0;
401
+ }
402
+ .ui-dialog .ui-dialog-titlebar {
403
+ padding: .4em 1em;
404
+ position: relative;
405
+ }
406
+ .ui-dialog .ui-dialog-title {
407
+ float: left;
408
+ margin: .1em 0;
409
+ white-space: nowrap;
410
+ width: 90%;
411
+ overflow: hidden;
412
+ text-overflow: ellipsis;
413
+ }
414
+ .ui-dialog .ui-dialog-titlebar-close {
415
+ position: absolute;
416
+ right: .3em;
417
+ top: 50%;
418
+ width: 21px;
419
+ margin: -10px 0 0 0;
420
+ padding: 1px;
421
+ height: 20px;
422
+ }
423
+ .ui-dialog .ui-dialog-content {
424
+ position: relative;
425
+ border: 0;
426
+ padding: .5em 1em;
427
+ background: none;
428
+ overflow: auto;
429
+ }
430
+ .ui-dialog .ui-dialog-buttonpane {
431
+ text-align: left;
432
+ border-width: 1px 0 0 0;
433
+ background-image: none;
434
+ margin-top: .5em;
435
+ padding: .3em 1em .5em .4em;
436
+ }
437
+ .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
438
+ float: right;
439
+ }
440
+ .ui-dialog .ui-dialog-buttonpane button {
441
+ margin: .5em .4em .5em 0;
442
+ cursor: pointer;
443
+ }
444
+ .ui-dialog .ui-resizable-se {
445
+ width: 12px;
446
+ height: 12px;
447
+ right: -5px;
448
+ bottom: -5px;
449
+ background-position: 16px 16px;
450
+ }
451
+ .ui-draggable .ui-dialog-titlebar {
452
+ cursor: move;
453
+ }
454
+ .ui-menu {
455
+ list-style: none;
456
+ padding: 2px;
457
+ margin: 0;
458
+ display: block;
459
+ outline: none;
460
+ }
461
+ .ui-menu .ui-menu {
462
+ margin-top: -3px;
463
+ position: absolute;
464
+ }
465
+ .ui-menu .ui-menu-item {
466
+ margin: 0;
467
+ padding: 0;
468
+ width: 100%;
469
+ /* support: IE10, see #8844 */
470
+ list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
471
+ }
472
+ .ui-menu .ui-menu-divider {
473
+ margin: 5px -2px 5px -2px;
474
+ height: 0;
475
+ font-size: 0;
476
+ line-height: 0;
477
+ border-width: 1px 0 0 0;
478
+ }
479
+ .ui-menu .ui-menu-item a {
480
+ text-decoration: none;
481
+ display: block;
482
+ padding: 2px .4em;
483
+ line-height: 1.5;
484
+ min-height: 0; /* support: IE7 */
485
+ font-weight: normal;
486
+ }
487
+ .ui-menu .ui-menu-item a.ui-state-focus,
488
+ .ui-menu .ui-menu-item a.ui-state-active {
489
+ font-weight: normal;
490
+ margin: -1px;
491
+ }
492
+
493
+ .ui-menu .ui-state-disabled {
494
+ font-weight: normal;
495
+ margin: .4em 0 .2em;
496
+ line-height: 1.5;
497
+ }
498
+ .ui-menu .ui-state-disabled a {
499
+ cursor: default;
500
+ }
501
+
502
+ /* icon support */
503
+ .ui-menu-icons {
504
+ position: relative;
505
+ }
506
+ .ui-menu-icons .ui-menu-item a {
507
+ position: relative;
508
+ padding-left: 2em;
509
+ }
510
+
511
+ /* left-aligned */
512
+ .ui-menu .ui-icon {
513
+ position: absolute;
514
+ top: .2em;
515
+ left: .2em;
516
+ }
517
+
518
+ /* right-aligned */
519
+ .ui-menu .ui-menu-icon {
520
+ position: static;
521
+ float: right;
522
+ }
523
+ .ui-progressbar {
524
+ height: 2em;
525
+ text-align: left;
526
+ overflow: hidden;
527
+ }
528
+ .ui-progressbar .ui-progressbar-value {
529
+ margin: -1px;
530
+ height: 100%;
531
+ }
532
+ .ui-progressbar .ui-progressbar-overlay {
533
+ background: url("images/animated-overlay.gif");
534
+ height: 100%;
535
+ filter: alpha(opacity=25);
536
+ opacity: 0.25;
537
+ }
538
+ .ui-progressbar-indeterminate .ui-progressbar-value {
539
+ background-image: none;
540
+ }
541
+ .ui-resizable {
542
+ position: relative;
543
+ }
544
+ .ui-resizable-handle {
545
+ position: absolute;
546
+ font-size: 0.1px;
547
+ display: block;
548
+ }
549
+ .ui-resizable-disabled .ui-resizable-handle,
550
+ .ui-resizable-autohide .ui-resizable-handle {
551
+ display: none;
552
+ }
553
+ .ui-resizable-n {
554
+ cursor: n-resize;
555
+ height: 7px;
556
+ width: 100%;
557
+ top: -5px;
558
+ left: 0;
559
+ }
560
+ .ui-resizable-s {
561
+ cursor: s-resize;
562
+ height: 7px;
563
+ width: 100%;
564
+ bottom: -5px;
565
+ left: 0;
566
+ }
567
+ .ui-resizable-e {
568
+ cursor: e-resize;
569
+ width: 7px;
570
+ right: -5px;
571
+ top: 0;
572
+ height: 100%;
573
+ }
574
+ .ui-resizable-w {
575
+ cursor: w-resize;
576
+ width: 7px;
577
+ left: -5px;
578
+ top: 0;
579
+ height: 100%;
580
+ }
581
+ .ui-resizable-se {
582
+ cursor: se-resize;
583
+ width: 12px;
584
+ height: 12px;
585
+ right: 1px;
586
+ bottom: 1px;
587
+ }
588
+ .ui-resizable-sw {
589
+ cursor: sw-resize;
590
+ width: 9px;
591
+ height: 9px;
592
+ left: -5px;
593
+ bottom: -5px;
594
+ }
595
+ .ui-resizable-nw {
596
+ cursor: nw-resize;
597
+ width: 9px;
598
+ height: 9px;
599
+ left: -5px;
600
+ top: -5px;
601
+ }
602
+ .ui-resizable-ne {
603
+ cursor: ne-resize;
604
+ width: 9px;
605
+ height: 9px;
606
+ right: -5px;
607
+ top: -5px;
608
+ }
609
+ .ui-selectable-helper {
610
+ position: absolute;
611
+ z-index: 100;
612
+ border: 1px dotted black;
613
+ }
614
+ .ui-slider {
615
+ position: relative;
616
+ text-align: left;
617
+ }
618
+ .ui-slider .ui-slider-handle {
619
+ position: absolute;
620
+ z-index: 2;
621
+ width: 1.2em;
622
+ height: 1.2em;
623
+ cursor: default;
624
+ }
625
+ .ui-slider .ui-slider-range {
626
+ position: absolute;
627
+ z-index: 1;
628
+ font-size: .7em;
629
+ display: block;
630
+ border: 0;
631
+ background-position: 0 0;
632
+ }
633
+
634
+ /* For IE8 - See #6727 */
635
+ .ui-slider.ui-state-disabled .ui-slider-handle,
636
+ .ui-slider.ui-state-disabled .ui-slider-range {
637
+ filter: inherit;
638
+ }
639
+
640
+ .ui-slider-horizontal {
641
+ height: .8em;
642
+ }
643
+ .ui-slider-horizontal .ui-slider-handle {
644
+ top: -.3em;
645
+ margin-left: -.6em;
646
+ }
647
+ .ui-slider-horizontal .ui-slider-range {
648
+ top: 0;
649
+ height: 100%;
650
+ }
651
+ .ui-slider-horizontal .ui-slider-range-min {
652
+ left: 0;
653
+ }
654
+ .ui-slider-horizontal .ui-slider-range-max {
655
+ right: 0;
656
+ }
657
+
658
+ .ui-slider-vertical {
659
+ width: .8em;
660
+ height: 100px;
661
+ }
662
+ .ui-slider-vertical .ui-slider-handle {
663
+ left: -.3em;
664
+ margin-left: 0;
665
+ margin-bottom: -.6em;
666
+ }
667
+ .ui-slider-vertical .ui-slider-range {
668
+ left: 0;
669
+ width: 100%;
670
+ }
671
+ .ui-slider-vertical .ui-slider-range-min {
672
+ bottom: 0;
673
+ }
674
+ .ui-slider-vertical .ui-slider-range-max {
675
+ top: 0;
676
+ }
677
+ .ui-spinner {
678
+ position: relative;
679
+ display: inline-block;
680
+ overflow: hidden;
681
+ padding: 0;
682
+ vertical-align: middle;
683
+ }
684
+ .ui-spinner-input {
685
+ border: none;
686
+ background: none;
687
+ color: inherit;
688
+ padding: 0;
689
+ margin: .2em 0;
690
+ vertical-align: middle;
691
+ margin-left: .4em;
692
+ margin-right: 22px;
693
+ }
694
+ .ui-spinner-button {
695
+ width: 16px;
696
+ height: 50%;
697
+ font-size: .5em;
698
+ padding: 0;
699
+ margin: 0;
700
+ text-align: center;
701
+ position: absolute;
702
+ cursor: default;
703
+ display: block;
704
+ overflow: hidden;
705
+ right: 0;
706
+ }
707
+ /* more specificity required here to overide default borders */
708
+ .ui-spinner a.ui-spinner-button {
709
+ border-top: none;
710
+ border-bottom: none;
711
+ border-right: none;
712
+ }
713
+ /* vertical centre icon */
714
+ .ui-spinner .ui-icon {
715
+ position: absolute;
716
+ margin-top: -8px;
717
+ top: 50%;
718
+ left: 0;
719
+ }
720
+ .ui-spinner-up {
721
+ top: 0;
722
+ }
723
+ .ui-spinner-down {
724
+ bottom: 0;
725
+ }
726
+
727
+ /* TR overrides */
728
+ .ui-spinner .ui-icon-triangle-1-s {
729
+ /* need to fix icons sprite */
730
+ background-position: -65px -16px;
731
+ }
732
+ .ui-tabs {
733
+ position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
734
+ padding: .2em;
735
+ }
736
+ .ui-tabs .ui-tabs-nav {
737
+ margin: 0;
738
+ padding: .2em .2em 0;
739
+ }
740
+ .ui-tabs .ui-tabs-nav li {
741
+ list-style: none;
742
+ float: left;
743
+ position: relative;
744
+ top: 0;
745
+ margin: 1px .2em 0 0;
746
+ border-bottom-width: 0;
747
+ padding: 0;
748
+ white-space: nowrap;
749
+ }
750
+ .ui-tabs .ui-tabs-nav li a {
751
+ float: left;
752
+ padding: .5em 1em;
753
+ text-decoration: none;
754
+ }
755
+ .ui-tabs .ui-tabs-nav li.ui-tabs-active {
756
+ margin-bottom: -1px;
757
+ padding-bottom: 1px;
758
+ }
759
+ .ui-tabs .ui-tabs-nav li.ui-tabs-active a,
760
+ .ui-tabs .ui-tabs-nav li.ui-state-disabled a,
761
+ .ui-tabs .ui-tabs-nav li.ui-tabs-loading a {
762
+ cursor: text;
763
+ }
764
+ .ui-tabs .ui-tabs-nav li a, /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
765
+ .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a {
766
+ cursor: pointer;
767
+ }
768
+ .ui-tabs .ui-tabs-panel {
769
+ display: block;
770
+ border-width: 0;
771
+ padding: 1em 1.4em;
772
+ background: none;
773
+ }
774
+ .ui-tooltip {
775
+ padding: 8px;
776
+ position: absolute;
777
+ z-index: 9999;
778
+ max-width: 300px;
779
+ -webkit-box-shadow: 0 0 5px #aaa;
780
+ box-shadow: 0 0 5px #aaa;
781
+ }
782
+ body .ui-tooltip {
783
+ border-width: 2px;
784
+ }
785
+
786
+ /* Component containers
787
+ ----------------------------------*/
788
+ .ui-widget {
789
+ font-family: Verdana,Arial,sans-serif;
790
+ font-size: 1.1em;
791
+ }
792
+ .ui-widget .ui-widget {
793
+ font-size: 1em;
794
+ }
795
+ .ui-widget input,
796
+ .ui-widget select,
797
+ .ui-widget textarea,
798
+ .ui-widget button {
799
+ font-family: Verdana,Arial,sans-serif;
800
+ font-size: 1em;
801
+ }
802
+ .ui-widget-content {
803
+ border: 1px solid #aaaaaa;
804
+ background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;
805
+ color: #222222;
806
+ }
807
+ .ui-widget-content a {
808
+ color: #222222;
809
+ }
810
+ .ui-widget-header {
811
+ border: 1px solid #aaaaaa;
812
+ background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;
813
+ color: #222222;
814
+ font-weight: bold;
815
+ }
816
+ .ui-widget-header a {
817
+ color: #222222;
818
+ }
819
+
820
+ /* Interaction states
821
+ ----------------------------------*/
822
+ .ui-state-default,
823
+ .ui-widget-content .ui-state-default,
824
+ .ui-widget-header .ui-state-default {
825
+ border: 1px solid #d3d3d3;
826
+ background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;
827
+ font-weight: normal;
828
+ color: #555555;
829
+ }
830
+ .ui-state-default a,
831
+ .ui-state-default a:link,
832
+ .ui-state-default a:visited {
833
+ color: #555555;
834
+ text-decoration: none;
835
+ }
836
+ .ui-state-hover,
837
+ .ui-widget-content .ui-state-hover,
838
+ .ui-widget-header .ui-state-hover,
839
+ .ui-state-focus,
840
+ .ui-widget-content .ui-state-focus,
841
+ .ui-widget-header .ui-state-focus {
842
+ border: 1px solid #999999;
843
+ background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;
844
+ font-weight: normal;
845
+ color: #212121;
846
+ }
847
+ .ui-state-hover a,
848
+ .ui-state-hover a:hover,
849
+ .ui-state-hover a:link,
850
+ .ui-state-hover a:visited {
851
+ color: #212121;
852
+ text-decoration: none;
853
+ }
854
+ .ui-state-active,
855
+ .ui-widget-content .ui-state-active,
856
+ .ui-widget-header .ui-state-active {
857
+ border: 1px solid #aaaaaa;
858
+ background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;
859
+ font-weight: normal;
860
+ color: #212121;
861
+ }
862
+ .ui-state-active a,
863
+ .ui-state-active a:link,
864
+ .ui-state-active a:visited {
865
+ color: #212121;
866
+ text-decoration: none;
867
+ }
868
+
869
+ /* Interaction Cues
870
+ ----------------------------------*/
871
+ .ui-state-highlight,
872
+ .ui-widget-content .ui-state-highlight,
873
+ .ui-widget-header .ui-state-highlight {
874
+ border: 1px solid #fcefa1;
875
+ background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;
876
+ color: #363636;
877
+ }
878
+ .ui-state-highlight a,
879
+ .ui-widget-content .ui-state-highlight a,
880
+ .ui-widget-header .ui-state-highlight a {
881
+ color: #363636;
882
+ }
883
+ .ui-state-error,
884
+ .ui-widget-content .ui-state-error,
885
+ .ui-widget-header .ui-state-error {
886
+ border: 1px solid #cd0a0a;
887
+ background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;
888
+ color: #cd0a0a;
889
+ }
890
+ .ui-state-error a,
891
+ .ui-widget-content .ui-state-error a,
892
+ .ui-widget-header .ui-state-error a {
893
+ color: #cd0a0a;
894
+ }
895
+ .ui-state-error-text,
896
+ .ui-widget-content .ui-state-error-text,
897
+ .ui-widget-header .ui-state-error-text {
898
+ color: #cd0a0a;
899
+ }
900
+ .ui-priority-primary,
901
+ .ui-widget-content .ui-priority-primary,
902
+ .ui-widget-header .ui-priority-primary {
903
+ font-weight: bold;
904
+ }
905
+ .ui-priority-secondary,
906
+ .ui-widget-content .ui-priority-secondary,
907
+ .ui-widget-header .ui-priority-secondary {
908
+ opacity: .7;
909
+ filter:Alpha(Opacity=70);
910
+ font-weight: normal;
911
+ }
912
+ .ui-state-disabled,
913
+ .ui-widget-content .ui-state-disabled,
914
+ .ui-widget-header .ui-state-disabled {
915
+ opacity: .35;
916
+ filter:Alpha(Opacity=35);
917
+ background-image: none;
918
+ }
919
+ .ui-state-disabled .ui-icon {
920
+ filter:Alpha(Opacity=35); /* For IE8 - See #6059 */
921
+ }
922
+
923
+ /* Icons
924
+ ----------------------------------*/
925
+
926
+ /* states and images */
927
+ .ui-icon {
928
+ width: 16px;
929
+ height: 16px;
930
+ }
931
+ .ui-icon,
932
+ .ui-widget-content .ui-icon {
933
+ background-image: url(images/ui-icons_222222_256x240.png);
934
+ }
935
+ .ui-widget-header .ui-icon {
936
+ background-image: url(images/ui-icons_222222_256x240.png);
937
+ }
938
+ .ui-state-default .ui-icon {
939
+ background-image: url(images/ui-icons_888888_256x240.png);
940
+ }
941
+ .ui-state-hover .ui-icon,
942
+ .ui-state-focus .ui-icon {
943
+ background-image: url(images/ui-icons_454545_256x240.png);
944
+ }
945
+ .ui-state-active .ui-icon {
946
+ background-image: url(images/ui-icons_454545_256x240.png);
947
+ }
948
+ .ui-state-highlight .ui-icon {
949
+ background-image: url(images/ui-icons_2e83ff_256x240.png);
950
+ }
951
+ .ui-state-error .ui-icon,
952
+ .ui-state-error-text .ui-icon {
953
+ background-image: url(images/ui-icons_cd0a0a_256x240.png);
954
+ }
955
+
956
+ /* positioning */
957
+ .ui-icon-blank { background-position: 16px 16px; }
958
+ .ui-icon-carat-1-n { background-position: 0 0; }
959
+ .ui-icon-carat-1-ne { background-position: -16px 0; }
960
+ .ui-icon-carat-1-e { background-position: -32px 0; }
961
+ .ui-icon-carat-1-se { background-position: -48px 0; }
962
+ .ui-icon-carat-1-s { background-position: -64px 0; }
963
+ .ui-icon-carat-1-sw { background-position: -80px 0; }
964
+ .ui-icon-carat-1-w { background-position: -96px 0; }
965
+ .ui-icon-carat-1-nw { background-position: -112px 0; }
966
+ .ui-icon-carat-2-n-s { background-position: -128px 0; }
967
+ .ui-icon-carat-2-e-w { background-position: -144px 0; }
968
+ .ui-icon-triangle-1-n { background-position: 0 -16px; }
969
+ .ui-icon-triangle-1-ne { background-position: -16px -16px; }
970
+ .ui-icon-triangle-1-e { background-position: -32px -16px; }
971
+ .ui-icon-triangle-1-se { background-position: -48px -16px; }
972
+ .ui-icon-triangle-1-s { background-position: -64px -16px; }
973
+ .ui-icon-triangle-1-sw { background-position: -80px -16px; }
974
+ .ui-icon-triangle-1-w { background-position: -96px -16px; }
975
+ .ui-icon-triangle-1-nw { background-position: -112px -16px; }
976
+ .ui-icon-triangle-2-n-s { background-position: -128px -16px; }
977
+ .ui-icon-triangle-2-e-w { background-position: -144px -16px; }
978
+ .ui-icon-arrow-1-n { background-position: 0 -32px; }
979
+ .ui-icon-arrow-1-ne { background-position: -16px -32px; }
980
+ .ui-icon-arrow-1-e { background-position: -32px -32px; }
981
+ .ui-icon-arrow-1-se { background-position: -48px -32px; }
982
+ .ui-icon-arrow-1-s { background-position: -64px -32px; }
983
+ .ui-icon-arrow-1-sw { background-position: -80px -32px; }
984
+ .ui-icon-arrow-1-w { background-position: -96px -32px; }
985
+ .ui-icon-arrow-1-nw { background-position: -112px -32px; }
986
+ .ui-icon-arrow-2-n-s { background-position: -128px -32px; }
987
+ .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
988
+ .ui-icon-arrow-2-e-w { background-position: -160px -32px; }
989
+ .ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
990
+ .ui-icon-arrowstop-1-n { background-position: -192px -32px; }
991
+ .ui-icon-arrowstop-1-e { background-position: -208px -32px; }
992
+ .ui-icon-arrowstop-1-s { background-position: -224px -32px; }
993
+ .ui-icon-arrowstop-1-w { background-position: -240px -32px; }
994
+ .ui-icon-arrowthick-1-n { background-position: 0 -48px; }
995
+ .ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
996
+ .ui-icon-arrowthick-1-e { background-position: -32px -48px; }
997
+ .ui-icon-arrowthick-1-se { background-position: -48px -48px; }
998
+ .ui-icon-arrowthick-1-s { background-position: -64px -48px; }
999
+ .ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
1000
+ .ui-icon-arrowthick-1-w { background-position: -96px -48px; }
1001
+ .ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
1002
+ .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
1003
+ .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
1004
+ .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
1005
+ .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
1006
+ .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
1007
+ .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
1008
+ .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
1009
+ .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
1010
+ .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
1011
+ .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
1012
+ .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
1013
+ .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
1014
+ .ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
1015
+ .ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
1016
+ .ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
1017
+ .ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
1018
+ .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
1019
+ .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
1020
+ .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
1021
+ .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
1022
+ .ui-icon-arrow-4 { background-position: 0 -80px; }
1023
+ .ui-icon-arrow-4-diag { background-position: -16px -80px; }
1024
+ .ui-icon-extlink { background-position: -32px -80px; }
1025
+ .ui-icon-newwin { background-position: -48px -80px; }
1026
+ .ui-icon-refresh { background-position: -64px -80px; }
1027
+ .ui-icon-shuffle { background-position: -80px -80px; }
1028
+ .ui-icon-transfer-e-w { background-position: -96px -80px; }
1029
+ .ui-icon-transferthick-e-w { background-position: -112px -80px; }
1030
+ .ui-icon-folder-collapsed { background-position: 0 -96px; }
1031
+ .ui-icon-folder-open { background-position: -16px -96px; }
1032
+ .ui-icon-document { background-position: -32px -96px; }
1033
+ .ui-icon-document-b { background-position: -48px -96px; }
1034
+ .ui-icon-note { background-position: -64px -96px; }
1035
+ .ui-icon-mail-closed { background-position: -80px -96px; }
1036
+ .ui-icon-mail-open { background-position: -96px -96px; }
1037
+ .ui-icon-suitcase { background-position: -112px -96px; }
1038
+ .ui-icon-comment { background-position: -128px -96px; }
1039
+ .ui-icon-person { background-position: -144px -96px; }
1040
+ .ui-icon-print { background-position: -160px -96px; }
1041
+ .ui-icon-trash { background-position: -176px -96px; }
1042
+ .ui-icon-locked { background-position: -192px -96px; }
1043
+ .ui-icon-unlocked { background-position: -208px -96px; }
1044
+ .ui-icon-bookmark { background-position: -224px -96px; }
1045
+ .ui-icon-tag { background-position: -240px -96px; }
1046
+ .ui-icon-home { background-position: 0 -112px; }
1047
+ .ui-icon-flag { background-position: -16px -112px; }
1048
+ .ui-icon-calendar { background-position: -32px -112px; }
1049
+ .ui-icon-cart { background-position: -48px -112px; }
1050
+ .ui-icon-pencil { background-position: -64px -112px; }
1051
+ .ui-icon-clock { background-position: -80px -112px; }
1052
+ .ui-icon-disk { background-position: -96px -112px; }
1053
+ .ui-icon-calculator { background-position: -112px -112px; }
1054
+ .ui-icon-zoomin { background-position: -128px -112px; }
1055
+ .ui-icon-zoomout { background-position: -144px -112px; }
1056
+ .ui-icon-search { background-position: -160px -112px; }
1057
+ .ui-icon-wrench { background-position: -176px -112px; }
1058
+ .ui-icon-gear { background-position: -192px -112px; }
1059
+ .ui-icon-heart { background-position: -208px -112px; }
1060
+ .ui-icon-star { background-position: -224px -112px; }
1061
+ .ui-icon-link { background-position: -240px -112px; }
1062
+ .ui-icon-cancel { background-position: 0 -128px; }
1063
+ .ui-icon-plus { background-position: -16px -128px; }
1064
+ .ui-icon-plusthick { background-position: -32px -128px; }
1065
+ .ui-icon-minus { background-position: -48px -128px; }
1066
+ .ui-icon-minusthick { background-position: -64px -128px; }
1067
+ .ui-icon-close { background-position: -80px -128px; }
1068
+ .ui-icon-closethick { background-position: -96px -128px; }
1069
+ .ui-icon-key { background-position: -112px -128px; }
1070
+ .ui-icon-lightbulb { background-position: -128px -128px; }
1071
+ .ui-icon-scissors { background-position: -144px -128px; }
1072
+ .ui-icon-clipboard { background-position: -160px -128px; }
1073
+ .ui-icon-copy { background-position: -176px -128px; }
1074
+ .ui-icon-contact { background-position: -192px -128px; }
1075
+ .ui-icon-image { background-position: -208px -128px; }
1076
+ .ui-icon-video { background-position: -224px -128px; }
1077
+ .ui-icon-script { background-position: -240px -128px; }
1078
+ .ui-icon-alert { background-position: 0 -144px; }
1079
+ .ui-icon-info { background-position: -16px -144px; }
1080
+ .ui-icon-notice { background-position: -32px -144px; }
1081
+ .ui-icon-help { background-position: -48px -144px; }
1082
+ .ui-icon-check { background-position: -64px -144px; }
1083
+ .ui-icon-bullet { background-position: -80px -144px; }
1084
+ .ui-icon-radio-on { background-position: -96px -144px; }
1085
+ .ui-icon-radio-off { background-position: -112px -144px; }
1086
+ .ui-icon-pin-w { background-position: -128px -144px; }
1087
+ .ui-icon-pin-s { background-position: -144px -144px; }
1088
+ .ui-icon-play { background-position: 0 -160px; }
1089
+ .ui-icon-pause { background-position: -16px -160px; }
1090
+ .ui-icon-seek-next { background-position: -32px -160px; }
1091
+ .ui-icon-seek-prev { background-position: -48px -160px; }
1092
+ .ui-icon-seek-end { background-position: -64px -160px; }
1093
+ .ui-icon-seek-start { background-position: -80px -160px; }
1094
+ /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
1095
+ .ui-icon-seek-first { background-position: -80px -160px; }
1096
+ .ui-icon-stop { background-position: -96px -160px; }
1097
+ .ui-icon-eject { background-position: -112px -160px; }
1098
+ .ui-icon-volume-off { background-position: -128px -160px; }
1099
+ .ui-icon-volume-on { background-position: -144px -160px; }
1100
+ .ui-icon-power { background-position: 0 -176px; }
1101
+ .ui-icon-signal-diag { background-position: -16px -176px; }
1102
+ .ui-icon-signal { background-position: -32px -176px; }
1103
+ .ui-icon-battery-0 { background-position: -48px -176px; }
1104
+ .ui-icon-battery-1 { background-position: -64px -176px; }
1105
+ .ui-icon-battery-2 { background-position: -80px -176px; }
1106
+ .ui-icon-battery-3 { background-position: -96px -176px; }
1107
+ .ui-icon-circle-plus { background-position: 0 -192px; }
1108
+ .ui-icon-circle-minus { background-position: -16px -192px; }
1109
+ .ui-icon-circle-close { background-position: -32px -192px; }
1110
+ .ui-icon-circle-triangle-e { background-position: -48px -192px; }
1111
+ .ui-icon-circle-triangle-s { background-position: -64px -192px; }
1112
+ .ui-icon-circle-triangle-w { background-position: -80px -192px; }
1113
+ .ui-icon-circle-triangle-n { background-position: -96px -192px; }
1114
+ .ui-icon-circle-arrow-e { background-position: -112px -192px; }
1115
+ .ui-icon-circle-arrow-s { background-position: -128px -192px; }
1116
+ .ui-icon-circle-arrow-w { background-position: -144px -192px; }
1117
+ .ui-icon-circle-arrow-n { background-position: -160px -192px; }
1118
+ .ui-icon-circle-zoomin { background-position: -176px -192px; }
1119
+ .ui-icon-circle-zoomout { background-position: -192px -192px; }
1120
+ .ui-icon-circle-check { background-position: -208px -192px; }
1121
+ .ui-icon-circlesmall-plus { background-position: 0 -208px; }
1122
+ .ui-icon-circlesmall-minus { background-position: -16px -208px; }
1123
+ .ui-icon-circlesmall-close { background-position: -32px -208px; }
1124
+ .ui-icon-squaresmall-plus { background-position: -48px -208px; }
1125
+ .ui-icon-squaresmall-minus { background-position: -64px -208px; }
1126
+ .ui-icon-squaresmall-close { background-position: -80px -208px; }
1127
+ .ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
1128
+ .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
1129
+ .ui-icon-grip-solid-vertical { background-position: -32px -224px; }
1130
+ .ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
1131
+ .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
1132
+ .ui-icon-grip-diagonal-se { background-position: -80px -224px; }
1133
+
1134
+
1135
+ /* Misc visuals
1136
+ ----------------------------------*/
1137
+
1138
+ /* Corner radius */
1139
+ .ui-corner-all,
1140
+ .ui-corner-top,
1141
+ .ui-corner-left,
1142
+ .ui-corner-tl {
1143
+ border-top-left-radius: 4px;
1144
+ }
1145
+ .ui-corner-all,
1146
+ .ui-corner-top,
1147
+ .ui-corner-right,
1148
+ .ui-corner-tr {
1149
+ border-top-right-radius: 4px;
1150
+ }
1151
+ .ui-corner-all,
1152
+ .ui-corner-bottom,
1153
+ .ui-corner-left,
1154
+ .ui-corner-bl {
1155
+ border-bottom-left-radius: 4px;
1156
+ }
1157
+ .ui-corner-all,
1158
+ .ui-corner-bottom,
1159
+ .ui-corner-right,
1160
+ .ui-corner-br {
1161
+ border-bottom-right-radius: 4px;
1162
+ }
1163
+
1164
+ /* Overlays */
1165
+ .ui-widget-overlay {
1166
+ background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;
1167
+ opacity: .3;
1168
+ filter: Alpha(Opacity=30);
1169
+ }
1170
+ .ui-widget-shadow {
1171
+ margin: -8px 0 0 -8px;
1172
+ padding: 8px;
1173
+ background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;
1174
+ opacity: .3;
1175
+ filter: Alpha(Opacity=30);
1176
+ border-radius: 8px;
1177
+ }
assets/css/jquery-ui.min.css CHANGED
File without changes
assets/css/jquery.dataTables.css CHANGED
File without changes
assets/css/jquery.fs.selecter-arrow.png CHANGED
File without changes
assets/css/jquery.fs.selecter.css CHANGED
File without changes
assets/css/jquery.fs.tipper-icon.png CHANGED
File without changes
assets/css/jquery.remodal.css CHANGED
File without changes
assets/css/jquery.tagsinput.min.css CHANGED
File without changes
assets/css/minimal.png CHANGED
File without changes
assets/css/minimal@2x.png CHANGED
File without changes
assets/css/phpDataTables.css CHANGED
File without changes
assets/css/wpDataTablesSkin.css CHANGED
File without changes
assets/css/wpDataTablesSkin_1.css CHANGED
File without changes
assets/css/wpdatatables-excel.min.css CHANGED
File without changes
assets/css/wpdatatables.min.css CHANGED
File without changes
assets/css/wpdatatables_admin.css CHANGED
File without changes
assets/fonts/wpdatatables-icons.eot CHANGED
File without changes
assets/fonts/wpdatatables-icons.svg CHANGED
File without changes
assets/fonts/wpdatatables-icons.ttf CHANGED
File without changes
assets/fonts/wpdatatables-icons.woff CHANGED
File without changes
assets/fonts/wpdatatablesicons-base.eot CHANGED
File without changes
assets/fonts/wpdatatablesicons-base.svg CHANGED
File without changes
assets/fonts/wpdatatablesicons-base.ttf CHANGED
File without changes
assets/fonts/wpdatatablesicons-base.woff CHANGED
File without changes
assets/img/buttonplus.png CHANGED
File without changes
assets/img/chart_thumbs/google_area_chart.jpg CHANGED
File without changes
assets/img/chart_thumbs/google_bar_chart.jpg CHANGED
File without changes
assets/img/chart_thumbs/google_bubble_chart.jpg CHANGED
File without changes
assets/img/chart_thumbs/google_candlestick_chart.jpg CHANGED
File without changes
assets/img/chart_thumbs/google_column_chart.jpg CHANGED
File without changes
assets/img/chart_thumbs/google_donut_chart.jpg CHANGED
File without changes
assets/img/chart_thumbs/google_gauge_chart.jpg CHANGED
File without changes
assets/img/chart_thumbs/google_histogram.jpg CHANGED
File without changes
assets/img/chart_thumbs/google_line_chart.jpg CHANGED
File without changes
assets/img/chart_thumbs/google_pie_chart.jpg CHANGED
File without changes
assets/img/chart_thumbs/google_scatter_chart.jpg CHANGED
File without changes
assets/img/chart_thumbs/google_stepped_area_chart.jpg CHANGED
File without changes
assets/img/chart_thumbs/highcharts_3d_column_chart.jpg CHANGED
File without changes
assets/img/chart_thumbs/highcharts_3d_donut_chart.jpg CHANGED
File without changes
assets/img/chart_thumbs/highcharts_3d_pie_chart.jpg CHANGED
File without changes
assets/img/chart_thumbs/highcharts_angular_gauge_chart.jpg CHANGED
File without changes
assets/img/chart_thumbs/highcharts_basic_area_chart.jpg CHANGED
File without changes
assets/img/chart_thumbs/highcharts_basic_bar_chart.jpg CHANGED
File without changes
assets/img/chart_thumbs/highcharts_basic_column_chart.jpg CHANGED
File without changes
assets/img/chart_thumbs/highcharts_donut_chart.jpg CHANGED
File without changes
assets/img/chart_thumbs/highcharts_line_chart.jpg CHANGED
File without changes
assets/img/chart_thumbs/highcharts_pie_chart.jpg CHANGED
File without changes
assets/img/chart_thumbs/highcharts_pie_with_gradient_chart.jpg CHANGED
File without changes
assets/img/chart_thumbs/highcharts_scatter_plot.jpg CHANGED
File without changes
assets/img/chart_thumbs/highcharts_solid_gauge_chart.jpg CHANGED
File without changes
assets/img/chart_thumbs/highcharts_stacked_area_chart.jpg CHANGED
File without changes
assets/img/chart_thumbs/highcharts_stacked_bar_chart.jpg CHANGED
File without changes
assets/img/chart_thumbs/highcharts_stacked_column_chart.jpg CHANGED
File without changes
assets/img/document-blank-icon.png CHANGED
File without changes
assets/img/icons.png CHANGED
File without changes
assets/img/loadingAnimation.gif CHANGED
File without changes
assets/img/reportbuilder_addon.png CHANGED
File without changes
assets/img/spinner.gif CHANGED
File without changes
assets/img/vc-charts-icon.png CHANGED
File without changes
assets/img/vc-icon.png CHANGED
File without changes
assets/img/wpdatatables-logo.png CHANGED
File without changes
assets/index.html CHANGED
File without changes
assets/js/colorpicker/bg.png ADDED
Binary file
assets/js/colorpicker/hue.png ADDED
Binary file
assets/js/colorpicker/jquery.modcoder.excolor.js ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * ExColor for jQuery, V. 1.2
3
+ * http://modcoder.org/
4
+ *
5
+ * Settings wizard http://modcoder.org/?ptab=jquery&item=excolor#wizard
6
+ *
7
+ * Copyright 2011, ModCoder
8
+ * Dual licensed under the MIT or GPL Version 2 licenses.
9
+ *
10
+ * Date: Thu May 12 21:36:33 2011
11
+ */
12
+
13
+ eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('H.57.58=J(C){O C=H.59({4f:0,4g:0,4h:0,3X:1E,4i:1F,3Y:1F,26:\'3s\',4j:\'3s\',2v:\'5a\',4k:1E,2g:1E,2w:4,3t:\'#5b\',4l:\'5c\',2X:1E,2Y:\'3s\',2Z:\'3Z\',30:\'3s\',40:\'12\',4m:\'12\',4n:J(){O a=\'\'}},C);2h P.5d(J(){O j=\'2i\',1X=\'2i\',2J=0,2x=0,2y=0,2z=0,31=0,14=0,4o=0,1s=0,S=0,2K=0,2A=0,1n=1,1o=1,1N=0,2j=0,1R=0,1S=0,1T=0,28=0,32=0,33=0,41=0,1d=P,34=H(P).1U(),2L=1F,1Y=0,1w=0,17=0,3u=1F,1x=\'\',1b=\'\',U=\'\',5e=0,1y=0;1X=H(\'5f\');35(O i=0;i<1X.29;i++){j=\'\'+H(1X[i]).5g(\'2a\');j=j.5h();j=j.4p(\'5i.5j.5k.5l\');I(j.29==2){U=j[0]}}O k=1t 2k();O l=1t 2k();O m=1t 2k();O n=1t 2k();O o=1t 2k();O p=1t 2k();O q=1t 2k();O t=1t 2k();k.2a=U+\'4q.1e\';l.2a=U+\'1N.1e\';m.2a=U+\'4r.2b\';n.2a=U+\'S.2b\';o.2a=U+\'42.2b\';p.2a=U+\'4s.2b\';q.2a=U+\'1O.1e\';t.2a=U+\'2M.1e\';1X=\'2i\';j=\'2i\';H(1d).2l(J(){1G(17);17=1p(J(){1w=1E},1h)}).2m(J(){1G(17);17=1p(J(){1w=1F},1h)});I(C.3X){H(1d).5m(\'<4t V="18:0;19:0 \'+H(1d).36()+\'X 0 0;1Z:37-38;T:12;M:12;2n-W:5n;"></4t>\')}O u=\'\',2o=\'\',3v=\'\',2g=\'\',2X=\'\';I(C.4k){u=\'-43-T-1P:3w;-3x-T-1P:3w;-3y-T-1P:3w;T-1P:3w;\';2o=\'-43-T-1P:2N;-3x-T-1P:2N;-3y-T-1P:2N;T-1P:2N;\';3v=\'-43-T-1P: 0 1Q 1Q 1Q;-3x-T-1P: 0 1Q 1Q 1Q;-3y-T-1P: 0 1Q 1Q 1Q;T-1P: 0 1Q 1Q 1Q;\'}I(C.2g){2g=\'44-2g:0 \'+C.2w+\'X \'+(C.2w*2)+\'X 0 \'+C.3t+\';-3y-44-2g:0 \'+C.2w+\'X \'+(C.2w*2)+\'X 0 \'+C.3t+\';-3x-44-2g:0 \'+C.2w+\'X \'+(C.2w*2)+\'X 0 \'+C.3t+\';\'}I(C.2X){2X=\'M-1I:0 0;M-Y:1q-Y;M-21:1c(\'+U+\'4s.2b);\'}O w=1t 2B(0,1,2,3,4,5,6,7,8,9);w[8]=8;w[46]=46;O y=1t 2B();y[\'0\']=1;y[\'1\']=1;y[\'2\']=1;y[\'3\']=1;y[\'4\']=1;y[\'5\']=1;y[\'6\']=1;y[\'7\']=1;y[\'8\']=1;y[\'9\']=1;y[\'A\']=1;y[\'B\']=1;y[\'C\']=1;y[\'D\']=1;y[\'E\']=1;y[\'F\']=1;y[\'a\']=1;y[\'b\']=1;y[\'c\']=1;y[\'d\']=1;y[\'e\']=1;y[\'f\']=1;O z=1t 2B();z[0]=\'5o 5p\';z[8]=\'5q\';z[5r]=\'3z v\';z[5s]=\'3z v\';z[5t]=\'3z c\';z[67]=\'3z c\';O A=\' \'+1a.5u();A=A.4p(\'.\');A=\'5v\'+A[1];O B=H(1d).3A().1U();H(1d).3A().4u(\'&5w;<1J 2c="5x" 4v="4v" 1i="\'+A+\'" 39="1K" V="1Z:12;3a:3B;Z:\'+(H(1d).36()-4)+\'X;W:\'+(H(1d).36()-4)+\'X;M:12;\'+2o+\'T:1u 1V \'+C.26+\';" />\');H(1d).5y().1L().5z(\'4w\'+A).N(\'1I\',\'3b\').N(\'5A\',\'45\').5B(\'1j\');1p(J(){O a=H(\'1j > .4w\'+A);H(1d).3A().1z(\'#\'+A).N(\'Z\',(H(a).36()-2)+\'X\');H(a).2d()},5C);1Y=H(1d).3A().1z(\'#\'+A).2l(J(){1G(17);17=1p(J(){1w=1E},50)}).2m(J(){1G(17);17=1p(J(){1w=1F},50)}).4x(J(){H(1d).4x()});I(C.3X){1p(J(){H(1Y).1L()},5D)}3C();J 3C(){1x=H.2p(H(1d).L()+\'\');1b=\'\';I(1x==\'\'){H(1Y).L(\'\').N(\'M\',\'1c(\'+U+\'2M.1e) Y\');H(14).1z(\'1J\').L(\'\')}1g{35(O i=0;i<1x.29;i++){I(1x.22(i)!=\'#\'&&(1x.22(i)+\'\')2O y){I(1b.29<6){1b+=1x.22(i)+\'\'}}}3c(1b.29){1k 0:1b=\'5E\'+1b;1f;1k 1:1b=\'4y\'+1b;1f;1k 2:1b=\'4z\'+1b;1f;1k 3:1b=\'4A\'+1b;1f;1k 4:1b=\'4B\'+1b;1f;1k 5:1b=\'0\'+1b;1f}1x=47(1b);1x=3D(1x[\'r\'],1x[\'g\'],1x[\'b\']);S=48-1a.1r(1x[\'h\']*1/3);I(S<0){S=0}I(S>1v){S=1v}1n=1x[\'s\'];1o=1x[\'v\'];H(1Y).N(\'M\',\'#\'+1b)}I(C.3Y){H(1d).N(\'T-1A\',\'#\'+1b)}};J 3d(){I(!2L){2h 1F}H(1N).2d();H(2A).2d();H(1y).2d();1w=1E;3c(C.40){1k\'4C\':H(14).4D({Z:\'3e\',W:\'3e\'},C.2v,J(){3f();H(14).2d()});1f;1k\'4E\':H(14).5F(C.2v,J(){3f();H(14).2d()});1f;1k\'4F\':H(14).49(C.2v,0,J(){3f();H(14).2d()});1f;4G:3f();H(14).2d();1f}2L=1F};J 3f(){I(3u){O a=\'#\'+3g(H(1R).L()*1,H(1S).L()*1,H(1T).L()*1);I(H.2p(H(1R).L())==\'\'&&H.2p(H(1S).L())==\'\'&&H.2p(H(1T).L())==\'\'){H(1Y).N(\'M\',\'1c(\'+U+\'2M.1e) Y\');H(1d).L(\'\')}1g{H(1Y).N(\'M\',a);I(C.3Y){H(1d).N(\'T-1A\',a)}H(1d).L(a)}3u=1F;C.4n()}};J 3E(){O a=3D(H(1R).L()*1,H(1S).L()*1,H(1T).L()*1);S=-1*(1a.1r(a[\'h\']*1/3)-48);I(S<0){S=0}I(S>1v){S=1v}1n=a[\'s\'];1o=a[\'v\'];H(1N).N(\'Q\',1s.Q+\'X\').N(\'10\',(1s.10+S)+\'X\');2C();3h();H(28).L(3g(H(1R).L()*1,H(1S).L()*1,H(1T).L()*1))};J 2P(){O a=1E,1l=\'\';1l=H.2p(H(28).L());3c(1l.29){1k 1:1l=\'4y\'+1l;1f;1k 2:1l=\'4z\'+1l;1f;1k 3:1l=\'4A\'+1l;1f;1k 4:1l=\'4B\'+1l;1f;1k 5:1l=\'0\'+1l;1f}I(1l.29>0){35(O i=0;i<1l.29;i++){I(!((1l.22(i)+\'\')2O y)){a=1F}}}I(a){I(1l==\'\'){S=1v;1n=0;1o=0}1g{O b=47(1l);H(1R).L(b[\'r\']);H(1S).L(b[\'g\']);H(1T).L(b[\'b\']);O b=3D(b[\'r\'],b[\'g\'],b[\'b\']);S=-1*(1a.1r(b[\'h\']*1/3)-48);I(S<0){S=0}I(S>1v){S=1v}1n=b[\'s\'];1o=b[\'v\']}H(1N).N(\'Q\',1s.Q+\'X\').N(\'10\',(1s.10+S)+\'X\');2C();3h();I(1l==\'\'){H(2j).N(\'M-21\',\'1c(\'+U+\'2M.1e)\').N(\'M-Y\',\'Y\');H(1Y).L(\'\').N(\'M\',\'1c(\'+U+\'2M.1e) Y\');H(1y).N(\'M\',\'1c(\'+U+\'1O.1e) -2D 0 1q-Y\');H(14).1z(\'1J\').L(\'\')}}};J 2E(){O a=2Q(-1*(S-1v)*3,1n,1o,\'4H\');H(1R).L(1a.1r(a[\'r\'])*1);H(1S).L(1a.1r(a[\'g\'])*1);H(1T).L(1a.1r(a[\'b\'])*1);H(28).L(3g(a[\'r\'],a[\'g\'],a[\'b\']))};J 2Q(a,b,c,d){O h=a/3F;O s=b/1h;O v=c/1h;O e=1t 2B();O f,2e,2q,3i,3j,2r,2s;I(s==0){e[\'r\']=v*1B;e[\'g\']=v*1B;e[\'b\']=v*1B}1g{f=h*6;2e=1a.5G(f);2q=v*(1-s);3i=v*(1-s*(f-2e));3j=v*(1-s*(1-(f-2e)));I(2e==0){2r=v;2s=3j;2F=2q}1g I(2e==1){2r=3i;2s=v;2F=2q}1g I(2e==2){2r=2q;2s=v;2F=3j}1g I(2e==3){2r=2q;2s=3i;2F=v}1g I(2e==4){2r=3j;2s=2q;2F=v}1g{2r=v;2s=2q;2F=3i};e[\'r\']=1a.1r(2r*1B);e[\'g\']=1a.1r(2s*1B);e[\'b\']=1a.1r(2F*1B)}I(d==\'3k\'){2h 3g(e[\'r\'],e[\'g\'],e[\'b\'])}1g I(d==\'4H\'){2h(e)}1g{2h(e)}};J 47(h){O a=1t 4a();a=h;a.4I();h=a;O i,x=\'5H\',c=\'\';O b=1t 2B();I(h){h=h.4I();35(i=0;i<6;i+=2){3c(i){1k 0:b[\'r\']=(16*x.2R(h.22(i))+x.2R(h.22(i+1)))*1;1f;1k 2:b[\'g\']=(16*x.2R(h.22(i))+x.2R(h.22(i+1)))*1;1f;1k 4:b[\'b\']=(16*x.2R(h.22(i))+x.2R(h.22(i+1)))*1;1f}}}2h b};J 3D(a,c,d){O e=0,2f=0,2S=0,h=0,s=0,b=0;O f=1t 2B();h=0.0;e=1a.4J(1a.4J(a,c),d);2f=1a.4K(1a.4K(a,c),d);2S=(2f-e);b=2f;I(2f!=0.0){s=1B.0*2S/2f}1g{s=0.0}I(s!=0.0){I(a==2f){h=(c-d)/2S}1g{I(c==2f){h=2.0+(d-a)/2S}1g{I(d==2f){h=4.0+(a-c)/2S}}}}1g{h=-1.0}h=h*60;I(h<0.0){h=h+3F.0}f[\'h\']=1a.1r(h);f[\'s\']=1a.1r(s*1h/1B);f[\'v\']=1a.1r(b*1h/1B);I(f[\'h\']>3F){f[\'h\']=3F}I(f[\'s\']>1h){f[\'s\']=1h}I(f[\'v\']>1h){f[\'v\']=1h}2h f};J 3g(r,g,b){O a=1t 2B();a[0]=r;a[1]=g;a[2]=b;O c=[\'0\',\'1\',\'2\',\'3\',\'4\',\'5\',\'6\',\'7\',\'8\',\'9\',\'a\',\'b\',\'c\',\'d\',\'e\',\'f\'];O d=\'\';35(O i=0;i<a.29;i++){4b=4L(a[i]);d+=c[4L(4b/16)]+c[4b%16]}2h d};J 2C(){H(1N).N(\'Q\',1s.Q+\'X\').N(\'10\',(1s.10+S)+\'X\');H(2A).N(\'Q\',(1C.Q+1a.1r(1n*1.3)-4)+\'X\').N(\'10\',(1C.10+H(2K).W()-4-1a.1r(1o*1.3))+\'X\')};J 3h(){H(2K).N(\'M-1A\',\'#\'+2Q(-1*(S-1v)*3,1h,1h,\'3k\'));H(2j).N(\'M-1A\',\'#\'+2Q(-1*(S-1v)*3,1n,1o,\'3k\')).N(\'M-21\',\'12\');H(1y).N(\'M\',\'1c(\'+U+\'1O.1e) 0 0 1q-Y\')};1p(J(){34=H(1d).1U()},5I);J 4M(){O b=-1*C.4f*20,2T=C.4m,3G,2U;I(3H(2T*1)){3G=2U=\'\'}1g{2T=2T*1;3G=\'z-4N:\'+2T+\';\';2U=\'z-4N:\'+(2T+1)+\';\'}O c=\'<K 1i="5J" V="Z:5K;W:5L;1D:Q;M:12;T:1u 1V \'+C.26+\';18:0;19:0;\'+u+\'"><K 1i="4O" V="Z:5M;W:5N;T:1u 1V 3Z;1D:Q;19:0;18:0;\'+u+\'"></K></K>\';3C();H(\'1j\').4u(\'<K V="1Z:12;\'+3G+\'Z:4P;W:4Q;1I:3b;4R:45;19:0;18:0;\'+3v+2g+\'" 1i="3I" 1i="5O"><K 1i="5P" V="W:3J;Z:5Q;18:0;19:1M 5R 1M 1M;1D:Q;4R:45;M-1A:\'+C.4l+\';T:1u 1V \'+C.26+\';\'+2X+3v+\'"><K 1i="5S" V="Z:3J;W:3J;1D:Q;M:12;19:0;18:0;T:12;"><K 1i="4S" V="Z:4T;W:4T;T:5T 1V \'+C.4j+\';19:0;18:0;\'+u+\'"><K V="Z:3K;W:3K;1D:Q;M-21:1c(\'+U+\'4r.2b);M-1I:0 0;M-Y:1q-Y;T:1u 1V 3Z;19:0;18:0;"></K></K></K><K 1i="5U" V="Z:2D;W:3K;1D:Q;19:2G 5V 3e 1M;18:0;T:12;"><K 1i="4U" V="Z:2D;W:3K;1D:Q;M:1c(\'+U+\'S.2b) \'+b+\'X 0 1q-Y;18:0;19:0;T:12;"></K></K><K 1i="5W" V="1D:Q;1m-1H:1M;1m-3l: 3m, 3n, 3o, 3p-3q;Z:4V;W:3J;18:0;19:0;T:12;">\'+c+\'<K 2c="3L" V="1D:Q;19:4W 0 0 0;18:0;T:12;"><b V="1Z:37-38;Z:23;1K-2t:Q;1m-1H:1M;1m-3l: 3m, 3n, 3o, 3p-3q;1m-3M:3N;1A:\'+C.30+\';2n-W:23;">R</b><1J V="2n-W:23;19:1u 0;18:0;1A:\'+C.2Y+\';T:1u 1V \'+C.26+\';M:\'+C.2Z+\';Z:3O;1m-1H:1M;1K-2t:3P;\'+2o+\'" 1i="4X" 2c="3r 2V" 39="1K" 1H="3" 3Q="3" /></K><K 2c="3L" V="1D:Q;19:2N 0 0 0;18:0;T:12;"><b V="1Z:37-38;Z:23;1K-2t:Q;1m-1H:1M;1m-3l: 3m, 3n, 3o, 3p-3q;1m-3M:3N;1A:\'+C.30+\';2n-W:23;">G</b><1J V="2n-W:23;19:1u 0;18:0;1A:\'+C.2Y+\';T:1u 1V \'+C.26+\';M:\'+C.2Z+\';Z:3O;1m-1H:1M;1K-2t:3P;\'+2o+\'" 1i="4Y" 2c="3r 2V" 39="1K" 1H="3" 3Q="3" /></K><K 2c="3L" V="1D:Q;19:2N 0 0 0;18:0;T:12;"><b V="1Z:37-38;Z:23;1K-2t:Q;1m-1H:1M;1m-3l: 3m, 3n, 3o, 3p-3q;1m-3M:3N;1A:\'+C.30+\';2n-W:23;">B</b><1J V="19:1u 0;18:0;1A:\'+C.2Y+\';T:1u 1V \'+C.26+\';M:\'+C.2Z+\';Z:3O;1m-1H:1M;1K-2t:3P;\'+2o+\'" 1i="4Z" 2c="3r 2V" 39="1K" 1H="3" 3Q="3" /></K><K 2c="3L" V="1D:Q;19:4W 0;18:0;T:12;"><b V="1Z:37-38;Z:23;1K-2t:Q;1m-1H:1M;1m-3l: 3m, 3n, 3o, 3p-3q;1m-3M:3N;1A:\'+C.30+\';2n-W:23;">#</b><1J V="19:1u 0;18:0;1A:\'+C.2Y+\';T:1u 1V \'+C.26+\';M:\'+C.2Z+\';Z:3O;1m-1H:1M;1K-2t:3P;\'+2o+\'" 1i="51" 2c="3r" 39="1K" 1H="6" 3Q="6" /></K><K V="Z:4V;W:2G;19:0;18:0;T:12;1D:Q;"><K 1i="52" V="18:0;19:0;Z:3R;W:2G;1D:Q;3a:3B;M-21:1c(\'+U+\'42.2b);M-1I: 0 0;M-Y:1q-Y;"></K><K 1i="53" V="18:0;19:0;Z:2G;W:2G;1D:5X;3a:3B;M-21:1c(\'+U+\'42.2b);M-1I: -3R 0;M-Y:1q-Y;"></K></K></K></K></K><K V="1Z:12;\'+2U+\'Z:4c;W:4c;1I:3b;M: 1c(\'+U+\'4q.1e) \'+(-1*C.4h*11)+\'X 0 1q-Y;18:0;19:0;T:12;" 1i="2H"></K><K V="1Z:12;\'+2U+\'Z:2D;W:4c;1I:3b;M: 1c(\'+U+\'1N.1e) \'+(-1*C.4g*20)+\'X 0 1q-Y;18:0;19:0;T:12;3a:n-5Y;" 1i="2I"></K><K 1i="4d" V="T:1u 1V \'+C.26+\';1Z:12;\'+2U+\'19:0;18:0;1m-1H:1u;2n-W:1u;Z:2D;W:5Z;M:1c(\'+U+\'1O.1e) 0 0 1q-Y;1I:3b;3a:3B;\'+2o+\'"></K>\');34=H(1d).1U();14=H(\'1j > K#3I\').N(\'Q\',34.Q+\'X\').N(\'10\',(34.10+H(1d).36())+\'X\').2l(J(){1G(17);17=1p(J(){1w=1E},50)}).2m(J(){1G(17);17=1p(J(){1w=1F},50)});28=H(14).1z(\'1J#51\');1y=H(\'1j > K#4d\');1N=H(\'1j > K#2I\');2A=H(\'1j > K#2H\');3c(C.40){1k\'4C\':H(14).N(\'Z\',\'3e\').N(\'W\',\'3e\').1L().4D({Z:\'4P\',W:\'4Q\'},C.2v,J(){H(P).1L();H(\'1j > K#2I, 1j > K#2H\').1L();H(1y).1L()});1f;1k\'4E\':H(14).61(C.2v,J(){H(P).1L();H(\'1j > K#2I, 1j > K#2H\').1L();H(1y).1L()});1f;1k\'4F\':H(\'1j > K#3I, 1j > K#2I, 1j > K#2H, 1j > K#4d\').49(1,0,J(){H(P).1L().49(C.2v,1)});1f;4G:H(14).1L();H(1y).1L();H(\'1j > K#2I, 1j > K#2H\').1L();1f}31=H(14).1z(\'K#4U\');2K=H(14).1z(\'K#4S K\');2j=H(14).1z(\'#4O\');1R=H(14).1z(\'1J#4X\');1S=H(14).1z(\'1J#4Y\');1T=H(14).1z(\'1J#4Z\');33=H(14).1z(\'#52\');41=H(14).1z(\'#53\');4o=H(14).1U();1C=H(2K).1U();1s=H(31).1U();H(1y).1W(J(){I(H.2p(H(1R).L())==\'\'&&H.2p(H(1S).L())==\'\'&&H.2p(H(1T).L())==\'\'){H(2j).N(\'M-21\',\'12\');H(P).N(\'M\',\'1c(\'+U+\'1O.1e) 0 0 1q-Y\');2E()}1g{H(2j).N(\'M-21\',\'1c(\'+U+\'2M.1e)\').N(\'M-Y\',\'Y\');H(14).1z(\'1J\').L(\'\');H(P).N(\'M\',\'1c(\'+U+\'1O.1e) -2D 0 1q-Y\')}}).N(\'Q\',(1s.Q-1)+\'X\').N(\'10\',(1s.10-15)+\'X\').2l(J(){1G(17);17=1p(J(){1w=1E},50)}).2m(J(){1G(17);17=1p(J(){1w=1F},50)});H(1N).2l(J(){1G(17);17=1p(J(){1w=1E},50)}).2m(J(){1G(17);17=1p(J(){1w=1F},50)});H(2A).2l(J(){1G(17);17=1p(J(){1w=1E},50)}).2m(J(){1G(17);17=1p(J(){1w=1F},50)}).62(J(e){H(33).1W()});H(2A).3S(J(e){2y=H(P).1U();2J=e.2W-2y.Q;2x=e.24-2y.10;j=P;H(1y).N(\'M\',\'1c(\'+U+\'1O.1e) 0 0 1q-Y\');e.25()}).1W(J(e){});H(1N).3S(J(e){2z=H(P).1U();2J=e.2W-2z.Q;2x=e.24-2z.10;1X=P;H(1y).N(\'M\',\'1c(\'+U+\'1O.1e) 0 0 1q-Y\');e.25()});H(31).3S(J(e){I(e.24>=(1s.10+5)&&e.24<=((1s.10+H(31).W())-6)){S=e.24-1s.10-5;I(S<0)S=0;I(S>1v)S=1v;H(1y).N(\'M\',\'1c(\'+U+\'1O.1e) 0 0 1q-Y\');2C();3h();2E();2z=H(1N).1U();2J=e.2W-2z.Q;2x=e.24-2z.10;1X=1N;e.25()}});H(2K).3S(J(e){1n=1a.1r((e.2W-1C.Q-1)/1.3);I(1n>1h){1n=1h}I(1n<1){1n=1}1o=-1*(1a.1r((e.24-1C.10-1)/1.3)-1h);I(1o>1h){1o=1h}I(1o<1){1o=1}H(1y).N(\'M\',\'1c(\'+U+\'1O.1e) 0 0 1q-Y\');2C();H(2j).N(\'M-1A\',\'#\'+2Q(-1*(S-1v)*3,1n,1o,\'3k\')).N(\'M-21\',\'12\');2E();j=2A;2y=H(j).1U();2J=e.2W-2y.Q;2x=e.24-2y.10;e.25()});H(14).1z(\'1J.3r\').63(J(a){I(H(P).4e(\'2V\')){I(!((4a.54(a.3T)*1)2O w)&&!(a.3T 2O z)){a.25()}}1g{I(!(4a.54(a.3T)2O y)&&!(a.3T 2O z)){a.25()}}}).64(J(){I(H(P).4e(\'2V\')){I(H(P).L()==\'\'){H(P).L(\'0\')}I(3H(H(P).L()*1)){H(P).L(\'0\')}I(H(P).L()*1>1B){H(P).L(\'1B\')}I(H(P).L()*1<0){H(P).L(\'0\')}3E()}1g{2P()}}).55(J(){I(H(P).4e(\'2V\')){I(H(P).L()==\'\'){H(P).L(\'0\')}I(3H(H(P).L()*1)){H(P).L(\'0\')}I(H(P).L()*1>1B){H(P).L(\'1B\')}I(H(P).L()*1<0){H(P).L(\'0\')}3E()}1g{2P()}});28[0].3U=28[0].3V=J(e){1G(32);32=1p(J(){2P()},1h)};1R[0].3U=1R[0].3V=1S[0].3U=1S[0].3V=1T[0].3U=1T[0].3V=J(e){I(H(P).L()==\'\'){H(P).L(\'0\')}I(3H(H(P).L()*1)){H(P).L(\'0\')}I(H(P).L()*1>1B){H(P).L(\'1B\')}I(H(P).L()*1<0){H(P).L(\'0\')}1G(32);32=1p(J(){3E()},1h)};H(33).1W(J(){3u=1E;3d()}).2l(J(){H(P).N(\'M-1I\',\'0 -2G\')}).2m(J(){H(P).N(\'M-1I\',\'0 0\')});H(41).1W(J(){3d()}).2l(J(){H(P).N(\'M-1I\',\'-3R -2G\')}).2m(J(){H(P).N(\'M-1I\',\'-3R 0\')});2C();H(28).L(1b);2P();2L=1E;I(1b==\'\'){H(1y).N(\'M\',\'1c(\'+U+\'1O.1e) -2D 0 1q-Y\')}1g{H(1y).N(\'M\',\'1c(\'+U+\'1O.1e) 0 0 1q-Y\')}};H(65).66(J(e){j=\'2i\';1X=\'2i\'}).68(J(e){I(j!=\'2i\'){e.25();O a=0,2u=0;a=e.2W-2J;I(a<(1C.Q-4)){a=1C.Q-4}I(a>(1C.Q+3W)){a=1C.Q+3W}2u=e.24-2x;I(2u<(1C.10-4)){2u=1C.10-4}I(2u>(1C.10+3W)){2u=1C.10+3W}H(j).N(\'Q\',a+\'X\').N(\'10\',2u+\'X\');1o=-1*(1a.1r((2u-1C.10+5)/1.3)-1h)+1;1n=1a.1r((a-1C.Q+5)/1.3);I(1o==1){1o=0}I(1n==1){1n=0}H(2j).N(\'M-1A\',\'#\'+2Q(-1*(S-1v)*3,1n,1o,\'3k\')).N(\'M-21\',\'12\');2E()}I(1X!=\'2i\'){e.25();S=e.24-1s.10-2x;I(S<0){S=0}I(S>1v){S=1v}H(1X).N(\'Q\',1s.Q+\'X\').N(\'10\',(1s.10+S)+\'X\');3h();2E()}}).69(J(a){I(a.56==\'27\'){a.25();3d()}I(a.56==\'13\'){a.25();H(33).1W()}}).1W(J(){I(!1w){3d()}});H(1d).1W(J(){I(!2L){H(\'1j > K#2I, 1j > K#2H, 1j > K#3I\').6a().2d();1p(J(){4M()},50)}}).55(J(){I(2L){3C();2E();2C();H(28).L(1b);2P()}});H(1Y).1W(J(){H(1d).1W()});I(C.4i){H(1Y).1W()}})};',62,383,'|||||||||||||||||||||||||||||||||||||||||||jQuery|if|function|div|val|background|css|var|this|left||hue|border|root_path|style|height|px|repeat|width|top||none||wrapper|||click_to|margin|padding|Math|inputhex|url|aitem|gif|break|else|100|id|body|case|hexistr|font|saturation|brightness|setTimeout|no|round|pos_huebox|new|1px|119|click_flag|parsex|switcher|find|color|255|pos_sbbox|float|true|false|clearTimeout|size|position|input|text|show|10px|slider|transp0|radius|7px|inp_r|inp_g|inp_b|offset|solid|click|moved_slider|isample|display||image|charAt|13px|pageY|preventDefault|border_color||inp_hex|length|src|png|class|remove|var_i|maxrgb|shadow|return|mel|colsample|Image|mouseenter|mouseleave|line|rad3px|trim|var_1|var_r|var_g|align|tty|anim_speed|shadow_size|correct_y|pos_sel|pos_slider|sb_sel|Array|init_positions|20px|update_inputs|var_b|15px|modcoder_picker|modcoder_slider|correct_x|sbbox|opened|transp|3px|in|hex_valid_and_draw|hsb2rgb_hex|indexOf|delta|cz_index|zindex2|modcoder_rgb|pageX|backlight|input_text_color|input_background_color|label_color|huebox|hexto|ok_but|aitem_pos|for|outerHeight|inline|block|type|cursor|absolute|switch|action_exit|0px|action_ok|rgb2hex|init_colors|var_2|var_3|hex|family|Verdana|Arial|Helvetica|Sans|serif|modcoder_input|black|shadow_color|userok|radwrap|5px|moz|webkit|ctrl|parent|pointer|init_color|rgb2hsv|draw_rgb|360|zindex1|isNaN|modcoder_colorpicker|140px|130px|modcoder_dataitem|weight|bold|49px|center|maxlength|47px|mousedown|which|onpaste|oninput|125|color_box|show_color_on_border|white|effect|close_but|ok|khtml|box|hidden||hex2rgb|120|fadeTo|String|dec|11px|modcoder_switcher|hasClass|hue_bar|hue_slider|sb_slider|demo_mode|sb_border_color|round_corners|background_color|z_index|callback_on_ok|pos_wrap|split|sel|bg|shbg|span|append|readonly|mds|focus|00000|0000|000|00|zoom|animate|slide|fade|default|rgb|toUpperCase|min|max|parseInt|run_modcoder_colorpicker|index|modcoder_sample|265px|162px|overflow|modcoder_grad|132px|modcoder_hue|66px|6px|modcoder_r|modcoder_g|modcoder_b||modcoder_hex|modcoder_ok|modcoder_close|fromCharCode|keyup|keyCode|fn|modcoder_excolor|extend|slow|8a8a8a|silver|each|looper|script|attr|toLowerCase|jquery|modcoder|excolor|js|wrap|auto|system|keys|backspace|118|86|99|random|mc|nbsp|modcoder_excolor_clrbox|clone|addClass|visibility|appendTo|300|150|000000|slideUp|floor|0123456789ABCDEF|200|modcoder_sample_wrapper|62px|30px|60px|28px|modcoder_colorpicker_class|modcoder_colorpicker_wrapper|244px|9px|modcoder_grad_wrap|4px|modcoder_hue_wrap|8px|modcoder_data|right|resize|12px||slideDown|dblclick|keypress|change|document|mouseup||mousemove|keydown|stop'.split('|'),0,{}))
assets/js/colorpicker/ok.png ADDED
Binary file
assets/js/colorpicker/sel.gif ADDED
Binary file
assets/js/colorpicker/shbg.png ADDED
Binary file
assets/js/colorpicker/slider.gif ADDED
Binary file
assets/js/colorpicker/transp.gif ADDED
Binary file
assets/js/colorpicker/transp0.gif ADDED
Binary file
assets/js/datepicker/legacy.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Legacy browser support
3
+ */
4
+ [].map||(Array.prototype.map=function(a,b){for(var c=this,d=c.length,e=new Array(d),f=0;d>f;f++)f in c&&(e[f]=a.call(b,c[f],f,c));return e}),[].filter||(Array.prototype.filter=function(a){if(null==this)throw new TypeError;var b=Object(this),c=b.length>>>0;if("function"!=typeof a)throw new TypeError;for(var d=[],e=arguments[1],f=0;c>f;f++)if(f in b){var g=b[f];a.call(e,g,f,b)&&d.push(g)}return d}),[].indexOf||(Array.prototype.indexOf=function(a){if(null==this)throw new TypeError;var b=Object(this),c=b.length>>>0;if(0===c)return-1;var d=0;if(arguments.length>1&&(d=Number(arguments[1]),d!=d?d=0:0!==d&&1/0!=d&&d!=-1/0&&(d=(d>0||-1)*Math.floor(Math.abs(d)))),d>=c)return-1;for(var e=d>=0?d:Math.max(c-Math.abs(d),0);c>e;e++)if(e in b&&b[e]===a)return e;return-1});/*!
5
+ * Cross-Browser Split 1.1.1
6
+ * Copyright 2007-2012 Steven Levithan <stevenlevithan.com>
7
+ * Available under the MIT License
8
+ * http://blog.stevenlevithan.com/archives/cross-browser-split
9
+ */
10
+ var nativeSplit=String.prototype.split,compliantExecNpcg=void 0===/()??/.exec("")[1];String.prototype.split=function(a,b){var c=this;if("[object RegExp]"!==Object.prototype.toString.call(a))return nativeSplit.call(c,a,b);var d,e,f,g,h=[],i=(a.ignoreCase?"i":"")+(a.multiline?"m":"")+(a.extended?"x":"")+(a.sticky?"y":""),j=0;for(a=new RegExp(a.source,i+"g"),c+="",compliantExecNpcg||(d=new RegExp("^"+a.source+"$(?!\\s)",i)),b=void 0===b?-1>>>0:b>>>0;(e=a.exec(c))&&(f=e.index+e[0].length,!(f>j&&(h.push(c.slice(j,e.index)),!compliantExecNpcg&&e.length>1&&e[0].replace(d,function(){for(var a=1;a<arguments.length-2;a++)void 0===arguments[a]&&(e[a]=void 0)}),e.length>1&&e.index<c.length&&Array.prototype.push.apply(h,e.slice(1)),g=e[0].length,j=f,h.length>=b)));)a.lastIndex===e.index&&a.lastIndex++;return j===c.length?(g||!a.test(""))&&h.push(""):h.push(c.slice(j)),h.length>b?h.slice(0,b):h};
assets/js/datepicker/picker.date.js ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ /*!
2
+ * Date picker for pickadate.js v3.5.5
3
+ * http://amsul.github.io/pickadate.js/date.htm
4
+ */
5
+ !function(a){"function"==typeof define&&define.amd?define(["picker","jquery"],a):"object"==typeof exports?module.exports=a(require("./picker.js"),require("jquery")):a(Picker,jQuery)}(function(a,b){function c(a,b){var c=this,d=a.$node[0],e=d.value,f=a.$node.data("value"),g=f||e,h=f?b.formatSubmit:b.format,i=function(){return d.currentStyle?"rtl"==d.currentStyle.direction:"rtl"==getComputedStyle(a.$root[0]).direction};c.settings=b,c.$node=a.$node,c.queue={min:"measure create",max:"measure create",now:"now create",select:"parse create validate",highlight:"parse navigate create validate",view:"parse create validate viewset",disable:"deactivate",enable:"activate"},c.item={},c.item.clear=null,c.item.disable=(b.disable||[]).slice(0),c.item.enable=-function(a){return a[0]===!0?a.shift():-1}(c.item.disable),c.set("min",b.min).set("max",b.max).set("now"),g?c.set("select",g,{format:h,defaultValue:!0}):c.set("select",null).set("highlight",c.item.now),c.key={40:7,38:-7,39:function(){return i()?-1:1},37:function(){return i()?1:-1},go:function(a){var b=c.item.highlight,d=new Date(b.year,b.month,b.date+a);c.set("highlight",d,{interval:a}),this.render()}},a.on("render",function(){a.$root.find("."+b.klass.selectMonth).on("change",function(){var c=this.value;c&&(a.set("highlight",[a.get("view").year,c,a.get("highlight").date]),a.$root.find("."+b.klass.selectMonth).trigger("focus"))}),a.$root.find("."+b.klass.selectYear).on("change",function(){var c=this.value;c&&(a.set("highlight",[c,a.get("view").month,a.get("highlight").date]),a.$root.find("."+b.klass.selectYear).trigger("focus"))})},1).on("open",function(){var d="";c.disabled(c.get("now"))&&(d=":not(."+b.klass.buttonToday+")"),a.$root.find("button"+d+", select").attr("disabled",!1)},1).on("close",function(){a.$root.find("button, select").attr("disabled",!0)},1)}var d=7,e=6,f=a._;c.prototype.set=function(a,b,c){var d=this,e=d.item;return null===b?("clear"==a&&(a="select"),e[a]=b,d):(e["enable"==a?"disable":"flip"==a?"enable":a]=d.queue[a].split(" ").map(function(e){return b=d[e](a,b,c)}).pop(),"select"==a?d.set("highlight",e.select,c):"highlight"==a?d.set("view",e.highlight,c):a.match(/^(flip|min|max|disable|enable)$/)&&(e.select&&d.disabled(e.select)&&d.set("select",e.select,c),e.highlight&&d.disabled(e.highlight)&&d.set("highlight",e.highlight,c)),d)},c.prototype.get=function(a){return this.item[a]},c.prototype.create=function(a,c,d){var e,g=this;return c=void 0===c?a:c,c==-1/0||1/0==c?e=c:b.isPlainObject(c)&&f.isInteger(c.pick)?c=c.obj:b.isArray(c)?(c=new Date(c[0],c[1],c[2]),c=f.isDate(c)?c:g.create().obj):c=f.isInteger(c)||f.isDate(c)?g.normalize(new Date(c),d):g.now(a,c,d),{year:e||c.getFullYear(),month:e||c.getMonth(),date:e||c.getDate(),day:e||c.getDay(),obj:e||c,pick:e||c.getTime()}},c.prototype.createRange=function(a,c){var d=this,e=function(a){return a===!0||b.isArray(a)||f.isDate(a)?d.create(a):a};return f.isInteger(a)||(a=e(a)),f.isInteger(c)||(c=e(c)),f.isInteger(a)&&b.isPlainObject(c)?a=[c.year,c.month,c.date+a]:f.isInteger(c)&&b.isPlainObject(a)&&(c=[a.year,a.month,a.date+c]),{from:e(a),to:e(c)}},c.prototype.withinRange=function(a,b){return a=this.createRange(a.from,a.to),b.pick>=a.from.pick&&b.pick<=a.to.pick},c.prototype.overlapRanges=function(a,b){var c=this;return a=c.createRange(a.from,a.to),b=c.createRange(b.from,b.to),c.withinRange(a,b.from)||c.withinRange(a,b.to)||c.withinRange(b,a.from)||c.withinRange(b,a.to)},c.prototype.now=function(a,b,c){return b=new Date,c&&c.rel&&b.setDate(b.getDate()+c.rel),this.normalize(b,c)},c.prototype.navigate=function(a,c,d){var e,f,g,h,i=b.isArray(c),j=b.isPlainObject(c),k=this.item.view;if(i||j){for(j?(f=c.year,g=c.month,h=c.date):(f=+c[0],g=+c[1],h=+c[2]),d&&d.nav&&k&&k.month!==g&&(f=k.year,g=k.month),e=new Date(f,g+(d&&d.nav?d.nav:0),1),f=e.getFullYear(),g=e.getMonth();new Date(f,g,h).getMonth()!==g;)h-=1;c=[f,g,h]}return c},c.prototype.normalize=function(a){return a.setHours(0,0,0,0),a},c.prototype.measure=function(a,b){var c=this;return b?"string"==typeof b?b=c.parse(a,b):f.isInteger(b)&&(b=c.now(a,b,{rel:b})):b="min"==a?-1/0:1/0,b},c.prototype.viewset=function(a,b){return this.create([b.year,b.month,1])},c.prototype.validate=function(a,c,d){var e,g,h,i,j=this,k=c,l=d&&d.interval?d.interval:1,m=-1===j.item.enable,n=j.item.min,o=j.item.max,p=m&&j.item.disable.filter(function(a){if(b.isArray(a)){var d=j.create(a).pick;d<c.pick?e=!0:d>c.pick&&(g=!0)}return f.isInteger(a)}).length;if((!d||!d.nav&&!d.defaultValue)&&(!m&&j.disabled(c)||m&&j.disabled(c)&&(p||e||g)||!m&&(c.pick<=n.pick||c.pick>=o.pick)))for(m&&!p&&(!g&&l>0||!e&&0>l)&&(l*=-1);j.disabled(c)&&(Math.abs(l)>1&&(c.month<k.month||c.month>k.month)&&(c=k,l=l>0?1:-1),c.pick<=n.pick?(h=!0,l=1,c=j.create([n.year,n.month,n.date+(c.pick===n.pick?0:-1)])):c.pick>=o.pick&&(i=!0,l=-1,c=j.create([o.year,o.month,o.date+(c.pick===o.pick?0:1)])),!h||!i);)c=j.create([c.year,c.month,c.date+l]);return c},c.prototype.disabled=function(a){var c=this,d=c.item.disable.filter(function(d){return f.isInteger(d)?a.day===(c.settings.firstDay?d:d-1)%7:b.isArray(d)||f.isDate(d)?a.pick===c.create(d).pick:b.isPlainObject(d)?c.withinRange(d,a):void 0});return d=d.length&&!d.filter(function(a){return b.isArray(a)&&"inverted"==a[3]||b.isPlainObject(a)&&a.inverted}).length,-1===c.item.enable?!d:d||a.pick<c.item.min.pick||a.pick>c.item.max.pick},c.prototype.parse=function(a,b,c){var d=this,e={};return b&&"string"==typeof b?(c&&c.format||(c=c||{},c.format=d.settings.format),d.formats.toArray(c.format).map(function(a){var c=d.formats[a],g=c?f.trigger(c,d,[b,e]):a.replace(/^!/,"").length;c&&(e[a]=b.substr(0,g)),b=b.substr(g)}),[e.yyyy||e.yy,+(e.mm||e.m)-1,e.dd||e.d]):b},c.prototype.formats=function(){function a(a,b,c){var d=a.match(/[^\x00-\x7F]+|\w+/)[0];return c.mm||c.m||(c.m=b.indexOf(d)+1),d.length}function b(a){return a.match(/\w+/)[0].length}return{d:function(a,b){return a?f.digits(a):b.date},dd:function(a,b){return a?2:f.lead(b.date)},ddd:function(a,c){return a?b(a):this.settings.weekdaysShort[c.day]},dddd:function(a,c){return a?b(a):this.settings.weekdaysFull[c.day]},m:function(a,b){return a?f.digits(a):b.month+1},mm:function(a,b){return a?2:f.lead(b.month+1)},mmm:function(b,c){var d=this.settings.monthsShort;return b?a(b,d,c):d[c.month]},mmmm:function(b,c){var d=this.settings.monthsFull;return b?a(b,d,c):d[c.month]},yy:function(a,b){return a?2:(""+b.year).slice(2)},yyyy:function(a,b){return a?4:b.year},toArray:function(a){return a.split(/(d{1,4}|m{1,4}|y{4}|yy|!.)/g)},toString:function(a,b){var c=this;return c.formats.toArray(a).map(function(a){return f.trigger(c.formats[a],c,[0,b])||a.replace(/^!/,"")}).join("")}}}(),c.prototype.isDateExact=function(a,c){var d=this;return f.isInteger(a)&&f.isInteger(c)||"boolean"==typeof a&&"boolean"==typeof c?a===c:(f.isDate(a)||b.isArray(a))&&(f.isDate(c)||b.isArray(c))?d.create(a).pick===d.create(c).pick:b.isPlainObject(a)&&b.isPlainObject(c)?d.isDateExact(a.from,c.from)&&d.isDateExact(a.to,c.to):!1},c.prototype.isDateOverlap=function(a,c){var d=this,e=d.settings.firstDay?1:0;return f.isInteger(a)&&(f.isDate(c)||b.isArray(c))?(a=a%7+e,a===d.create(c).day+1):f.isInteger(c)&&(f.isDate(a)||b.isArray(a))?(c=c%7+e,c===d.create(a).day+1):b.isPlainObject(a)&&b.isPlainObject(c)?d.overlapRanges(a,c):!1},c.prototype.flipEnable=function(a){var b=this.item;b.enable=a||(-1==b.enable?1:-1)},c.prototype.deactivate=function(a,c){var d=this,e=d.item.disable.slice(0);return"flip"==c?d.flipEnable():c===!1?(d.flipEnable(1),e=[]):c===!0?(d.flipEnable(-1),e=[]):c.map(function(a){for(var c,g=0;g<e.length;g+=1)if(d.isDateExact(a,e[g])){c=!0;break}c||(f.isInteger(a)||f.isDate(a)||b.isArray(a)||b.isPlainObject(a)&&a.from&&a.to)&&e.push(a)}),e},c.prototype.activate=function(a,c){var d=this,e=d.item.disable,g=e.length;return"flip"==c?d.flipEnable():c===!0?(d.flipEnable(1),e=[]):c===!1?(d.flipEnable(-1),e=[]):c.map(function(a){var c,h,i,j;for(i=0;g>i;i+=1){if(h=e[i],d.isDateExact(h,a)){c=e[i]=null,j=!0;break}if(d.isDateOverlap(h,a)){b.isPlainObject(a)?(a.inverted=!0,c=a):b.isArray(a)?(c=a,c[3]||c.push("inverted")):f.isDate(a)&&(c=[a.getFullYear(),a.getMonth(),a.getDate(),"inverted"]);break}}if(c)for(i=0;g>i;i+=1)if(d.isDateExact(e[i],a)){e[i]=null;break}if(j)for(i=0;g>i;i+=1)if(d.isDateOverlap(e[i],a)){e[i]=null;break}c&&e.push(c)}),e.filter(function(a){return null!=a})},c.prototype.nodes=function(a){var b=this,c=b.settings,g=b.item,h=g.now,i=g.select,j=g.highlight,k=g.view,l=g.disable,m=g.min,n=g.max,o=function(a,b){return c.firstDay&&(a.push(a.shift()),b.push(b.shift())),f.node("thead",f.node("tr",f.group({min:0,max:d-1,i:1,node:"th",item:function(d){return[a[d],c.klass.weekdays,'scope=col title="'+b[d]+'"']}})))}((c.showWeekdaysFull?c.weekdaysFull:c.weekdaysShort).slice(0),c.weekdaysFull.slice(0)),p=function(a){return f.node("div"," ",c.klass["nav"+(a?"Next":"Prev")]+(a&&k.year>=n.year&&k.month>=n.month||!a&&k.year<=m.year&&k.month<=m.month?" "+c.klass.navDisabled:""),"data-nav="+(a||-1)+" "+f.ariaAttr({role:"button",controls:b.$node[0].id+"_table"})+' title="'+(a?c.labelMonthNext:c.labelMonthPrev)+'"')},q=function(){var d=c.showMonthsShort?c.monthsShort:c.monthsFull;return c.selectMonths?f.node("select",f.group({min:0,max:11,i:1,node:"option",item:function(a){return[d[a],0,"value="+a+(k.month==a?" selected":"")+(k.year==m.year&&a<m.month||k.year==n.year&&a>n.month?" disabled":"")]}}),c.klass.selectMonth,(a?"":"disabled")+" "+f.ariaAttr({controls:b.$node[0].id+"_table"})+' title="'+c.labelMonthSelect+'"'):f.node("div",d[k.month],c.klass.month)},r=function(){var d=k.year,e=c.selectYears===!0?5:~~(c.selectYears/2);if(e){var g=m.year,h=n.year,i=d-e,j=d+e;if(g>i&&(j+=g-i,i=g),j>h){var l=i-g,o=j-h;i-=l>o?o:l,j=h}return f.node("select",f.group({min:i,max:j,i:1,node:"option",item:function(a){return[a,0,"value="+a+(d==a?" selected":"")]}}),c.klass.selectYear,(a?"":"disabled")+" "+f.ariaAttr({controls:b.$node[0].id+"_table"})+' title="'+c.labelYearSelect+'"')}return f.node("div",d,c.klass.year)};return f.node("div",(c.selectYears?r()+q():q()+r())+p()+p(1),c.klass.header)+f.node("table",o+f.node("tbody",f.group({min:0,max:e-1,i:1,node:"tr",item:function(a){var e=c.firstDay&&0===b.create([k.year,k.month,1]).day?-7:0;return[f.group({min:d*a-k.day+e+1,max:function(){return this.min+d-1},i:1,node:"td",item:function(a){a=b.create([k.year,k.month,a+(c.firstDay?1:0)]);var d=i&&i.pick==a.pick,e=j&&j.pick==a.pick,g=l&&b.disabled(a)||a.pick<m.pick||a.pick>n.pick,o=f.trigger(b.formats.toString,b,[c.format,a]);return[f.node("div",a.date,function(b){return b.push(k.month==a.month?c.klass.infocus:c.klass.outfocus),h.pick==a.pick&&b.push(c.klass.now),d&&b.push(c.klass.selected),e&&b.push(c.klass.highlighted),g&&b.push(c.klass.disabled),b.join(" ")}([c.klass.day]),"data-pick="+a.pick+" "+f.ariaAttr({role:"gridcell",label:o,selected:d&&b.$node.val()===o?!0:null,activedescendant:e?!0:null,disabled:g?!0:null})),"",f.ariaAttr({role:"presentation"})]}})]}})),c.klass.table,'id="'+b.$node[0].id+'_table" '+f.ariaAttr({role:"grid",controls:b.$node[0].id,readonly:!0}))+f.node("div",f.node("button",c.today,c.klass.buttonToday,"type=button data-pick="+h.pick+(a&&!b.disabled(h)?"":" disabled")+" "+f.ariaAttr({controls:b.$node[0].id}))+f.node("button",c.clear,c.klass.buttonClear,"type=button data-clear=1"+(a?"":" disabled")+" "+f.ariaAttr({controls:b.$node[0].id}))+f.node("button",c.close,c.klass.buttonClose,"type=button data-close=true "+(a?"":" disabled")+" "+f.ariaAttr({controls:b.$node[0].id})),c.klass.footer)},c.defaults=function(a){return{labelMonthNext:"Next month",labelMonthPrev:"Previous month",labelMonthSelect:"Select a month",labelYearSelect:"Select a year",monthsFull:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],weekdaysFull:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],weekdaysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],today:"Today",clear:"Clear",close:"Close",closeOnSelect:!0,closeOnClear:!0,format:"d mmmm, yyyy",klass:{table:a+"table",header:a+"header",navPrev:a+"nav--prev",navNext:a+"nav--next",navDisabled:a+"nav--disabled",month:a+"month",year:a+"year",selectMonth:a+"select--month",selectYear:a+"select--year",weekdays:a+"weekday",day:a+"day",disabled:a+"day--disabled",selected:a+"day--selected",highlighted:a+"day--highlighted",now:a+"day--today",infocus:a+"day--infocus",outfocus:a+"day--outfocus",footer:a+"footer",buttonClear:a+"button--clear",buttonToday:a+"button--today",buttonClose:a+"button--close"}}}(a.klasses().picker+"__"),a.extend("pickadate",c)});
assets/js/datepicker/picker.js ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ /*!
2
+ * pickadate.js v3.5.5, 2015/02/08
3
+ * By Amsul, http://amsul.ca
4
+ * Hosted on http://amsul.github.io/pickadate.js
5
+ * Licensed under MIT
6
+ */
7
+ !function(a){"function"==typeof define&&define.amd?define("picker",["jquery"],a):"object"==typeof exports?module.exports=a(require("jquery")):this.Picker=a(jQuery)}(function(a){function b(f,g,i,m){function n(){return b._.node("div",b._.node("div",b._.node("div",b._.node("div",B.component.nodes(w.open),y.box),y.wrap),y.frame),y.holder,'tabindex="-1"')}function o(){z.data(g,B).addClass(y.input).val(z.data("value")?B.get("select",x.format):f.value),x.editable||z.on("focus."+w.id+" click."+w.id,function(a){a.preventDefault(),B.open()}).on("keydown."+w.id,u),e(f,{haspopup:!0,expanded:!1,readonly:!1,owns:f.id+"_root"})}function p(){e(B.$root[0],"hidden",!0)}function q(){B.$holder.on({keydown:u,"focus.toOpen":t,blur:function(){z.removeClass(y.target)},focusin:function(a){B.$root.removeClass(y.focused),a.stopPropagation()},"mousedown click":function(b){var c=b.target;c!=B.$holder[0]&&(b.stopPropagation(),"mousedown"!=b.type||a(c).is("input, select, textarea, button, option")||(b.preventDefault(),B.$holder[0].focus()))}}).on("click","[data-pick], [data-nav], [data-clear], [data-close]",function(){var b=a(this),c=b.data(),d=b.hasClass(y.navDisabled)||b.hasClass(y.disabled),e=h();e=e&&(e.type||e.href),(d||e&&!a.contains(B.$root[0],e))&&B.$holder[0].focus(),!d&&c.nav?B.set("highlight",B.component.item.highlight,{nav:c.nav}):!d&&"pick"in c?(B.set("select",c.pick),x.closeOnSelect&&B.close(!0)):c.clear?(B.clear(),x.closeOnClear&&B.close(!0)):c.close&&B.close(!0)})}function r(){var b;x.hiddenName===!0?(b=f.name,f.name=""):(b=["string"==typeof x.hiddenPrefix?x.hiddenPrefix:"","string"==typeof x.hiddenSuffix?x.hiddenSuffix:"_submit"],b=b[0]+f.name+b[1]),B._hidden=a('<input type=hidden name="'+b+'"'+(z.data("value")||f.value?' value="'+B.get("select",x.formatSubmit)+'"':"")+">")[0],z.on("change."+w.id,function(){B._hidden.value=f.value?B.get("select",x.formatSubmit):""})}function s(){v&&l?B.$holder.find("."+y.frame).one("transitionend",function(){B.$holder[0].focus()}):B.$holder[0].focus()}function t(a){a.stopPropagation(),z.addClass(y.target),B.$root.addClass(y.focused),B.open()}function u(a){var b=a.keyCode,c=/^(8|46)$/.test(b);return 27==b?(B.close(!0),!1):void((32==b||c||!w.open&&B.component.key[b])&&(a.preventDefault(),a.stopPropagation(),c?B.clear().close():B.open()))}if(!f)return b;var v=!1,w={id:f.id||"P"+Math.abs(~~(Math.random()*new Date))},x=i?a.extend(!0,{},i.defaults,m):m||{},y=a.extend({},b.klasses(),x.klass),z=a(f),A=function(){return this.start()},B=A.prototype={constructor:A,$node:z,start:function(){return w&&w.start?B:(w.methods={},w.start=!0,w.open=!1,w.type=f.type,f.autofocus=f==h(),f.readOnly=!x.editable,f.id=f.id||w.id,"text"!=f.type&&(f.type="text"),B.component=new i(B,x),B.$root=a('<div class="'+y.picker+'" id="'+f.id+'_root" />'),p(),B.$holder=a(n()).appendTo(B.$root),q(),x.formatSubmit&&r(),o(),x.containerHidden?a(x.containerHidden).append(B._hidden):z.after(B._hidden),x.container?a(x.container).append(B.$root):z.after(B.$root),B.on({start:B.component.onStart,render:B.component.onRender,stop:B.component.onStop,open:B.component.onOpen,close:B.component.onClose,set:B.component.onSet}).on({start:x.onStart,render:x.onRender,stop:x.onStop,open:x.onOpen,close:x.onClose,set:x.onSet}),v=c(B.$holder[0]),f.autofocus&&B.open(),B.trigger("start").trigger("render"))},render:function(a){return a?(B.$holder=n(),B.$root.html(B.$holder)):B.$root.find("."+y.box).html(B.component.nodes(w.open)),B.trigger("render")},stop:function(){return w.start?(B.close(),B._hidden&&B._hidden.parentNode.removeChild(B._hidden),B.$root.remove(),z.removeClass(y.input).removeData(g),setTimeout(function(){z.off("."+w.id)},0),f.type=w.type,f.readOnly=!1,B.trigger("stop"),w.methods={},w.start=!1,B):B},open:function(c){return w.open?B:(z.addClass(y.active),e(f,"expanded",!0),setTimeout(function(){B.$root.addClass(y.opened),e(B.$root[0],"hidden",!1)},0),c!==!1&&(w.open=!0,v&&k.css("overflow","hidden").css("padding-right","+="+d()),s(),j.on("click."+w.id+" focusin."+w.id,function(a){var b=a.target;b!=f&&b!=document&&3!=a.which&&B.close(b===B.$holder[0])}).on("keydown."+w.id,function(c){var d=c.keyCode,e=B.component.key[d],f=c.target;27==d?B.close(!0):f!=B.$holder[0]||!e&&13!=d?a.contains(B.$root[0],f)&&13==d&&(c.preventDefault(),f.click()):(c.preventDefault(),e?b._.trigger(B.component.key.go,B,[b._.trigger(e)]):B.$root.find("."+y.highlighted).hasClass(y.disabled)||(B.set("select",B.component.item.highlight),x.closeOnSelect&&B.close(!0)))})),B.trigger("open"))},close:function(a){return a&&(x.editable?f.focus():(B.$holder.off("focus.toOpen").focus(),setTimeout(function(){B.$holder.on("focus.toOpen",t)},0))),z.removeClass(y.active),e(f,"expanded",!1),setTimeout(function(){B.$root.removeClass(y.opened+" "+y.focused),e(B.$root[0],"hidden",!0)},0),w.open?(w.open=!1,v&&k.css("overflow","").css("padding-right","-="+d()),j.off("."+w.id),B.trigger("close")):B},clear:function(a){return B.set("clear",null,a)},set:function(b,c,d){var e,f,g=a.isPlainObject(b),h=g?b:{};if(d=g&&a.isPlainObject(c)?c:d||{},b){g||(h[b]=c);for(e in h)f=h[e],e in B.component.item&&(void 0===f&&(f=null),B.component.set(e,f,d)),("select"==e||"clear"==e)&&z.val("clear"==e?"":B.get(e,x.format)).trigger("change");B.render()}return d.muted?B:B.trigger("set",h)},get:function(a,c){if(a=a||"value",null!=w[a])return w[a];if("valueSubmit"==a){if(B._hidden)return B._hidden.value;a="value"}if("value"==a)return f.value;if(a in B.component.item){if("string"==typeof c){var d=B.component.get(a);return d?b._.trigger(B.component.formats.toString,B.component,[c,d]):""}return B.component.get(a)}},on:function(b,c,d){var e,f,g=a.isPlainObject(b),h=g?b:{};if(b){g||(h[b]=c);for(e in h)f=h[e],d&&(e="_"+e),w.methods[e]=w.methods[e]||[],w.methods[e].push(f)}return B},off:function(){var a,b,c=arguments;for(a=0,namesCount=c.length;a<namesCount;a+=1)b=c[a],b in w.methods&&delete w.methods[b];return B},trigger:function(a,c){var d=function(a){var d=w.methods[a];d&&d.map(function(a){b._.trigger(a,B,[c])})};return d("_"+a),d(a),B}};return new A}function c(a){var b,c="position";return a.currentStyle?b=a.currentStyle[c]:window.getComputedStyle&&(b=getComputedStyle(a)[c]),"fixed"==b}function d(){if(k.height()<=i.height())return 0;var b=a('<div style="visibility:hidden;width:100px" />').appendTo("body"),c=b[0].offsetWidth;b.css("overflow","scroll");var d=a('<div style="width:100%" />').appendTo(b),e=d[0].offsetWidth;return b.remove(),c-e}function e(b,c,d){if(a.isPlainObject(c))for(var e in c)f(b,e,c[e]);else f(b,c,d)}function f(a,b,c){a.setAttribute(("role"==b?"":"aria-")+b,c)}function g(b,c){a.isPlainObject(b)||(b={attribute:c}),c="";for(var d in b){var e=("role"==d?"":"aria-")+d,f=b[d];c+=null==f?"":e+'="'+b[d]+'"'}return c}function h(){try{return document.activeElement}catch(a){}}var i=a(window),j=a(document),k=a(document.documentElement),l=null!=document.body.style.transition;return b.klasses=function(a){return a=a||"picker",{picker:a,opened:a+"--opened",focused:a+"--focused",input:a+"__input",active:a+"__input--active",target:a+"__input--target",holder:a+"__holder",frame:a+"__frame",wrap:a+"__wrap",box:a+"__box"}},b._={group:function(a){for(var c,d="",e=b._.trigger(a.min,a);e<=b._.trigger(a.max,a,[e]);e+=a.i)c=b._.trigger(a.item,a,[e]),d+=b._.node(a.node,c[0],c[1],c[2]);return d},node:function(b,c,d,e){return c?(c=a.isArray(c)?c.join(""):c,d=d?' class="'+d+'"':"",e=e?" "+e:"","<"+b+d+e+">"+c+"</"+b+">"):""},lead:function(a){return(10>a?"0":"")+a},trigger:function(a,b,c){return"function"==typeof a?a.apply(b,c||[]):a},digits:function(a){return/\d/.test(a[1])?2:1},isDate:function(a){return{}.toString.call(a).indexOf("Date")>-1&&this.isInteger(a.getDate())},isInteger:function(a){return{}.toString.call(a).indexOf("Number")>-1&&a%1===0},ariaAttr:g},b.extend=function(c,d){a.fn[c]=function(e,f){var g=this.data(c);return"picker"==e?g:g&&"string"==typeof e?b._.trigger(g[e],g,[f]):this.each(function(){var f=a(this);f.data(c)||new b(this,c,d,e)})},a.fn[c].defaults=d.defaults},b});
assets/js/datepicker/picker.time.js ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ /*!
2
+ * Time picker for pickadate.js v3.5.5
3
+ * http://amsul.github.io/pickadate.js/time.htm
4
+ */
5
+ !function(a){"function"==typeof define&&define.amd?define(["picker","jquery"],a):"object"==typeof exports?module.exports=a(require("./picker.js"),require("jquery")):a(Picker,jQuery)}(function(a,b){function c(a,b){var c=this,d=a.$node[0].value,e=a.$node.data("value"),f=e||d,g=e?b.formatSubmit:b.format;c.settings=b,c.$node=a.$node,c.queue={interval:"i",min:"measure create",max:"measure create",now:"now create",select:"parse create validate",highlight:"parse create validate",view:"parse create validate",disable:"deactivate",enable:"activate"},c.item={},c.item.clear=null,c.item.interval=b.interval||30,c.item.disable=(b.disable||[]).slice(0),c.item.enable=-function(a){return a[0]===!0?a.shift():-1}(c.item.disable),c.set("min",b.min).set("max",b.max).set("now"),f?c.set("select",f,{format:g}):c.set("select",null).set("highlight",c.item.now),c.key={40:1,38:-1,39:1,37:-1,go:function(a){c.set("highlight",c.item.highlight.pick+a*c.item.interval,{interval:a*c.item.interval}),this.render()}},a.on("render",function(){var c=a.$root.children(),d=c.find("."+b.klass.viewset),e=function(a){return["webkit","moz","ms","o",""].map(function(b){return(b?"-"+b+"-":"")+a})},f=function(a,b){e("transform").map(function(c){a.css(c,b)}),e("transition").map(function(c){a.css(c,b)})};d.length&&(f(c,"none"),c[0].scrollTop=~~d.position().top-2*d[0].clientHeight,f(c,""))},1).on("open",function(){a.$root.find("button").attr("disabled",!1)},1).on("close",function(){a.$root.find("button").attr("disabled",!0)},1)}var d=24,e=60,f=12,g=d*e,h=a._;c.prototype.set=function(a,b,c){var d=this,e=d.item;return null===b?("clear"==a&&(a="select"),e[a]=b,d):(e["enable"==a?"disable":"flip"==a?"enable":a]=d.queue[a].split(" ").map(function(e){return b=d[e](a,b,c)}).pop(),"select"==a?d.set("highlight",e.select,c):"highlight"==a?d.set("view",e.highlight,c):"interval"==a?d.set("min",e.min,c).set("max",e.max,c):a.match(/^(flip|min|max|disable|enable)$/)&&(e.select&&d.disabled(e.select)&&d.set("select",b,c),e.highlight&&d.disabled(e.highlight)&&d.set("highlight",b,c),"min"==a&&d.set("max",e.max,c)),d)},c.prototype.get=function(a){return this.item[a]},c.prototype.create=function(a,c,f){var i=this;return c=void 0===c?a:c,h.isDate(c)&&(c=[c.getHours(),c.getMinutes()]),b.isPlainObject(c)&&h.isInteger(c.pick)?c=c.pick:b.isArray(c)?c=+c[0]*e+ +c[1]:h.isInteger(c)||(c=i.now(a,c,f)),"max"==a&&c<i.item.min.pick&&(c+=g),"min"!=a&&"max"!=a&&(c-i.item.min.pick)%i.item.interval!==0&&(c+=i.item.interval),c=i.normalize(a,c,f),{hour:~~(d+c/e)%d,mins:(e+c%e)%e,time:(g+c)%g,pick:c%g}},c.prototype.createRange=function(a,c){var d=this,e=function(a){return a===!0||b.isArray(a)||h.isDate(a)?d.create(a):a};return h.isInteger(a)||(a=e(a)),h.isInteger(c)||(c=e(c)),h.isInteger(a)&&b.isPlainObject(c)?a=[c.hour,c.mins+a*d.settings.interval]:h.isInteger(c)&&b.isPlainObject(a)&&(c=[a.hour,a.mins+c*d.settings.interval]),{from:e(a),to:e(c)}},c.prototype.withinRange=function(a,b){return a=this.createRange(a.from,a.to),b.pick>=a.from.pick&&b.pick<=a.to.pick},c.prototype.overlapRanges=function(a,b){var c=this;return a=c.createRange(a.from,a.to),b=c.createRange(b.from,b.to),c.withinRange(a,b.from)||c.withinRange(a,b.to)||c.withinRange(b,a.from)||c.withinRange(b,a.to)},c.prototype.now=function(a,b){var c,d=this.item.interval,f=new Date,g=f.getHours()*e+f.getMinutes(),i=h.isInteger(b);return g-=g%d,c=0>b&&-d>=d*b+g,g+="min"==a&&c?0:d,i&&(g+=d*(c&&"max"!=a?b+1:b)),g},c.prototype.normalize=function(a,b){var c=this.item.interval,d=this.item.min&&this.item.min.pick||0;return b-="min"==a?0:(b-d)%c},c.prototype.measure=function(a,c,f){var g=this;return c||(c="min"==a?[0,0]:[d-1,e-1]),"string"==typeof c?c=g.parse(a,c):c===!0||h.isInteger(c)?c=g.now(a,c,f):b.isPlainObject(c)&&h.isInteger(c.pick)&&(c=g.normalize(a,c.pick,f)),c},c.prototype.validate=function(a,b,c){var d=this,e=c&&c.interval?c.interval:d.item.interval;return d.disabled(b)&&(b=d.shift(b,e)),b=d.scope(b),d.disabled(b)&&(b=d.shift(b,-1*e)),b},c.prototype.disabled=function(a){var c=this,d=c.item.disable.filter(function(d){return h.isInteger(d)?a.hour==d:b.isArray(d)||h.isDate(d)?a.pick==c.create(d).pick:b.isPlainObject(d)?c.withinRange(d,a):void 0});return d=d.length&&!d.filter(function(a){return b.isArray(a)&&"inverted"==a[2]||b.isPlainObject(a)&&a.inverted}).length,-1===c.item.enable?!d:d||a.pick<c.item.min.pick||a.pick>c.item.max.pick},c.prototype.shift=function(a,b){var c=this,d=c.item.min.pick,e=c.item.max.pick;for(b=b||c.item.interval;c.disabled(a)&&(a=c.create(a.pick+=b),!(a.pick<=d||a.pick>=e)););return a},c.prototype.scope=function(a){var b=this.item.min.pick,c=this.item.max.pick;return this.create(a.pick>c?c:a.pick<b?b:a)},c.prototype.parse=function(a,b,c){var d,f,g,i,j,k=this,l={};if(!b||"string"!=typeof b)return b;c&&c.format||(c=c||{},c.format=k.settings.format),k.formats.toArray(c.format).map(function(a){var c,d=k.formats[a],e=d?h.trigger(d,k,[b,l]):a.replace(/^!/,"").length;d&&(c=b.substr(0,e),l[a]=c.match(/^\d+$/)?+c:c),b=b.substr(e)});for(i in l)j=l[i],h.isInteger(j)?i.match(/^(h|hh)$/i)?(d=j,("h"==i||"hh"==i)&&(d%=12)):"i"==i&&(f=j):i.match(/^a$/i)&&j.match(/^p/i)&&("h"in l||"hh"in l)&&(g=!0);return(g?d+12:d)*e+f},c.prototype.formats={h:function(a,b){return a?h.digits(a):b.hour%f||f},hh:function(a,b){return a?2:h.lead(b.hour%f||f)},H:function(a,b){return a?h.digits(a):""+b.hour%24},HH:function(a,b){return a?h.digits(a):h.lead(b.hour%24)},i:function(a,b){return a?2:h.lead(b.mins)},a:function(a,b){return a?4:g/2>b.time%g?"a.m.":"p.m."},A:function(a,b){return a?2:g/2>b.time%g?"AM":"PM"},toArray:function(a){return a.split(/(h{1,2}|H{1,2}|i|a|A|!.)/g)},toString:function(a,b){var c=this;return c.formats.toArray(a).map(function(a){return h.trigger(c.formats[a],c,[0,b])||a.replace(/^!/,"")}).join("")}},c.prototype.isTimeExact=function(a,c){var d=this;return h.isInteger(a)&&h.isInteger(c)||"boolean"==typeof a&&"boolean"==typeof c?a===c:(h.isDate(a)||b.isArray(a))&&(h.isDate(c)||b.isArray(c))?d.create(a).pick===d.create(c).pick:b.isPlainObject(a)&&b.isPlainObject(c)?d.isTimeExact(a.from,c.from)&&d.isTimeExact(a.to,c.to):!1},c.prototype.isTimeOverlap=function(a,c){var d=this;return h.isInteger(a)&&(h.isDate(c)||b.isArray(c))?a===d.create(c).hour:h.isInteger(c)&&(h.isDate(a)||b.isArray(a))?c===d.create(a).hour:b.isPlainObject(a)&&b.isPlainObject(c)?d.overlapRanges(a,c):!1},c.prototype.flipEnable=function(a){var b=this.item;b.enable=a||(-1==b.enable?1:-1)},c.prototype.deactivate=function(a,c){var d=this,e=d.item.disable.slice(0);return"flip"==c?d.flipEnable():c===!1?(d.flipEnable(1),e=[]):c===!0?(d.flipEnable(-1),e=[]):c.map(function(a){for(var c,f=0;f<e.length;f+=1)if(d.isTimeExact(a,e[f])){c=!0;break}c||(h.isInteger(a)||h.isDate(a)||b.isArray(a)||b.isPlainObject(a)&&a.from&&a.to)&&e.push(a)}),e},c.prototype.activate=function(a,c){var d=this,e=d.item.disable,f=e.length;return"flip"==c?d.flipEnable():c===!0?(d.flipEnable(1),e=[]):c===!1?(d.flipEnable(-1),e=[]):c.map(function(a){var c,g,i,j;for(i=0;f>i;i+=1){if(g=e[i],d.isTimeExact(g,a)){c=e[i]=null,j=!0;break}if(d.isTimeOverlap(g,a)){b.isPlainObject(a)?(a.inverted=!0,c=a):b.isArray(a)?(c=a,c[2]||c.push("inverted")):h.isDate(a)&&(c=[a.getFullYear(),a.getMonth(),a.getDate(),"inverted"]);break}}if(c)for(i=0;f>i;i+=1)if(d.isTimeExact(e[i],a)){e[i]=null;break}if(j)for(i=0;f>i;i+=1)if(d.isTimeOverlap(e[i],a)){e[i]=null;break}c&&e.push(c)}),e.filter(function(a){return null!=a})},c.prototype.i=function(a,b){return h.isInteger(b)&&b>0?b:this.item.interval},c.prototype.nodes=function(a){var b=this,c=b.settings,d=b.item.select,e=b.item.highlight,f=b.item.view,g=b.item.disable;return h.node("ul",h.group({min:b.item.min.pick,max:b.item.max.pick,i:b.item.interval,node:"li",item:function(a){a=b.create(a);var i=a.pick,j=d&&d.pick==i,k=e&&e.pick==i,l=g&&b.disabled(a),m=h.trigger(b.formats.toString,b,[c.format,a]);return[h.trigger(b.formats.toString,b,[h.trigger(c.formatLabel,b,[a])||c.format,a]),function(a){return j&&a.push(c.klass.selected),k&&a.push(c.klass.highlighted),f&&f.pick==i&&a.push(c.klass.viewset),l&&a.push(c.klass.disabled),a.join(" ")}([c.klass.listItem]),"data-pick="+a.pick+" "+h.ariaAttr({role:"option",label:m,selected:j&&b.$node.val()===m?!0:null,activedescendant:k?!0:null,disabled:l?!0:null})]}})+h.node("li",h.node("button",c.clear,c.klass.buttonClear,"type=button data-clear=1"+(a?"":" disabled")+" "+h.ariaAttr({controls:b.$node[0].id})),"",h.ariaAttr({role:"presentation"})),c.klass.list,h.ariaAttr({role:"listbox",controls:b.$node[0].id}))},c.defaults=function(a){return{clear:"Clear",format:"h:i A",interval:30,closeOnSelect:!0,closeOnClear:!0,klass:{picker:a+" "+a+"--time",holder:a+"__holder",list:a+"__list",listItem:a+"__list-item",disabled:a+"__list-item--disabled",selected:a+"__list-item--selected",highlighted:a+"__list-item--highlighted",viewset:a+"__list-item--viewset",now:a+"__list-item--now",buttonClear:a+"__button--clear"}}}(a.klasses().picker),a.extend("pickatime",c)});
assets/js/export-tools/buttons.bootstrap.js CHANGED
File without changes
assets/js/export-tools/buttons.bootstrap.min.js CHANGED
File without changes
assets/js/export-tools/buttons.bootstrap4.js CHANGED
File without changes
assets/js/export-tools/buttons.bootstrap4.min.js CHANGED
File without changes
assets/js/export-tools/buttons.colVis.js CHANGED
File without changes
assets/js/export-tools/buttons.colVis.min.js CHANGED
File without changes
assets/js/export-tools/buttons.dataTables.css CHANGED
File without changes
assets/js/export-tools/buttons.flash.js CHANGED
File without changes
assets/js/export-tools/buttons.flash.min.js CHANGED
File without changes
assets/js/export-tools/buttons.foundation.js CHANGED
File without changes
assets/js/export-tools/buttons.foundation.min.js CHANGED
File without changes
assets/js/export-tools/buttons.html5.js CHANGED
File without changes
assets/js/export-tools/buttons.html5.min.js CHANGED
File without changes
assets/js/export-tools/buttons.jqueryui.js CHANGED
File without changes
assets/js/export-tools/buttons.jqueryui.min.js CHANGED
File without changes
assets/js/export-tools/buttons.print.js CHANGED
File without changes
assets/js/export-tools/buttons.print.min.js CHANGED
File without changes
assets/js/export-tools/dataTables.buttons.js CHANGED
File without changes
assets/js/export-tools/dataTables.buttons.min.js CHANGED
File without changes
assets/js/export-tools/jszip.js CHANGED
File without changes
assets/js/export-tools/jszip.min.js CHANGED
File without changes
assets/js/export-tools/pdfmake.js CHANGED
@@ -14757,16 +14757,16 @@
14757
  /* 8 */
14758
  /***/ function(module, exports) {
14759
 
14760
- module.exports = function(module) {
14761
- if(!module.webpackPolyfill) {
14762
- module.deprecate = function() {};
14763
- module.paths = [];
14764
- // module.parent = undefined by default
14765
- module.children = [];
14766
- module.webpackPolyfill = 1;
14767
- }
14768
- return module;
14769
- }
14770
 
14771
 
14772
  /***/ },
@@ -68134,14 +68134,14 @@
68134
  /* 106 */
68135
  /***/ function(module, exports) {
68136
 
68137
- module.exports = function() { throw new Error("define cannot be used indirect"); };
68138
 
68139
 
68140
  /***/ },
68141
  /* 107 */
68142
  /***/ function(module, exports) {
68143
 
68144
- /* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {module.exports = __webpack_amd_options__;
68145
 
68146
  /* WEBPACK VAR INJECTION */}.call(exports, {}))
68147
 
14757
  /* 8 */
14758
  /***/ function(module, exports) {
14759
 
14760
+ module.exports = function(module) {
14761
+ if(!module.webpackPolyfill) {
14762
+ module.deprecate = function() {};
14763
+ module.paths = [];
14764
+ // module.parent = undefined by default
14765
+ module.children = [];
14766
+ module.webpackPolyfill = 1;
14767
+ }
14768
+ return module;
14769
+ }
14770
 
14771
 
14772
  /***/ },
68134
  /* 106 */
68135
  /***/ function(module, exports) {
68136
 
68137
+ module.exports = function() { throw new Error("define cannot be used indirect"); };
68138
 
68139
 
68140
  /***/ },
68141
  /* 107 */
68142
  /***/ function(module, exports) {
68143
 
68144
+ /* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {module.exports = __webpack_amd_options__;
68145
 
68146
  /* WEBPACK VAR INJECTION */}.call(exports, {}))
68147
 
assets/js/export-tools/pdfmake.min.js CHANGED
File without changes
assets/js/export-tools/vfs_fonts.js CHANGED
File without changes
assets/js/fileupload/jquery.fileupload-jquery-ui.js ADDED
@@ -0,0 +1,144 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * jQuery File Upload jQuery UI Plugin 8.7.0
3
+ * https://github.com/blueimp/jQuery-File-Upload
4
+ *
5
+ * Copyright 2013, Sebastian Tschan
6
+ * https://blueimp.net
7
+ *
8
+ * Licensed under the MIT license:
9
+ * http://www.opensource.org/licenses/MIT
10
+ */
11
+
12
+ /*jslint nomen: true, unparam: true */
13
+ /*global define, window */
14
+
15
+ (function (factory) {
16
+ 'use strict';
17
+ if (typeof define === 'function' && define.amd) {
18
+ // Register as an anonymous AMD module:
19
+ define(['jquery', './jquery.fileupload-ui'], factory);
20
+ } else {
21
+ // Browser globals:
22
+ factory(window.jQuery);
23
+ }
24
+ }(function ($) {
25
+ 'use strict';
26
+
27
+ $.widget('blueimp.fileupload', $.blueimp.fileupload, {
28
+
29
+ options: {
30
+ progress: function (e, data) {
31
+ if (data.context) {
32
+ data.context.find('.progress').progressbar(
33
+ 'option',
34
+ 'value',
35
+ parseInt(data.loaded / data.total * 100, 10)
36
+ );
37
+ }
38
+ },
39
+ progressall: function (e, data) {
40
+ var $this = $(this);
41
+ $this.find('.fileupload-progress')
42
+ .find('.progress').progressbar(
43
+ 'option',
44
+ 'value',
45
+ parseInt(data.loaded / data.total * 100, 10)
46
+ ).end()
47
+ .find('.progress-extended').each(function () {
48
+ $(this).html(
49
+ ($this.data('blueimp-fileupload') ||
50
+ $this.data('fileupload'))
51
+ ._renderExtendedProgress(data)
52
+ );
53
+ });
54
+ }
55
+ },
56
+
57
+ _renderUpload: function (func, files) {
58
+ var node = this._super(func, files),
59
+ showIconText = $(window).width() > 480;
60
+ node.find('.progress').empty().progressbar();
61
+ node.find('.start').button({
62
+ icons: {primary: 'ui-icon-circle-arrow-e'},
63
+ text: showIconText
64
+ });
65
+ node.find('.cancel').button({
66
+ icons: {primary: 'ui-icon-cancel'},
67
+ text: showIconText
68
+ });
69
+ if (node.hasClass('fade')) {
70
+ node.hide();
71
+ }
72
+ return node;
73
+ },
74
+
75
+ _renderDownload: function (func, files) {
76
+ var node = this._super(func, files),
77
+ showIconText = $(window).width() > 480;
78
+ node.find('.delete').button({
79
+ icons: {primary: 'ui-icon-trash'},
80
+ text: showIconText
81
+ });
82
+ if (node.hasClass('fade')) {
83
+ node.hide();
84
+ }
85
+ return node;
86
+ },
87
+
88
+ _transition: function (node) {
89
+ var deferred = $.Deferred();
90
+ if (node.hasClass('fade')) {
91
+ node.fadeToggle(
92
+ this.options.transitionDuration,
93
+ this.options.transitionEasing,
94
+ function () {
95
+ deferred.resolveWith(node);
96
+ }
97
+ );
98
+ } else {
99
+ deferred.resolveWith(node);
100
+ }
101
+ return deferred;
102
+ },
103
+
104
+ _create: function () {
105
+ this._super();
106
+ this.element
107
+ .find('.fileupload-buttonbar')
108
+ .find('.fileinput-button').each(function () {
109
+ var input = $(this).find('input:file').detach();
110
+ $(this)
111
+ .button({icons: {primary: 'ui-icon-plusthick'}})
112
+ .append(input);
113
+ })
114
+ .end().find('.start')
115
+ .button({icons: {primary: 'ui-icon-circle-arrow-e'}})
116
+ .end().find('.cancel')
117
+ .button({icons: {primary: 'ui-icon-cancel'}})
118
+ .end().find('.delete')
119
+ .button({icons: {primary: 'ui-icon-trash'}})
120
+ .end().find('.progress').progressbar();
121
+ },
122
+
123
+ _destroy: function () {
124
+ this.element
125
+ .find('.fileupload-buttonbar')
126
+ .find('.fileinput-button').each(function () {
127
+ var input = $(this).find('input:file').detach();
128
+ $(this)
129
+ .button('destroy')
130
+ .append(input);
131
+ })
132
+ .end().find('.start')
133
+ .button('destroy')
134
+ .end().find('.cancel')
135
+ .button('destroy')
136
+ .end().find('.delete')
137
+ .button('destroy')
138
+ .end().find('.progress').progressbar('destroy');
139
+ this._super();
140
+ }
141
+
142
+ });
143
+
144
+ }));
assets/js/fileupload/jquery.fileupload-process.js ADDED
@@ -0,0 +1,172 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * jQuery File Upload Processing Plugin 1.3.0
3
+ * https://github.com/blueimp/jQuery-File-Upload
4
+ *
5
+ * Copyright 2012, Sebastian Tschan
6
+ * https://blueimp.net
7
+ *
8
+ * Licensed under the MIT license:
9
+ * http://www.opensource.org/licenses/MIT
10
+ */
11
+
12
+ /*jslint nomen: true, unparam: true */
13
+ /*global define, window */
14
+
15
+ (function (factory) {
16
+ 'use strict';
17
+ if (typeof define === 'function' && define.amd) {
18
+ // Register as an anonymous AMD module:
19
+ define([
20
+ 'jquery',
21
+ './jquery.fileupload'
22
+ ], factory);
23
+ } else {
24
+ // Browser globals:
25
+ factory(
26
+ window.jQuery
27
+ );
28
+ }
29
+ }(function ($) {
30
+ 'use strict';
31
+
32
+ var originalAdd = $.blueimp.fileupload.prototype.options.add;
33
+
34
+ // The File Upload Processing plugin extends the fileupload widget
35
+ // with file processing functionality:
36
+ $.widget('blueimp.fileupload', $.blueimp.fileupload, {
37
+
38
+ options: {
39
+ // The list of processing actions:
40
+ processQueue: [
41
+ /*
42
+ {
43
+ action: 'log',
44
+ type: 'debug'
45
+ }
46
+ */
47
+ ],
48
+ add: function (e, data) {
49
+ var $this = $(this);
50
+ data.process(function () {
51
+ return $this.fileupload('process', data);
52
+ });
53
+ originalAdd.call(this, e, data);
54
+ }
55
+ },
56
+
57
+ processActions: {
58
+ /*
59
+ log: function (data, options) {
60
+ console[options.type](
61
+ 'Processing "' + data.files[data.index].name + '"'
62
+ );
63
+ }
64
+ */
65
+ },
66
+
67
+ _processFile: function (data, originalData) {
68
+ var that = this,
69
+ dfd = $.Deferred().resolveWith(that, [data]),
70
+ chain = dfd.promise();
71
+ this._trigger('process', null, data);
72
+ $.each(data.processQueue, function (i, settings) {
73
+ var func = function (data) {
74
+ if (originalData.errorThrown) {
75
+ return $.Deferred()
76
+ .rejectWith(that, [originalData]).promise();
77
+ }
78
+ return that.processActions[settings.action].call(
79
+ that,
80
+ data,
81
+ settings
82
+ );
83
+ };
84
+ chain = chain.pipe(func, settings.always && func);
85
+ });
86
+ chain
87
+ .done(function () {
88
+ that._trigger('processdone', null, data);
89
+ that._trigger('processalways', null, data);
90
+ })
91
+ .fail(function () {
92
+ that._trigger('processfail', null, data);
93
+ that._trigger('processalways', null, data);
94
+ });
95
+ return chain;
96
+ },
97
+
98
+ // Replaces the settings of each processQueue item that
99
+ // are strings starting with an "@", using the remaining
100
+ // substring as key for the option map,
101
+ // e.g. "@autoUpload" is replaced with options.autoUpload:
102
+ _transformProcessQueue: function (options) {
103
+ var processQueue = [];
104
+ $.each(options.processQueue, function () {
105
+ var settings = {},
106
+ action = this.action,
107
+ prefix = this.prefix === true ? action : this.prefix;
108
+ $.each(this, function (key, value) {
109
+ if ($.type(value) === 'string' &&
110
+ value.charAt(0) === '@') {
111
+ settings[key] = options[
112
+ value.slice(1) || (prefix ? prefix +
113
+ key.charAt(0).toUpperCase() + key.slice(1) : key)
114
+ ];
115
+ } else {
116
+ settings[key] = value;
117
+ }
118
+
119
+ });
120
+ processQueue.push(settings);
121
+ });
122
+ options.processQueue = processQueue;
123
+ },
124
+
125
+ // Returns the number of files currently in the processsing queue:
126
+ processing: function () {
127
+ return this._processing;
128
+ },
129
+
130
+ // Processes the files given as files property of the data parameter,
131
+ // returns a Promise object that allows to bind callbacks:
132
+ process: function (data) {
133
+ var that = this,
134
+ options = $.extend({}, this.options, data);
135
+ if (options.processQueue && options.processQueue.length) {
136
+ this._transformProcessQueue(options);
137
+ if (this._processing === 0) {
138
+ this._trigger('processstart');
139
+ }
140
+ $.each(data.files, function (index) {
141
+ var opts = index ? $.extend({}, options) : options,
142
+ func = function () {
143
+ if (data.errorThrown) {
144
+ return $.Deferred()
145
+ .rejectWith(that, [data]).promise();
146
+ }
147
+ return that._processFile(opts, data);
148
+ };
149
+ opts.index = index;
150
+ that._processing += 1;
151
+ that._processingQueue = that._processingQueue.pipe(func, func)
152
+ .always(function () {
153
+ that._processing -= 1;
154
+ if (that._processing === 0) {
155
+ that._trigger('processstop');
156
+ }
157
+ });
158
+ });
159
+ }
160
+ return this._processingQueue;
161
+ },
162
+
163
+ _create: function () {
164
+ this._super();
165
+ this._processing = 0;
166
+ this._processingQueue = $.Deferred().resolveWith(this)
167
+ .promise();
168
+ }
169
+
170
+ });
171
+
172
+ }));
assets/js/fileupload/jquery.fileupload-ui.js ADDED
@@ -0,0 +1,699 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * jQuery File Upload User Interface Plugin 9.0.0
3
+ * https://github.com/blueimp/jQuery-File-Upload
4
+ *
5
+ * Copyright 2010, Sebastian Tschan
6
+ * https://blueimp.net
7
+ *
8
+ * Licensed under the MIT license:
9
+ * http://www.opensource.org/licenses/MIT
10
+ */
11
+
12
+ /*jslint nomen: true, unparam: true, regexp: true */
13
+ /*global define, window, URL, webkitURL, FileReader */
14
+
15
+ (function (factory) {
16
+ 'use strict';
17
+ if (typeof define === 'function' && define.amd) {
18
+ // Register as an anonymous AMD module:
19
+ define([
20
+ 'jquery',
21
+ 'tmpl',
22
+ './jquery.fileupload-image',
23
+ './jquery.fileupload-audio',
24
+ './jquery.fileupload-video',
25
+ './jquery.fileupload-validate'
26
+ ], factory);
27
+ } else {
28
+ // Browser globals:
29
+ factory(
30
+ window.jQuery,
31
+ window.tmpl
32
+ );
33
+ }
34
+ }(function ($, tmpl, loadImage) {
35
+ 'use strict';
36
+
37
+ $.blueimp.fileupload.prototype._specialOptions.push(
38
+ 'filesContainer',
39
+ 'uploadTemplateId',
40
+ 'downloadTemplateId'
41
+ );
42
+
43
+ // The UI version extends the file upload widget
44
+ // and adds complete user interface interaction:
45
+ $.widget('blueimp.fileupload', $.blueimp.fileupload, {
46
+
47
+ options: {
48
+ // By default, files added to the widget are uploaded as soon
49
+ // as the user clicks on the start buttons. To enable automatic
50
+ // uploads, set the following option to true:
51
+ autoUpload: false,
52
+ // The ID of the upload template:
53
+ uploadTemplateId: 'template-upload',
54
+ // The ID of the download template:
55
+ downloadTemplateId: 'template-download',
56
+ // The container for the list of files. If undefined, it is set to
57
+ // an element with class "files" inside of the widget element:
58
+ filesContainer: undefined,
59
+ // By default, files are appended to the files container.
60
+ // Set the following option to true, to prepend files instead:
61
+ prependFiles: false,
62
+ // The expected data type of the upload response, sets the dataType
63
+ // option of the $.ajax upload requests:
64
+ dataType: 'json',
65
+
66
+ // Function returning the current number of files,
67
+ // used by the maxNumberOfFiles validation:
68
+ getNumberOfFiles: function () {
69
+ return this.filesContainer.children()
70
+ .not('.processing').length;
71
+ },
72
+
73
+ // Callback to retrieve the list of files from the server response:
74
+ getFilesFromResponse: function (data) {
75
+ if (data.result && $.isArray(data.result.files)) {
76
+ return data.result.files;
77
+ }
78
+ return [];
79
+ },
80
+
81
+ // The add callback is invoked as soon as files are added to the fileupload
82
+ // widget (via file input selection, drag & drop or add API call).
83
+ // See the basic file upload widget for more information:
84
+ add: function (e, data) {
85
+ if (e.isDefaultPrevented()) {
86
+ return false;
87
+ }
88
+ var $this = $(this),
89
+ that = $this.data('blueimp-fileupload') ||
90
+ $this.data('fileupload'),
91
+ options = that.options;
92
+ data.context = that._renderUpload(data.files)
93
+ .data('data', data)
94
+ .addClass('processing');
95
+ options.filesContainer[
96
+ options.prependFiles ? 'prepend' : 'append'
97
+ ](data.context);
98
+ that._forceReflow(data.context);
99
+ $.when(
100
+ that._transition(data.context),
101
+ data.process(function () {
102
+ return $this.fileupload('process', data);
103
+ })
104
+ ).always(function () {
105
+ data.context.each(function (index) {
106
+ $(this).find('.size').text(
107
+ that._formatFileSize(data.files[index].size)
108
+ );
109
+ }).removeClass('processing');
110
+ that._renderPreviews(data);
111
+ }).done(function () {
112
+ data.context.find('.start').prop('disabled', false);
113
+ if ((that._trigger('added', e, data) !== false) &&
114
+ (options.autoUpload || data.autoUpload) &&
115
+ data.autoUpload !== false) {
116
+ data.submit();
117
+ }
118
+ }).fail(function () {
119
+ if (data.files.error) {
120
+ data.context.each(function (index) {
121
+ var error = data.files[index].error;
122
+ if (error) {
123
+ $(this).find('.error').text(error);
124
+ }
125
+ });
126
+ }
127
+ });
128
+ },
129
+ // Callback for the start of each file upload request:
130
+ send: function (e, data) {
131
+ if (e.isDefaultPrevented()) {
132
+ return false;
133
+ }
134
+ var that = $(this).data('blueimp-fileupload') ||
135
+ $(this).data('fileupload');
136
+ if (data.context && data.dataType &&
137
+ data.dataType.substr(0, 6) === 'iframe') {
138
+ // Iframe Transport does not support progress events.
139
+ // In lack of an indeterminate progress bar, we set
140
+ // the progress to 100%, showing the full animated bar:
141
+ data.context
142
+ .find('.progress').addClass(
143
+ !$.support.transition && 'progress-animated'
144
+ )
145
+ .attr('aria-valuenow', 100)
146
+ .children().first().css(
147
+ 'width',
148
+ '100%'
149
+ );
150
+ }
151
+ return that._trigger('sent', e, data);
152
+ },
153
+ // Callback for successful uploads:
154
+ done: function (e, data) {
155
+ if (e.isDefaultPrevented()) {
156
+ return false;
157
+ }
158
+ var that = $(this).data('blueimp-fileupload') ||
159
+ $(this).data('fileupload'),
160
+ getFilesFromResponse = data.getFilesFromResponse ||
161
+ that.options.getFilesFromResponse,
162
+ files = getFilesFromResponse(data),
163
+ template,
164
+ deferred;
165
+ if (data.context) {
166
+ data.context.each(function (index) {
167
+ var file = files[index] ||
168
+ {error: 'Empty file upload result'};
169
+ deferred = that._addFinishedDeferreds();
170
+ that._transition($(this)).done(
171
+ function () {
172
+ var node = $(this);
173
+ template = that._renderDownload([file])
174
+ .replaceAll(node);
175
+ that._forceReflow(template);
176
+ that._transition(template).done(
177
+ function () {
178
+ data.context = $(this);
179
+ that._trigger('completed', e, data);
180
+ that._trigger('finished', e, data);
181
+ deferred.resolve();
182
+ }
183
+ );
184
+ }
185
+ );
186
+ });
187
+ } else {
188
+ template = that._renderDownload(files)[
189
+ that.options.prependFiles ? 'prependTo' : 'appendTo'
190
+ ](that.options.filesContainer);
191
+ that._forceReflow(template);
192
+ deferred = that._addFinishedDeferreds();
193
+ that._transition(template).done(
194
+ function () {
195
+ data.context = $(this);
196
+ that._trigger('completed', e, data);
197
+ that._trigger('finished', e, data);
198
+ deferred.resolve();
199
+ }
200
+ );
201
+ }
202
+ },
203
+ // Callback for failed (abort or error) uploads:
204
+ fail: function (e, data) {
205
+ if (e.isDefaultPrevented()) {
206
+ return false;
207
+ }
208
+ var that = $(this).data('blueimp-fileupload') ||
209
+ $(this).data('fileupload'),
210
+ template,
211
+ deferred;
212
+ if (data.context) {
213
+ data.context.each(function (index) {
214
+ if (data.errorThrown !== 'abort') {
215
+ var file = data.files[index];
216
+ file.error = file.error || data.errorThrown ||
217
+ true;
218
+ deferred = that._addFinishedDeferreds();
219
+ that._transition($(this)).done(
220
+ function () {
221
+ var node = $(this);
222
+ template = that._renderDownload([file])
223
+ .replaceAll(node);
224
+ that._forceReflow(template);
225
+ that._transition(template).done(
226
+ function () {
227
+ data.context = $(this);
228
+ that._trigger('failed', e, data);
229
+ that._trigger('finished', e, data);
230
+ deferred.resolve();
231
+ }
232
+ );
233
+ }
234
+ );
235
+ } else {
236
+ deferred = that._addFinishedDeferreds();
237
+ that._transition($(this)).done(
238
+ function () {
239
+ $(this).remove();
240
+ that._trigger('failed', e, data);
241
+ that._trigger('finished', e, data);
242
+ deferred.resolve();
243
+ }
244
+ );
245
+ }
246
+ });
247
+ } else if (data.errorThrown !== 'abort') {
248
+ data.context = that._renderUpload(data.files)[
249
+ that.options.prependFiles ? 'prependTo' : 'appendTo'
250
+ ](that.options.filesContainer)
251
+ .data('data', data);
252
+ that._forceReflow(data.context);
253
+ deferred = that._addFinishedDeferreds();
254
+ that._transition(data.context).done(
255
+ function () {
256
+ data.context = $(this);
257
+ that._trigger('failed', e, data);
258
+ that._trigger('finished', e, data);
259
+ deferred.resolve();
260
+ }
261
+ );
262
+ } else {
263
+ that._trigger('failed', e, data);
264
+ that._trigger('finished', e, data);
265
+ that._addFinishedDeferreds().resolve();
266
+ }
267
+ },
268
+ // Callback for upload progress events:
269
+ progress: function (e, data) {
270
+ if (e.isDefaultPrevented()) {
271
+ return false;
272
+ }
273
+ var progress = Math.floor(data.loaded / data.total * 100);
274
+ if (data.context) {
275
+ data.context.each(function () {
276
+ $(this).find('.progress')
277
+ .attr('aria-valuenow', progress)
278
+ .children().first().css(
279
+ 'width',
280
+ progress + '%'
281
+ );
282
+ });
283
+ }
284
+ },
285
+ // Callback for global upload progress events:
286
+ progressall: function (e, data) {
287
+ if (e.isDefaultPrevented()) {
288
+ return false;
289
+ }
290
+ var $this = $(this),
291
+ progress = Math.floor(data.loaded / data.total * 100),
292
+ globalProgressNode = $this.find('.fileupload-progress'),
293
+ extendedProgressNode = globalProgressNode
294
+ .find('.progress-extended');
295
+ if (extendedProgressNode.length) {
296
+ extendedProgressNode.html(
297
+ ($this.data('blueimp-fileupload') || $this.data('fileupload'))
298
+ ._renderExtendedProgress(data)
299
+ );
300
+ }
301
+ globalProgressNode
302
+ .find('.progress')
303
+ .attr('aria-valuenow', progress)
304
+ .children().first().css(
305
+ 'width',
306
+ progress + '%'
307
+ );
308
+ },
309
+ // Callback for uploads start, equivalent to the global ajaxStart event:
310
+ start: function (e) {
311
+ if (e.isDefaultPrevented()) {
312
+ return false;
313
+ }
314
+ var that = $(this).data('blueimp-fileupload') ||
315
+ $(this).data('fileupload');
316
+ that._resetFinishedDeferreds();
317
+ that._transition($(this).find('.fileupload-progress')).done(
318
+ function () {
319
+ that._trigger('started', e);
320
+ }
321
+ );
322
+ },
323
+ // Callback for uploads stop, equivalent to the global ajaxStop event:
324
+ stop: function (e) {
325
+ if (e.isDefaultPrevented()) {
326
+ return false;
327
+ }
328
+ var that = $(this).data('blueimp-fileupload') ||
329
+ $(this).data('fileupload'),
330
+ deferred = that._addFinishedDeferreds();
331
+ $.when.apply($, that._getFinishedDeferreds())
332
+ .done(function () {
333
+ that._trigger('stopped', e);
334
+ });
335
+ that._transition($(this).find('.fileupload-progress')).done(
336
+ function () {
337
+ $(this).find('.progress')
338
+ .attr('aria-valuenow', '0')
339
+ .children().first().css('width', '0%');
340
+ $(this).find('.progress-extended').html('&nbsp;');
341
+ deferred.resolve();
342
+ }
343
+ );
344
+ },
345
+ processstart: function (e) {
346
+ if (e.isDefaultPrevented()) {
347
+ return false;
348
+ }
349
+ $(this).addClass('fileupload-processing');
350
+ },
351
+ processstop: function (e) {
352
+ if (e.isDefaultPrevented()) {
353
+ return false;
354
+ }
355
+ $(this).removeClass('fileupload-processing');
356
+ },
357
+ // Callback for file deletion:
358
+ destroy: function (e, data) {
359
+ if (e.isDefaultPrevented()) {
360
+ return false;
361
+ }
362
+ var that = $(this).data('blueimp-fileupload') ||
363
+ $(this).data('fileupload'),
364
+ removeNode = function () {
365
+ that._transition(data.context).done(
366
+ function () {
367
+ $(this).remove();
368
+ that._trigger('destroyed', e, data);
369
+ }
370
+ );
371
+ };
372
+ if (data.url) {
373
+ data.dataType = data.dataType || that.options.dataType;
374
+ $.ajax(data).done(removeNode);
375
+ } else {
376
+ removeNode();
377
+ }
378
+ }
379
+ },
380
+
381
+ _resetFinishedDeferreds: function () {
382
+ this._finishedUploads = [];
383
+ },
384
+
385
+ _addFinishedDeferreds: function (deferred) {
386
+ if (!deferred) {
387
+ deferred = $.Deferred();
388
+ }
389
+ this._finishedUploads.push(deferred);
390
+ return deferred;
391
+ },
392
+
393
+ _getFinishedDeferreds: function () {
394
+ return this._finishedUploads;
395
+ },
396
+
397
+ // Link handler, that allows to download files
398
+ // by drag & drop of the links to the desktop:
399
+ _enableDragToDesktop: function () {
400
+ var link = $(this),
401
+ url = link.prop('href'),
402
+ name = link.prop('download'),
403
+ type = 'application/octet-stream';
404
+ link.bind('dragstart', function (e) {
405
+ try {
406
+ e.originalEvent.dataTransfer.setData(
407
+ 'DownloadURL',
408
+ [type, name, url].join(':')
409
+ );
410
+ } catch (ignore) {}
411
+ });
412
+ },
413
+
414
+ _formatFileSize: function (bytes) {
415
+ if (typeof bytes !== 'number') {
416
+ return '';
417
+ }
418
+ if (bytes >= 1000000000) {
419
+ return (bytes / 1000000000).toFixed(2) + ' GB';
420
+ }
421
+ if (bytes >= 1000000) {
422
+ return (bytes / 1000000).toFixed(2) + ' MB';
423
+ }
424
+ return (bytes / 1000).toFixed(2) + ' KB';
425
+ },
426
+
427
+ _formatBitrate: function (bits) {
428
+ if (typeof bits !== 'number') {
429
+ return '';
430
+ }
431
+ if (bits >= 1000000000) {
432
+ return (bits / 1000000000).toFixed(2) + ' Gbit/s';
433
+ }
434
+ if (bits >= 1000000) {
435
+ return (bits / 1000000).toFixed(2) + ' Mbit/s';
436
+ }
437
+ if (bits >= 1000) {
438
+ return (bits / 1000).toFixed(2) + ' kbit/s';
439
+ }
440
+ return bits.toFixed(2) + ' bit/s';
441
+ },
442
+
443
+ _formatTime: function (seconds) {
444
+ var date = new Date(seconds * 1000),
445
+ days = Math.floor(seconds / 86400);
446
+ days = days ? days + 'd ' : '';
447
+ return days +
448
+ ('0' + date.getUTCHours()).slice(-2) + ':' +
449
+ ('0' + date.getUTCMinutes()).slice(-2) + ':' +
450
+ ('0' + date.getUTCSeconds()).slice(-2);
451
+ },
452
+
453
+ _formatPercentage: function (floatValue) {
454
+ return (floatValue * 100).toFixed(2) + ' %';
455
+ },
456
+
457
+ _renderExtendedProgress: function (data) {
458
+ return this._formatBitrate(data.bitrate) + ' | ' +
459
+ this._formatTime(
460
+ (data.total - data.loaded) * 8 / data.bitrate
461
+ ) + ' | ' +
462
+ this._formatPercentage(
463
+ data.loaded / data.total
464
+ ) + ' | ' +
465
+ this._formatFileSize(data.loaded) + ' / ' +
466
+ this._formatFileSize(data.total);
467
+ },
468
+
469
+ _renderTemplate: function (func, files) {
470
+ if (!func) {
471
+ return $();
472
+ }
473
+ var result = func({
474
+ files: files,
475
+ formatFileSize: this._formatFileSize,
476
+ options: this.options
477
+ });
478
+ if (result instanceof $) {
479
+ return result;
480
+ }
481
+ return $(this.options.templatesContainer).html(result).children();
482
+ },
483
+
484
+ _renderPreviews: function (data) {
485
+ data.context.find('.preview').each(function (index, elm) {
486
+ $(elm).append(data.files[index].preview);
487
+ });
488
+ },
489
+
490
+ _renderUpload: function (files) {
491
+ return this._renderTemplate(
492
+ this.options.uploadTemplate,
493
+ files
494
+ );
495
+ },
496
+
497
+ _renderDownload: function (files) {
498
+ return this._renderTemplate(
499
+ this.options.downloadTemplate,
500
+ files
501
+ ).find('a[download]').each(this._enableDragToDesktop).end();
502
+ },
503
+
504
+ _startHandler: function (e) {
505
+ e.preventDefault();
506
+ var button = $(e.currentTarget),
507
+ template = button.closest('.template-upload'),
508
+ data = template.data('data');
509
+ button.prop('disabled', true);
510
+ if (data && data.submit) {
511
+ data.submit();
512
+ }
513
+ },
514
+
515
+ _cancelHandler: function (e) {
516
+ e.preventDefault();
517
+ var template = $(e.currentTarget)
518
+ .closest('.template-upload,.template-download'),
519
+ data = template.data('data') || {};
520
+ if (!data.jqXHR) {
521
+ data.context = data.context || template;
522
+ data.errorThrown = 'abort';
523
+ this._trigger('fail', e, data);
524
+ } else {
525
+ data.jqXHR.abort();
526
+ }
527
+ },
528
+
529
+ _deleteHandler: function (e) {
530
+ e.preventDefault();
531
+ var button = $(e.currentTarget);
532
+ this._trigger('destroy', e, $.extend({
533
+ context: button.closest('.template-download'),
534
+ type: 'DELETE'
535
+ }, button.data()));
536
+ },
537
+
538
+ _forceReflow: function (node) {
539
+ return $.support.transition && node.length &&
540
+ node[0].offsetWidth;
541
+ },
542
+
543
+ _transition: function (node) {
544
+ var dfd = $.Deferred();
545
+ if ($.support.transition && node.hasClass('fade') && node.is(':visible')) {
546
+ node.bind(
547
+ $.support.transition.end,
548
+ function (e) {
549
+ // Make sure we don't respond to other transitions events
550
+ // in the container element, e.g. from button elements:
551
+ if (e.target === node[0]) {
552
+ node.unbind($.support.transition.end);
553
+ dfd.resolveWith(node);
554
+ }
555
+ }
556
+ ).toggleClass('in');
557
+ } else {
558
+ node.toggleClass('in');
559
+ dfd.resolveWith(node);
560
+ }
561
+ return dfd;
562
+ },
563
+
564
+ _initButtonBarEventHandlers: function () {
565
+ var fileUploadButtonBar = this.element.find('.fileupload-buttonbar'),
566
+ filesList = this.options.filesContainer;
567
+ this._on(fileUploadButtonBar.find('.start'), {
568
+ click: function (e) {
569
+ e.preventDefault();
570
+ filesList.find('.start').click();
571
+ }
572
+ });
573
+ this._on(fileUploadButtonBar.find('.cancel'), {
574
+ click: function (e) {
575
+ e.preventDefault();
576
+ filesList.find('.cancel').click();
577
+ }
578
+ });
579
+ this._on(fileUploadButtonBar.find('.delete'), {
580
+ click: function (e) {
581
+ e.preventDefault();
582
+ filesList.find('.toggle:checked')
583
+ .closest('.template-download')
584
+ .find('.delete').click();
585
+ fileUploadButtonBar.find('.toggle')
586
+ .prop('checked', false);
587
+ }
588
+ });
589
+ this._on(fileUploadButtonBar.find('.toggle'), {
590
+ change: function (e) {
591
+ filesList.find('.toggle').prop(
592
+ 'checked',
593
+ $(e.currentTarget).is(':checked')
594
+ );
595
+ }
596
+ });
597
+ },
598
+
599
+ _destroyButtonBarEventHandlers: function () {
600
+ this._off(
601
+ this.element.find('.fileupload-buttonbar')
602
+ .find('.start, .cancel, .delete'),
603
+ 'click'
604
+ );
605
+ this._off(
606
+ this.element.find('.fileupload-buttonbar .toggle'),
607
+ 'change.'
608
+ );
609
+ },
610
+
611
+ _initEventHandlers: function () {
612
+ this._super();
613
+ this._on(this.options.filesContainer, {
614
+ 'click .start': this._startHandler,
615
+ 'click .cancel': this._cancelHandler,
616
+ 'click .delete': this._deleteHandler
617
+ });
618
+ this._initButtonBarEventHandlers();
619
+ },
620
+
621
+ _destroyEventHandlers: function () {
622
+ this._destroyButtonBarEventHandlers();
623
+ this._off(this.options.filesContainer, 'click');
624
+ this._super();
625
+ },
626
+
627
+ _enableFileInputButton: function () {
628
+ this.element.find('.fileinput-button input')
629
+ .prop('disabled', false)
630
+ .parent().removeClass('disabled');
631
+ },
632
+
633
+ _disableFileInputButton: function () {
634
+ this.element.find('.fileinput-button input')
635
+ .prop('disabled', true)
636
+ .parent().addClass('disabled');
637
+ },
638
+
639
+ _initTemplates: function () {
640
+ var options = this.options;
641
+ options.templatesContainer = this.document[0].createElement(
642
+ options.filesContainer.prop('nodeName')
643
+ );
644
+ if (tmpl) {
645
+ if (options.uploadTemplateId) {
646
+ options.uploadTemplate = tmpl(options.uploadTemplateId);
647
+ }
648
+ if (options.downloadTemplateId) {
649
+ options.downloadTemplate = tmpl(options.downloadTemplateId);
650
+ }
651
+ }
652
+ },
653
+
654
+ _initFilesContainer: function () {
655
+ var options = this.options;
656
+ if (options.filesContainer === undefined) {
657
+ options.filesContainer = this.element.find('.files');
658
+ } else if (!(options.filesContainer instanceof $)) {
659
+ options.filesContainer = $(options.filesContainer);
660
+ }
661
+ },
662
+
663
+ _initSpecialOptions: function () {
664
+ this._super();
665
+ this._initFilesContainer();
666
+ this._initTemplates();
667
+ },
668
+
669
+ _create: function () {
670
+ this._super();
671
+ this._resetFinishedDeferreds();
672
+ if (!$.support.fileInput) {
673
+ this._disableFileInputButton();
674
+ }
675
+ },
676
+
677
+ enable: function () {
678
+ var wasDisabled = false;
679
+ if (this.options.disabled) {
680
+ wasDisabled = true;
681
+ }
682
+ this._super();
683
+ if (wasDisabled) {
684
+ this.element.find('input, button').prop('disabled', false);
685
+ this._enableFileInputButton();
686
+ }
687
+ },
688
+
689
+ disable: function () {
690
+ if (!this.options.disabled) {
691
+ this.element.find('input, button').prop('disabled', true);
692
+ this._disableFileInputButton();
693
+ }
694
+ this._super();
695
+ }
696
+
697
+ });
698
+
699
+ }));
assets/js/fileupload/jquery.fileupload.js ADDED
@@ -0,0 +1,1367 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * jQuery File Upload Plugin 5.34.0
3
+ * https://github.com/blueimp/jQuery-File-Upload
4
+ *
5
+ * Copyright 2010, Sebastian Tschan
6
+ * https://blueimp.net
7
+ *
8
+ * Licensed under the MIT license:
9
+ * http://www.opensource.org/licenses/MIT
10
+ */
11
+
12
+ /*jslint nomen: true, unparam: true, regexp: true */
13
+ /*global define, window, document, location, File, Blob, FormData */
14
+
15
+ (function (factory) {
16
+ 'use strict';
17
+ if (typeof define === 'function' && define.amd) {
18
+ // Register as an anonymous AMD module:
19
+ define([
20
+ 'jquery',
21
+ 'jquery.ui.widget'
22
+ ], factory);
23
+ } else {
24
+ // Browser globals:
25
+ factory(window.jQuery);
26
+ }
27
+ }(function ($) {
28
+ 'use strict';
29
+
30
+ // Detect file input support, based on
31
+ // http://viljamis.com/blog/2012/file-upload-support-on-mobile/
32
+ $.support.fileInput = !(new RegExp(
33
+ // Handle devices which give false positives for the feature detection:
34
+ '(Android (1\\.[0156]|2\\.[01]))' +
35
+ '|(Windows Phone (OS 7|8\\.0))|(XBLWP)|(ZuneWP)|(WPDesktop)' +
36
+ '|(w(eb)?OSBrowser)|(webOS)' +
37
+ '|(Kindle/(1\\.0|2\\.[05]|3\\.0))'
38
+ ).test(window.navigator.userAgent) ||
39
+ // Feature detection for all other devices:
40
+ $('<input type="file">').prop('disabled'));
41
+
42
+ // The FileReader API is not actually used, but works as feature detection,
43
+ // as e.g. Safari supports XHR file uploads via the FormData API,
44
+ // but not non-multipart XHR file uploads:
45
+ $.support.xhrFileUpload = !!(window.XMLHttpRequestUpload && window.FileReader);
46
+ $.support.xhrFormDataFileUpload = !!window.FormData;
47
+
48
+ // Detect support for Blob slicing (required for chunked uploads):
49
+ $.support.blobSlice = window.Blob && (Blob.prototype.slice ||
50
+ Blob.prototype.webkitSlice || Blob.prototype.mozSlice);
51
+
52
+ // The fileupload widget listens for change events on file input fields defined
53
+ // via fileInput setting and paste or drop events of the given dropZone.
54
+ // In addition to the default jQuery Widget methods, the fileupload widget
55
+ // exposes the "add" and "send" methods, to add or directly send files using
56
+ // the fileupload API.
57
+ // By default, files added via file input selection, paste, drag & drop or
58
+ // "add" method are uploaded immediately, but it is possible to override
59
+ // the "add" callback option to queue file uploads.
60
+ $.widget('blueimp.fileupload', {
61
+
62
+ options: {
63
+ // The drop target element(s), by the default the complete document.
64
+ // Set to null to disable drag & drop support:
65
+ dropZone: $(document),
66
+ // The paste target element(s), by the default the complete document.
67
+ // Set to null to disable paste support:
68
+ pasteZone: $(document),
69
+ // The file input field(s), that are listened to for change events.
70
+ // If undefined, it is set to the file input fields inside
71
+ // of the widget element on plugin initialization.
72
+ // Set to null to disable the change listener.
73
+ fileInput: undefined,
74
+ // By default, the file input field is replaced with a clone after
75
+ // each input field change event. This is required for iframe transport
76
+ // queues and allows change events to be fired for the same file
77
+ // selection, but can be disabled by setting the following option to false:
78
+ replaceFileInput: true,
79
+ // The parameter name for the file form data (the request argument name).
80
+ // If undefined or empty, the name property of the file input field is
81
+ // used, or "files[]" if the file input name property is also empty,
82
+ // can be a string or an array of strings:
83
+ paramName: undefined,
84
+ // By default, each file of a selection is uploaded using an individual
85
+ // request for XHR type uploads. Set to false to upload file
86
+ // selections in one request each:
87
+ singleFileUploads: true,
88
+ // To limit the number of files uploaded with one XHR request,
89
+ // set the following option to an integer greater than 0:
90
+ limitMultiFileUploads: undefined,
91
+ // Set the following option to true to issue all file upload requests
92
+ // in a sequential order:
93
+ sequentialUploads: false,
94
+ // To limit the number of concurrent uploads,
95
+ // set the following option to an integer greater than 0:
96
+ limitConcurrentUploads: undefined,
97
+ // Set the following option to true to force iframe transport uploads:
98
+ forceIframeTransport: false,
99
+ // Set the following option to the location of a redirect url on the
100
+ // origin server, for cross-domain iframe transport uploads:
101
+ redirect: undefined,
102
+ // The parameter name for the redirect url, sent as part of the form
103
+ // data and set to 'redirect' if this option is empty:
104
+ redirectParamName: undefined,
105
+ // Set the following option to the location of a postMessage window,
106
+ // to enable postMessage transport uploads:
107
+ postMessage: undefined,
108
+ // By default, XHR file uploads are sent as multipart/form-data.
109
+ // The iframe transport is always using multipart/form-data.
110
+ // Set to false to enable non-multipart XHR uploads:
111
+ multipart: true,
112
+ // To upload large files in smaller chunks, set the following option
113
+ // to a preferred maximum chunk size. If set to 0, null or undefined,
114
+ // or the browser does not support the required Blob API, files will
115
+ // be uploaded as a whole.
116
+ maxChunkSize: undefined,
117
+ // When a non-multipart upload or a chunked multipart upload has been
118
+ // aborted, this option can be used to resume the upload by setting
119
+ // it to the size of the already uploaded bytes. This option is most
120
+ // useful when modifying the options object inside of the "add" or
121
+ // "send" callbacks, as the options are cloned for each file upload.
122
+ uploadedBytes: undefined,
123
+ // By default, failed (abort or error) file uploads are removed from the
124
+ // global progress calculation. Set the following option to false to
125
+ // prevent recalculating the global progress data:
126
+ recalculateProgress: true,
127
+ // Interval in milliseconds to calculate and trigger progress events:
128
+ progressInterval: 100,
129
+ // Interval in milliseconds to calculate progress bitrate:
130
+ bitrateInterval: 500,
131
+ // By default, uploads are started automatically when adding files:
132
+ autoUpload: true,
133
+
134
+ // Error and info messages:
135
+ messages: {
136
+ uploadedBytes: 'Uploaded bytes exceed file size'
137
+ },
138
+
139
+ // Translation function, gets the message key to be translated
140
+ // and an object with context specific data as arguments:
141
+ i18n: function (message, context) {
142
+ message = this.messages[message] || message.toString();
143
+ if (context) {
144
+ $.each(context, function (key, value) {
145
+ message = message.replace('{' + key + '}', value);
146
+ });
147
+ }
148
+ return message;
149
+ },
150
+
151
+ // Additional form data to be sent along with the file uploads can be set
152
+ // using this option, which accepts an array of objects with name and
153
+ // value properties, a function returning such an array, a FormData
154
+ // object (for XHR file uploads), or a simple object.
155
+ // The form of the first fileInput is given as parameter to the function:
156
+ formData: function (form) {
157
+ return form.serializeArray();
158
+ },
159
+
160
+ // The add callback is invoked as soon as files are added to the fileupload
161
+ // widget (via file input selection, drag & drop, paste or add API call).
162
+ // If the singleFileUploads option is enabled, this callback will be
163
+ // called once for each file in the selection for XHR file uploads, else
164
+ // once for each file selection.
165
+ //
166
+ // The upload starts when the submit method is invoked on the data parameter.
167
+ // The data object contains a files property holding the added files
168
+ // and allows you to override plugin options as well as define ajax settings.
169
+ //
170
+ // Listeners for this callback can also be bound the following way:
171
+ // .bind('fileuploadadd', func);
172
+ //
173
+ // data.submit() returns a Promise object and allows to attach additional
174
+ // handlers using jQuery's Deferred callbacks:
175
+ // data.submit().done(func).fail(func).always(func);
176
+ add: function (e, data) {
177
+ if (e.isDefaultPrevented()) {
178
+ return false;
179
+ }
180
+ if (data.autoUpload || (data.autoUpload !== false &&
181
+ $(this).fileupload('option', 'autoUpload'))) {
182
+ data.process().done(function () {
183
+ data.submit();
184
+ });
185
+ }
186
+ },
187
+
188
+ // Other callbacks:
189
+
190
+ // Callback for the submit event of each file upload:
191
+ // submit: function (e, data) {}, // .bind('fileuploadsubmit', func);
192
+
193
+ // Callback for the start of each file upload request:
194
+ // send: function (e, data) {}, // .bind('fileuploadsend', func);
195
+
196
+ // Callback for successful uploads:
197
+ // done: function (e, data) {}, // .bind('fileuploaddone', func);
198
+
199
+ // Callback for failed (abort or error) uploads:
200
+ // fail: function (e, data) {}, // .bind('fileuploadfail', func);
201
+
202
+ // Callback for completed (success, abort or error) requests:
203
+ // always: function (e, data) {}, // .bind('fileuploadalways', func);
204
+
205
+ // Callback for upload progress events:
206
+ // progress: function (e, data) {}, // .bind('fileuploadprogress', func);
207
+
208
+ // Callback for global upload progress events:
209
+ // progressall: function (e, data) {}, // .bind('fileuploadprogressall', func);
210
+
211
+ // Callback for uploads start, equivalent to the global ajaxStart event:
212
+ // start: function (e) {}, // .bind('fileuploadstart', func);
213
+
214
+ // Callback for uploads stop, equivalent to the global ajaxStop event:
215
+ // stop: function (e) {}, // .bind('fileuploadstop', func);
216
+
217
+ // Callback for change events of the fileInput(s):
218
+ // change: function (e, data) {}, // .bind('fileuploadchange', func);
219
+
220
+ // Callback for paste events to the pasteZone(s):
221
+ // paste: function (e, data) {}, // .bind('fileuploadpaste', func);
222
+
223
+ // Callback for drop events of the dropZone(s):
224
+ // drop: function (e, data) {}, // .bind('fileuploaddrop', func);
225
+
226
+ // Callback for dragover events of the dropZone(s):
227
+ // dragover: function (e) {}, // .bind('fileuploaddragover', func);
228
+
229
+ // Callback for the start of each chunk upload request:
230
+ // chunksend: function (e, data) {}, // .bind('fileuploadchunksend', func);
231
+
232
+ // Callback for successful chunk uploads:
233
+ // chunkdone: function (e, data) {}, // .bind('fileuploadchunkdone', func);
234
+
235
+ // Callback for failed (abort or error) chunk uploads:
236
+ // chunkfail: function (e, data) {}, // .bind('fileuploadchunkfail', func);
237
+
238
+ // Callback for completed (success, abort or error) chunk upload requests:
239
+ // chunkalways: function (e, data) {}, // .bind('fileuploadchunkalways', func);
240
+
241
+ // The plugin options are used as settings object for the ajax calls.
242
+ // The following are jQuery ajax settings required for the file uploads:
243
+ processData: false,
244
+ contentType: false,
245
+ cache: false
246
+ },
247
+
248
+ // A list of options that require reinitializing event listeners and/or
249
+ // special initialization code:
250
+ _specialOptions: [
251
+ 'fileInput',
252
+ 'dropZone',
253
+ 'pasteZone',
254
+ 'multipart',
255
+ 'forceIframeTransport'
256
+ ],
257
+
258
+ _blobSlice: $.support.blobSlice && function () {
259
+ var slice = this.slice || this.webkitSlice || this.mozSlice;
260
+ return slice.apply(this, arguments);
261
+ },
262
+
263
+ _BitrateTimer: function () {
264
+ this.timestamp = ((Date.now) ? Date.now() : (new Date()).getTime());
265
+ this.loaded = 0;
266
+ this.bitrate = 0;
267
+ this.getBitrate = function (now, loaded, interval) {
268
+ var timeDiff = now - this.timestamp;
269
+ if (!this.bitrate || !interval || timeDiff > interval) {
270
+ this.bitrate = (loaded - this.loaded) * (1000 / timeDiff) * 8;
271
+ this.loaded = loaded;
272
+ this.timestamp = now;
273
+ }
274
+ return this.bitrate;
275
+ };
276
+ },
277
+
278
+ _isXHRUpload: function (options) {
279
+ return !options.forceIframeTransport &&
280
+ ((!options.multipart && $.support.xhrFileUpload) ||
281
+ $.support.xhrFormDataFileUpload);
282
+ },
283
+
284
+ _getFormData: function (options) {
285
+ var formData;
286
+ if (typeof options.formData === 'function') {
287
+ return options.formData(options.form);
288
+ }
289
+ if ($.isArray(options.formData)) {
290
+ return options.formData;
291
+ }
292
+ if ($.type(options.formData) === 'object') {
293
+ formData = [];
294
+ $.each(options.formData, function (name, value) {
295
+ formData.push({name: name, value: value});
296
+ });
297
+ return formData;
298
+ }
299
+ return [];
300
+ },
301
+
302
+ _getTotal: function (files) {
303
+ var total = 0;
304
+ $.each(files, function (index, file) {
305
+ total += file.size || 1;
306
+ });
307
+ return total;
308
+ },
309
+
310
+ _initProgressObject: function (obj) {
311
+ var progress = {
312
+ loaded: 0,
313
+ total: 0,
314
+ bitrate: 0
315
+ };
316
+ if (obj._progress) {
317
+ $.extend(obj._progress, progress);
318
+ } else {
319
+ obj._progress = progress;
320
+ }
321
+ },
322
+
323
+ _initResponseObject: function (obj) {
324
+ var prop;
325
+ if (obj._response) {
326
+ for (prop in obj._response) {
327
+ if (obj._response.hasOwnProperty(prop)) {
328
+ delete obj._response[prop];
329
+ }
330
+ }
331
+ } else {
332
+ obj._response = {};
333
+ }
334
+ },
335
+
336
+ _onProgress: function (e, data) {
337
+ if (e.lengthComputable) {
338
+ var now = ((Date.now) ? Date.now() : (new Date()).getTime()),
339
+ loaded;
340
+ if (data._time && data.progressInterval &&
341
+ (now - data._time < data.progressInterval) &&
342
+ e.loaded !== e.total) {
343
+ return;
344
+ }
345
+ data._time = now;
346
+ loaded = Math.floor(
347
+ e.loaded / e.total * (data.chunkSize || data._progress.total)
348
+ ) + (data.uploadedBytes || 0);
349
+ // Add the difference from the previously loaded state
350
+ // to the global loaded counter:
351
+ this._progress.loaded += (loaded - data._progress.loaded);
352
+ this._progress.bitrate = this._bitrateTimer.getBitrate(
353
+ now,
354
+ this._progress.loaded,
355
+ data.bitrateInterval
356
+ );
357
+ data._progress.loaded = data.loaded = loaded;
358
+ data._progress.bitrate = data.bitrate = data._bitrateTimer.getBitrate(
359
+ now,
360
+ loaded,
361
+ data.bitrateInterval
362
+ );
363
+ // Trigger a custom progress event with a total data property set
364
+ // to the file size(s) of the current upload and a loaded data
365
+ // property calculated accordingly:
366
+ this._trigger(
367
+ 'progress',
368
+ $.Event('progress', {delegatedEvent: e}),
369
+ data
370
+ );
371
+ // Trigger a global progress event for all current file uploads,
372
+ // including ajax calls queued for sequential file uploads:
373
+ this._trigger(
374
+ 'progressall',
375
+ $.Event('progressall', {delegatedEvent: e}),
376
+ this._progress
377
+ );
378
+ }
379
+ },
380
+
381
+ _initProgressListener: function (options) {
382
+ var that = this,
383
+ xhr = options.xhr ? options.xhr() : $.ajaxSettings.xhr();
384
+ // Accesss to the native XHR object is required to add event listeners
385
+ // for the upload progress event:
386
+ if (xhr.upload) {
387
+ $(xhr.upload).bind('progress', function (e) {
388
+ var oe = e.originalEvent;
389
+ // Make sure the progress event properties get copied over:
390
+ e.lengthComputable = oe.lengthComputable;
391
+ e.loaded = oe.loaded;
392
+ e.total = oe.total;
393
+ that._onProgress(e, options);
394
+ });
395
+ options.xhr = function () {
396
+ return xhr;
397
+ };
398
+ }
399
+ },
400
+
401
+ _isInstanceOf: function (type, obj) {
402
+ // Cross-frame instanceof check
403
+ return Object.prototype.toString.call(obj) === '[object ' + type + ']';
404
+ },
405
+
406
+ _initXHRData: function (options) {
407
+ var that = this,
408
+ formData,
409
+ file = options.files[0],
410
+ // Ignore non-multipart setting if not supported:
411
+ multipart = options.multipart || !$.support.xhrFileUpload,
412
+ paramName = options.paramName[0];
413
+ options.headers = $.extend({}, options.headers);
414
+ if (options.contentRange) {
415
+ options.headers['Content-Range'] = options.contentRange;
416
+ }
417
+ if (!multipart || options.blob || !this._isInstanceOf('File', file)) {
418
+ options.headers['Content-Disposition'] = 'attachment; filename="' +
419
+ encodeURI(file.name) + '"';
420
+ }
421
+ if (!multipart) {
422
+ options.contentType = file.type;
423
+ options.data = options.blob || file;
424
+ } else if ($.support.xhrFormDataFileUpload) {
425
+ if (options.postMessage) {
426
+ // window.postMessage does not allow sending FormData
427
+ // objects, so we just add the File/Blob objects to
428
+ // the formData array and let the postMessage window
429
+ // create the FormData object out of this array:
430
+ formData = this._getFormData(options);
431
+ if (options.blob) {
432
+ formData.push({
433
+ name: paramName,
434
+ value: options.blob
435
+ });
436
+ } else {
437
+ $.each(options.files, function (index, file) {
438
+ formData.push({
439
+ name: options.paramName[index] || paramName,
440
+ value: file
441
+ });
442
+ });
443
+ }
444
+ } else {
445
+ if (that._isInstanceOf('FormData', options.formData)) {
446
+ formData = options.formData;
447
+ } else {
448
+ formData = new FormData();
449
+ $.each(this._getFormData(options), function (index, field) {
450
+ formData.append(field.name, field.value);
451
+ });
452
+ }
453
+ if (options.blob) {
454
+ formData.append(paramName, options.blob, file.name);
455
+ } else {
456
+ $.each(options.files, function (index, file) {
457
+ // This check allows the tests to run with
458
+ // dummy objects:
459
+ if (that._isInstanceOf('File', file) ||
460
+ that._isInstanceOf('Blob', file)) {
461
+ formData.append(
462
+ options.paramName[index] || paramName,
463
+ file,
464
+ file.name
465
+ );
466
+ }
467
+ });
468
+ }
469
+ }
470
+ options.data = formData;
471
+ }
472
+ // Blob reference is not needed anymore, free memory:
473
+ options.blob = null;
474
+ },
475
+
476
+ _initIframeSettings: function (options) {
477
+ var targetHost = $('<a></a>').prop('href', options.url).prop('host');
478
+ // Setting the dataType to iframe enables the iframe transport:
479
+ options.dataType = 'iframe ' + (options.dataType || '');
480
+ // The iframe transport accepts a serialized array as form data:
481
+ options.formData = this._getFormData(options);
482
+ // Add redirect url to form data on cross-domain uploads:
483
+ if (options.redirect && targetHost && targetHost !== location.host) {
484
+ options.formData.push({
485
+ name: options.redirectParamName || 'redirect',
486
+ value: options.redirect
487
+ });
488
+ }
489
+ },
490
+
491
+ _initDataSettings: function (options) {
492
+ if (this._isXHRUpload(options)) {
493
+ if (!this._chunkedUpload(options, true)) {
494
+ if (!options.data) {
495
+ this._initXHRData(options);
496
+ }
497
+ this._initProgressListener(options);
498
+ }
499
+ if (options.postMessage) {
500
+ // Setting the dataType to postmessage enables the
501
+ // postMessage transport:
502
+ options.dataType = 'postmessage ' + (options.dataType || '');
503
+ }
504
+ } else {
505
+ this._initIframeSettings(options);
506
+ }
507
+ },
508
+
509
+ _getParamName: function (options) {
510
+ var fileInput = $(options.fileInput),
511
+ paramName = options.paramName;
512
+ if (!paramName) {
513
+ paramName = [];
514
+ fileInput.each(function () {
515
+ var input = $(this),
516
+ name = input.prop('name') || 'files[]',
517
+ i = (input.prop('files') || [1]).length;
518
+ while (i) {
519
+ paramName.push(name);
520
+ i -= 1;
521
+ }
522
+ });
523
+ if (!paramName.length) {
524
+ paramName = [fileInput.prop('name') || 'files[]'];
525
+ }
526
+ } else if (!$.isArray(paramName)) {
527
+ paramName = [paramName];
528
+ }
529
+ return paramName;
530
+ },
531
+
532
+ _initFormSettings: function (options) {
533
+ // Retrieve missing options from the input field and the
534
+ // associated form, if available:
535
+ if (!options.form || !options.form.length) {
536
+ options.form = $(options.fileInput.prop('form'));
537
+ // If the given file input doesn't have an associated form,
538
+ // use the default widget file input's form:
539
+ if (!options.form.length) {
540
+ options.form = $(this.options.fileInput.prop('form'));
541
+ }
542
+ }
543
+ options.paramName = this._getParamName(options);
544
+ if (!options.url) {
545
+ options.url = options.form.prop('action') || location.href;
546
+ }
547
+ // The HTTP request method must be "POST" or "PUT":
548
+ options.type = (options.type ||
549
+ ($.type(options.form.prop('method')) === 'string' &&
550
+ options.form.prop('method')) || ''
551
+ ).toUpperCase();
552
+ if (options.type !== 'POST' && options.type !== 'PUT' &&
553
+ options.type !== 'PATCH') {
554
+ options.type = 'POST';
555
+ }
556
+ if (!options.formAcceptCharset) {
557
+ options.formAcceptCharset = options.form.attr('accept-charset');
558
+ }
559
+ },
560
+
561
+ _getAJAXSettings: function (data) {
562
+ var options = $.extend({}, this.options, data);
563
+ this._initFormSettings(options);
564
+ this._initDataSettings(options);
565
+ return options;
566
+ },
567
+
568
+ // jQuery 1.6 doesn't provide .state(),
569
+ // while jQuery 1.8+ removed .isRejected() and .isResolved():
570
+ _getDeferredState: function (deferred) {
571
+ if (deferred.state) {
572
+ return deferred.state();
573
+ }
574
+ if (deferred.isResolved()) {
575
+ return 'resolved';
576
+ }
577
+ if (deferred.isRejected()) {
578
+ return 'rejected';
579
+ }
580
+ return 'pending';
581
+ },
582
+
583
+ // Maps jqXHR callbacks to the equivalent
584
+ // methods of the given Promise object:
585
+ _enhancePromise: function (promise) {
586
+ promise.success = promise.done;
587
+ promise.error = promise.fail;
588
+ promise.complete = promise.always;
589
+ return promise;
590
+ },
591
+
592
+ // Creates and returns a Promise object enhanced with
593
+ // the jqXHR methods abort, success, error and complete:
594
+ _getXHRPromise: function (resolveOrReject, context, args) {
595
+ var dfd = $.Deferred(),
596
+ promise = dfd.promise();
597
+ context = context || this.options.context || promise;
598
+ if (resolveOrReject === true) {
599
+ dfd.resolveWith(context, args);
600
+ } else if (resolveOrReject === false) {
601
+ dfd.rejectWith(context, args);
602
+ }
603
+ promise.abort = dfd.promise;
604
+ return this._enhancePromise(promise);
605
+ },
606
+
607
+ // Adds convenience methods to the data callback argument:
608
+ _addConvenienceMethods: function (e, data) {
609
+ var that = this,
610
+ getPromise = function (data) {
611
+ return $.Deferred().resolveWith(that, [data]).promise();
612
+ };
613
+ data.process = function (resolveFunc, rejectFunc) {
614
+ if (resolveFunc || rejectFunc) {
615
+ data._processQueue = this._processQueue =
616
+ (this._processQueue || getPromise(this))
617
+ .pipe(resolveFunc, rejectFunc);
618
+ }
619
+ return this._processQueue || getPromise(this);
620
+ };
621
+ data.submit = function () {
622
+ if (this.state() !== 'pending') {
623
+ data.jqXHR = this.jqXHR =
624
+ (that._trigger(
625
+ 'submit',
626
+ $.Event('submit', {delegatedEvent: e}),
627
+ this
628
+ ) !== false) && that._onSend(e, this);
629
+ }
630
+ return this.jqXHR || that._getXHRPromise();
631
+ };
632
+ data.abort = function () {
633
+ if (this.jqXHR) {
634
+ return this.jqXHR.abort();
635
+ }
636
+ return that._getXHRPromise();
637
+ };
638
+ data.state = function () {
639
+ if (this.jqXHR) {
640
+ return that._getDeferredState(this.jqXHR);
641
+ }
642
+ if (this._processQueue) {
643
+ return that._getDeferredState(this._processQueue);
644
+ }
645
+ };
646
+ data.progress = function () {
647
+ return this._progress;
648
+ };
649
+ data.response = function () {
650
+ return this._response;
651
+ };
652
+ },
653
+
654
+ // Parses the Range header from the server response
655
+ // and returns the uploaded bytes:
656
+ _getUploadedBytes: function (jqXHR) {
657
+ var range = jqXHR.getResponseHeader('Range'),
658
+ parts = range && range.split('-'),
659
+ upperBytesPos = parts && parts.length > 1 &&
660
+ parseInt(parts[1], 10);
661
+ return upperBytesPos && upperBytesPos + 1;
662
+ },
663
+
664
+ // Uploads a file in multiple, sequential requests
665
+ // by splitting the file up in multiple blob chunks.
666
+ // If the second parameter is true, only tests if the file
667
+ // should be uploaded in chunks, but does not invoke any
668
+ // upload requests:
669
+ _chunkedUpload: function (options, testOnly) {
670
+ options.uploadedBytes = options.uploadedBytes || 0;
671
+ var that = this,
672
+ file = options.files[0],
673
+ fs = file.size,
674
+ ub = options.uploadedBytes,
675
+ mcs = options.maxChunkSize || fs,
676
+ slice = this._blobSlice,
677
+ dfd = $.Deferred(),
678
+ promise = dfd.promise(),
679
+ jqXHR,
680
+ upload;
681
+ if (!(this._isXHRUpload(options) && slice && (ub || mcs < fs)) ||
682
+ options.data) {
683
+ return false;
684
+ }
685
+ if (testOnly) {
686
+ return true;
687
+ }
688
+ if (ub >= fs) {
689
+ file.error = options.i18n('uploadedBytes');
690
+ return this._getXHRPromise(
691
+ false,
692
+ options.context,
693
+ [null, 'error', file.error]
694
+ );
695
+ }
696
+ // The chunk upload method:
697
+ upload = function () {
698
+ // Clone the options object for each chunk upload:
699
+ var o = $.extend({}, options),
700
+ currentLoaded = o._progress.loaded;
701
+ o.blob = slice.call(
702
+ file,
703
+ ub,
704
+ ub + mcs,
705
+ file.type
706
+ );
707
+ // Store the current chunk size, as the blob itself
708
+ // will be dereferenced after data processing:
709
+ o.chunkSize = o.blob.size;
710
+ // Expose the chunk bytes position range:
711
+ o.contentRange = 'bytes ' + ub + '-' +
712
+ (ub + o.chunkSize - 1) + '/' + fs;
713
+ // Process the upload data (the blob and potential form data):
714
+ that._initXHRData(o);
715
+ // Add progress listeners for this chunk upload:
716
+ that._initProgressListener(o);
717
+ jqXHR = ((that._trigger('chunksend', null, o) !== false && $.ajax(o)) ||
718
+ that._getXHRPromise(false, o.context))
719
+ .done(function (result, textStatus, jqXHR) {
720
+ ub = that._getUploadedBytes(jqXHR) ||
721
+ (ub + o.chunkSize);
722
+ // Create a progress event if no final progress event
723
+ // with loaded equaling total has been triggered
724
+ // for this chunk:
725
+ if (currentLoaded + o.chunkSize - o._progress.loaded) {
726
+ that._onProgress($.Event('progress', {
727
+ lengthComputable: true,
728
+ loaded: ub - o.uploadedBytes,
729
+ total: ub - o.uploadedBytes
730
+ }), o);
731
+ }
732
+ options.uploadedBytes = o.uploadedBytes = ub;
733
+ o.result = result;
734
+ o.textStatus = textStatus;
735
+ o.jqXHR = jqXHR;
736
+ that._trigger('chunkdone', null, o);
737
+ that._trigger('chunkalways', null, o);
738
+ if (ub < fs) {
739
+ // File upload not yet complete,
740
+ // continue with the next chunk:
741
+ upload();
742
+ } else {
743
+ dfd.resolveWith(
744
+ o.context,
745
+ [result, textStatus, jqXHR]
746
+ );
747
+ }
748
+ })
749
+ .fail(function (jqXHR, textStatus, errorThrown) {
750
+ o.jqXHR = jqXHR;
751
+ o.textStatus = textStatus;
752
+ o.errorThrown = errorThrown;
753
+ that._trigger('chunkfail', null, o);
754
+ that._trigger('chunkalways', null, o);
755
+ dfd.rejectWith(
756
+ o.context,
757
+ [jqXHR, textStatus, errorThrown]
758
+ );
759
+ });
760
+ };
761
+ this._enhancePromise(promise);
762
+ promise.abort = function () {
763
+ return jqXHR.abort();
764
+ };
765
+ upload();
766
+ return promise;
767
+ },
768
+
769
+ _beforeSend: function (e, data) {
770
+ if (this._active === 0) {
771
+ // the start callback is triggered when an upload starts
772
+ // and no other uploads are currently running,
773
+ // equivalent to the global ajaxStart event:
774
+ this._trigger('start');
775
+ // Set timer for global bitrate progress calculation:
776
+ this._bitrateTimer = new this._BitrateTimer();
777
+ // Reset the global progress values:
778
+ this._progress.loaded = this._progress.total = 0;
779
+ this._progress.bitrate = 0;
780
+ }
781
+ // Make sure the container objects for the .response() and
782
+ // .progress() methods on the data object are available
783
+ // and reset to their initial state:
784
+ this._initResponseObject(data);
785
+ this._initProgressObject(data);
786
+ data._progress.loaded = data.loaded = data.uploadedBytes || 0;
787
+ data._progress.total = data.total = this._getTotal(data.files) || 1;
788
+ data._progress.bitrate = data.bitrate = 0;
789
+ this._active += 1;
790
+ // Initialize the global progress values:
791
+ this._progress.loaded += data.loaded;
792
+ this._progress.total += data.total;
793
+ },
794
+
795
+ _onDone: function (result, textStatus, jqXHR, options) {
796
+ var total = options._progress.total,
797
+ response = options._response;
798
+ if (options._progress.loaded < total) {
799
+ // Create a progress event if no final progress event
800
+ // with loaded equaling total has been triggered:
801
+ this._onProgress($.Event('progress', {
802
+ lengthComputable: true,
803
+ loaded: total,
804
+ total: total
805
+ }), options);
806
+ }
807
+ response.result = options.result = result;
808
+ response.textStatus = options.textStatus = textStatus;
809
+ response.jqXHR = options.jqXHR = jqXHR;
810
+ this._trigger('done', null, options);
811
+ },
812
+
813
+ _onFail: function (jqXHR, textStatus, errorThrown, options) {
814
+ var response = options._response;
815
+ if (options.recalculateProgress) {
816
+ // Remove the failed (error or abort) file upload from
817
+ // the global progress calculation:
818
+ this._progress.loaded -= options._progress.loaded;
819
+ this._progress.total -= options._progress.total;
820
+ }
821
+ response.jqXHR = options.jqXHR = jqXHR;
822
+ response.textStatus = options.textStatus = textStatus;
823
+ response.errorThrown = options.errorThrown = errorThrown;
824
+ this._trigger('fail', null, options);
825
+ },
826
+
827
+ _onAlways: function (jqXHRorResult, textStatus, jqXHRorError, options) {
828
+ // jqXHRorResult, textStatus and jqXHRorError are added to the
829
+ // options object via done and fail callbacks
830
+ this._trigger('always', null, options);
831
+ },
832
+
833
+ _onSend: function (e, data) {
834
+ if (!data.submit) {
835
+ this._addConvenienceMethods(e, data);
836
+ }
837
+ var that = this,
838
+ jqXHR,
839
+ aborted,
840
+ slot,
841
+ pipe,
842
+ options = that._getAJAXSettings(data),
843
+ send = function () {
844
+ that._sending += 1;
845
+ // Set timer for bitrate progress calculation:
846
+ options._bitrateTimer = new that._BitrateTimer();
847
+ jqXHR = jqXHR || (
848
+ ((aborted || that._trigger(
849
+ 'send',
850
+ $.Event('send', {delegatedEvent: e}),
851
+ options
852
+ ) === false) &&
853
+ that._getXHRPromise(false, options.context, aborted)) ||
854
+ that._chunkedUpload(options) || $.ajax(options)
855
+ ).done(function (result, textStatus, jqXHR) {
856
+ that._onDone(result, textStatus, jqXHR, options);
857
+ }).fail(function (jqXHR, textStatus, errorThrown) {
858
+ that._onFail(jqXHR, textStatus, errorThrown, options);
859
+ }).always(function (jqXHRorResult, textStatus, jqXHRorError) {
860
+ that._onAlways(
861
+ jqXHRorResult,
862
+ textStatus,
863
+ jqXHRorError,
864
+ options
865
+ );
866
+ that._sending -= 1;
867
+ that._active -= 1;
868
+ if (options.limitConcurrentUploads &&
869
+ options.limitConcurrentUploads > that._sending) {
870
+ // Start the next queued upload,
871
+ // that has not been aborted:
872
+ var nextSlot = that._slots.shift();
873
+ while (nextSlot) {
874
+ if (that._getDeferredState(nextSlot) === 'pending') {
875
+ nextSlot.resolve();
876
+ break;
877
+ }
878
+ nextSlot = that._slots.shift();
879
+ }
880
+ }
881
+ if (that._active === 0) {
882
+ // The stop callback is triggered when all uploads have
883
+ // been completed, equivalent to the global ajaxStop event:
884
+ that._trigger('stop');
885
+ }
886
+ });
887
+ return jqXHR;
888
+ };
889
+ this._beforeSend(e, options);
890
+ if (this.options.sequentialUploads ||
891
+ (this.options.limitConcurrentUploads &&
892
+ this.options.limitConcurrentUploads <= this._sending)) {
893
+ if (this.options.limitConcurrentUploads > 1) {
894
+ slot = $.Deferred();
895
+ this._slots.push(slot);
896
+ pipe = slot.pipe(send);
897
+ } else {
898
+ this._sequence = this._sequence.pipe(send, send);
899
+ pipe = this._sequence;
900
+ }
901
+ // Return the piped Promise object, enhanced with an abort method,
902
+ // which is delegated to the jqXHR object of the current upload,
903
+ // and jqXHR callbacks mapped to the equivalent Promise methods:
904
+ pipe.abort = function () {
905
+ aborted = [undefined, 'abort', 'abort'];
906
+ if (!jqXHR) {
907
+ if (slot) {
908
+ slot.rejectWith(options.context, aborted);
909
+ }
910
+ return send();
911
+ }
912
+ return jqXHR.abort();
913
+ };
914
+ return this._enhancePromise(pipe);
915
+ }
916
+ return send();
917
+ },
918
+
919
+ _onAdd: function (e, data) {
920
+ var that = this,
921
+ result = true,
922
+ options = $.extend({}, this.options, data),
923
+ limit = options.limitMultiFileUploads,
924
+ paramName = this._getParamName(options),
925
+ paramNameSet,
926
+ paramNameSlice,
927
+ fileSet,
928
+ i;
929
+ if (!(options.singleFileUploads || limit) ||
930
+ !this._isXHRUpload(options)) {
931
+ fileSet = [data.files];
932
+ paramNameSet = [paramName];
933
+ } else if (!options.singleFileUploads && limit) {
934
+ fileSet = [];
935
+ paramNameSet = [];
936
+ for (i = 0; i < data.files.length; i += limit) {
937
+ fileSet.push(data.files.slice(i, i + limit));
938
+ paramNameSlice = paramName.slice(i, i + limit);
939
+ if (!paramNameSlice.length) {
940
+ paramNameSlice = paramName;
941
+ }
942
+ paramNameSet.push(paramNameSlice);
943
+ }
944
+ } else {
945
+ paramNameSet = paramName;
946
+ }
947
+ data.originalFiles = data.files;
948
+ $.each(fileSet || data.files, function (index, element) {
949
+ var newData = $.extend({}, data);
950
+ newData.files = fileSet ? element : [element];
951
+ newData.paramName = paramNameSet[index];
952
+ that._initResponseObject(newData);
953
+ that._initProgressObject(newData);
954
+ that._addConvenienceMethods(e, newData);
955
+ result = that._trigger(
956
+ 'add',
957
+ $.Event('add', {delegatedEvent: e}),
958
+ newData
959
+ );
960
+ return result;
961
+ });
962
+ return result;
963
+ },
964
+
965
+ _replaceFileInput: function (input) {
966
+ var inputClone = input.clone(true);
967
+ $('<form></form>').append(inputClone)[0].reset();
968
+ // Detaching allows to insert the fileInput on another form
969
+ // without loosing the file input value:
970
+ input.after(inputClone).detach();
971
+ // Avoid memory leaks with the detached file input:
972
+ $.cleanData(input.unbind('remove'));
973
+ // Replace the original file input element in the fileInput
974
+ // elements set with the clone, which has been copied including
975
+ // event handlers:
976
+ this.options.fileInput = this.options.fileInput.map(function (i, el) {
977
+ if (el === input[0]) {
978
+ return inputClone[0];
979
+ }
980
+ return el;
981
+ });
982
+ // If the widget has been initialized on the file input itself,
983
+ // override this.element with the file input clone:
984
+ if (input[0] === this.element[0]) {
985
+ this.element = inputClone;
986
+ }
987
+ },
988
+
989
+ _handleFileTreeEntry: function (entry, path) {
990
+ var that = this,
991
+ dfd = $.Deferred(),
992
+ errorHandler = function (e) {
993
+ if (e && !e.entry) {
994
+ e.entry = entry;
995
+ }
996
+ // Since $.when returns immediately if one
997
+ // Deferred is rejected, we use resolve instead.
998
+ // This allows valid files and invalid items
999
+ // to be returned together in one set:
1000
+ dfd.resolve([e]);
1001
+ },
1002
+ dirReader;
1003
+ path = path || '';
1004
+ if (entry.isFile) {
1005
+ if (entry._file) {
1006
+ // Workaround for Chrome bug #149735
1007
+ entry._file.relativePath = path;
1008
+ dfd.resolve(entry._file);
1009
+ } else {
1010
+ entry.file(function (file) {
1011
+ file.relativePath = path;
1012
+ dfd.resolve(file);
1013
+ }, errorHandler);
1014
+ }
1015
+ } else if (entry.isDirectory) {
1016
+ dirReader = entry.createReader();
1017
+ dirReader.readEntries(function (entries) {
1018
+ that._handleFileTreeEntries(
1019
+ entries,
1020
+ path + entry.name + '/'
1021
+ ).done(function (files) {
1022
+ dfd.resolve(files);
1023
+ }).fail(errorHandler);
1024
+ }, errorHandler);
1025
+ } else {
1026
+ // Return an empy list for file system items
1027
+ // other than files or directories:
1028
+ dfd.resolve([]);
1029
+ }
1030
+ return dfd.promise();
1031
+ },
1032
+
1033
+ _handleFileTreeEntries: function (entries, path) {
1034
+ var that = this;
1035
+ return $.when.apply(
1036
+ $,
1037
+ $.map(entries, function (entry) {
1038
+ return that._handleFileTreeEntry(entry, path);
1039
+ })
1040
+ ).pipe(function () {
1041
+ return Array.prototype.concat.apply(
1042
+ [],
1043
+ arguments
1044
+ );
1045
+ });
1046
+ },
1047
+
1048
+ _getDroppedFiles: function (dataTransfer) {
1049
+ dataTransfer = dataTransfer || {};
1050
+ var items = dataTransfer.items;
1051
+ if (items && items.length && (items[0].webkitGetAsEntry ||
1052
+ items[0].getAsEntry)) {
1053
+ return this._handleFileTreeEntries(
1054
+ $.map(items, function (item) {
1055
+ var entry;
1056
+ if (item.webkitGetAsEntry) {
1057
+ entry = item.webkitGetAsEntry();
1058
+ if (entry) {
1059
+ // Workaround for Chrome bug #149735:
1060
+ entry._file = item.getAsFile();
1061
+ }
1062
+ return entry;
1063
+ }
1064
+ return item.getAsEntry();
1065
+ })
1066
+ );
1067
+ }
1068
+ return $.Deferred().resolve(
1069
+ $.makeArray(dataTransfer.files)
1070
+ ).promise();
1071
+ },
1072
+
1073
+ _getSingleFileInputFiles: function (fileInput) {
1074
+ fileInput = $(fileInput);
1075
+ var entries = fileInput.prop('webkitEntries') ||
1076
+ fileInput.prop('entries'),
1077
+ files,
1078
+ value;
1079
+ if (entries && entries.length) {
1080
+ return this._handleFileTreeEntries(entries);
1081
+ }
1082
+ files = $.makeArray(fileInput.prop('files'));
1083
+ if (!files.length) {
1084
+ value = fileInput.prop('value');
1085
+ if (!value) {
1086
+ return $.Deferred().resolve([]).promise();
1087
+ }
1088
+ // If the files property is not available, the browser does not
1089
+ // support the File API and we add a pseudo File object with
1090
+ // the input value as name with path information removed:
1091
+ files = [{name: value.replace(/^.*\\/, '')}];
1092
+ } else if (files[0].name === undefined && files[0].fileName) {
1093
+ // File normalization for Safari 4 and Firefox 3:
1094
+ $.each(files, function (index, file) {
1095
+ file.name = file.fileName;
1096
+ file.size = file.fileSize;
1097
+ });
1098
+ }
1099
+ return $.Deferred().resolve(files).promise();
1100
+ },
1101
+
1102
+ _getFileInputFiles: function (fileInput) {
1103
+ if (!(fileInput instanceof $) || fileInput.length === 1) {
1104
+ return this._getSingleFileInputFiles(fileInput);
1105
+ }
1106
+ return $.when.apply(
1107
+ $,
1108
+ $.map(fileInput, this._getSingleFileInputFiles)
1109
+ ).pipe(function () {
1110
+ return Array.prototype.concat.apply(
1111
+ [],
1112
+ arguments
1113
+ );
1114
+ });
1115
+ },
1116
+
1117
+ _onChange: function (e) {
1118
+ var that = this,
1119
+ data = {
1120
+ fileInput: $(e.target),
1121
+ form: $(e.target.form)
1122
+ };
1123
+ this._getFileInputFiles(data.fileInput).always(function (files) {
1124
+ data.files = files;
1125
+ if (that.options.replaceFileInput) {
1126
+ that._replaceFileInput(data.fileInput);
1127
+ }
1128
+ if (that._trigger(
1129
+ 'change',
1130
+ $.Event('change', {delegatedEvent: e}),
1131
+ data
1132
+ ) !== false) {
1133
+ that._onAdd(e, data);
1134
+ }
1135
+ });
1136
+ },
1137
+
1138
+ _onPaste: function (e) {
1139
+ var items = e.originalEvent && e.originalEvent.clipboardData &&
1140
+ e.originalEvent.clipboardData.items,
1141
+ data = {files: []};
1142
+ if (items && items.length) {
1143
+ $.each(items, function (index, item) {
1144
+ var file = item.getAsFile && item.getAsFile();
1145
+ if (file) {
1146
+ data.files.push(file);
1147
+ }
1148
+ });
1149
+ if (this._trigger(
1150
+ 'paste',
1151
+ $.Event('paste', {delegatedEvent: e}),
1152
+ data
1153
+ ) !== false) {
1154
+ this._onAdd(e, data);
1155
+ }
1156
+ }
1157
+ },
1158
+
1159
+ _onDrop: function (e) {
1160
+ e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer;
1161
+ var that = this,
1162
+ dataTransfer = e.dataTransfer,
1163
+ data = {};
1164
+ if (dataTransfer && dataTransfer.files && dataTransfer.files.length) {
1165
+ e.preventDefault();
1166
+ this._getDroppedFiles(dataTransfer).always(function (files) {
1167
+ data.files = files;
1168
+ if (that._trigger(
1169
+ 'drop',
1170
+ $.Event('drop', {delegatedEvent: e}),
1171
+ data
1172
+ ) !== false) {
1173
+ that._onAdd(e, data);
1174
+ }
1175
+ });
1176
+ }
1177
+ },
1178
+
1179
+ _onDragOver: function (e) {
1180
+ e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer;
1181
+ var dataTransfer = e.dataTransfer;
1182
+ if (dataTransfer && $.inArray('Files', dataTransfer.types) !== -1 &&
1183
+ this._trigger(
1184
+ 'dragover',
1185
+ $.Event('dragover', {delegatedEvent: e})
1186
+ ) !== false) {
1187
+ e.preventDefault();
1188
+ dataTransfer.dropEffect = 'copy';
1189
+ }
1190
+ },
1191
+
1192
+ _initEventHandlers: function () {
1193
+ if (this._isXHRUpload(this.options)) {
1194
+ this._on(this.options.dropZone, {
1195
+ dragover: this._onDragOver,
1196
+ drop: this._onDrop
1197
+ });
1198
+ this._on(this.options.pasteZone, {
1199
+ paste: this._onPaste
1200
+ });
1201
+ }
1202
+ if ($.support.fileInput) {
1203
+ this._on(this.options.fileInput, {
1204
+ change: this._onChange
1205
+ });
1206
+ }
1207
+ },
1208
+
1209
+ _destroyEventHandlers: function () {
1210
+ this._off(this.options.dropZone, 'dragover drop');
1211
+ this._off(this.options.pasteZone, 'paste');
1212
+ this._off(this.options.fileInput, 'change');
1213
+ },
1214
+
1215
+ _setOption: function (key, value) {
1216
+ var reinit = $.inArray(key, this._specialOptions) !== -1;
1217
+ if (reinit) {
1218
+ this._destroyEventHandlers();
1219
+ }
1220
+ this._super(key, value);
1221
+ if (reinit) {
1222
+ this._initSpecialOptions();
1223
+ this._initEventHandlers();
1224
+ }
1225
+ },
1226
+
1227
+ _initSpecialOptions: function () {
1228
+ var options = this.options;
1229
+ if (options.fileInput === undefined) {
1230
+ options.fileInput = this.element.is('input[type="file"]') ?
1231
+ this.element : this.element.find('input[type="file"]');
1232
+ } else if (!(options.fileInput instanceof $)) {
1233
+ options.fileInput = $(options.fileInput);
1234
+ }
1235
+ if (!(options.dropZone instanceof $)) {
1236
+ options.dropZone = $(options.dropZone);
1237
+ }
1238
+ if (!(options.pasteZone instanceof $)) {
1239
+ options.pasteZone = $(options.pasteZone);
1240
+ }
1241
+ },
1242
+
1243
+ _getRegExp: function (str) {
1244
+ var parts = str.split('/'),
1245
+ modifiers = parts.pop();
1246
+ parts.shift();
1247
+ return new RegExp(parts.join('/'), modifiers);
1248
+ },
1249
+
1250
+ _isRegExpOption: function (key, value) {
1251
+ return key !== 'url' && $.type(value) === 'string' &&
1252
+ /^\/.*\/[igm]{0,3}$/.test(value);
1253
+ },
1254
+
1255
+ _initDataAttributes: function () {
1256
+ var that = this,
1257
+ options = this.options;
1258
+ // Initialize options set via HTML5 data-attributes:
1259
+ $.each(
1260
+ $(this.element[0].cloneNode(false)).data(),
1261
+ function (key, value) {
1262
+ if (that._isRegExpOption(key, value)) {
1263
+ value = that._getRegExp(value);
1264
+ }
1265
+ options[key] = value;
1266
+ }
1267
+ );
1268
+ },
1269
+
1270
+ _create: function () {
1271
+ this._initDataAttributes();
1272
+ this._initSpecialOptions();
1273
+ this._slots = [];
1274
+ this._sequence = this._getXHRPromise(true);
1275
+ this._sending = this._active = 0;
1276
+ this._initProgressObject(this);
1277
+ this._initEventHandlers();
1278
+ },
1279
+
1280
+ // This method is exposed to the widget API and allows to query
1281
+ // the number of active uploads:
1282
+ active: function () {
1283
+ return this._active;
1284
+ },
1285
+
1286
+ // This method is exposed to the widget API and allows to query
1287
+ // the widget upload progress.
1288
+ // It returns an object with loaded, total and bitrate properties
1289
+ // for the running uploads:
1290
+ progress: function () {
1291
+ return this._progress;
1292
+ },
1293
+
1294
+ // This method is exposed to the widget API and allows adding files
1295
+ // using the fileupload API. The data parameter accepts an object which
1296
+ // must have a files property and can contain additional options:
1297
+ // .fileupload('add', {files: filesList});
1298
+ add: function (data) {
1299
+ var that = this;
1300
+ if (!data || this.options.disabled) {
1301
+ return;
1302
+ }
1303
+ if (data.fileInput && !data.files) {
1304
+ this._getFileInputFiles(data.fileInput).always(function (files) {
1305
+ data.files = files;
1306
+ that._onAdd(null, data);
1307
+ });
1308
+ } else {
1309
+ data.files = $.makeArray(data.files);
1310
+ this._onAdd(null, data);
1311
+ }
1312
+ },
1313
+
1314
+ // This method is exposed to the widget API and allows sending files
1315
+ // using the fileupload API. The data parameter accepts an object which
1316
+ // must have a files or fileInput property and can contain additional options:
1317
+ // .fileupload('send', {files: filesList});
1318
+ // The method returns a Promise object for the file upload call.
1319
+ send: function (data) {
1320
+ if (data && !this.options.disabled) {
1321
+ if (data.fileInput && !data.files) {
1322
+ var that = this,
1323
+ dfd = $.Deferred(),
1324
+ promise = dfd.promise(),
1325
+ jqXHR,
1326
+ aborted;
1327
+ promise.abort = function () {
1328
+ aborted = true;
1329
+ if (jqXHR) {
1330
+ return jqXHR.abort();
1331
+ }
1332
+ dfd.reject(null, 'abort', 'abort');
1333
+ return promise;
1334
+ };
1335
+ this._getFileInputFiles(data.fileInput).always(
1336
+ function (files) {
1337
+ if (aborted) {
1338
+ return;
1339
+ }
1340
+ if (!files.length) {
1341
+ dfd.reject();
1342
+ return;
1343
+ }
1344
+ data.files = files;
1345
+ jqXHR = that._onSend(null, data).then(
1346
+ function (result, textStatus, jqXHR) {
1347
+ dfd.resolve(result, textStatus, jqXHR);
1348
+ },
1349
+ function (jqXHR, textStatus, errorThrown) {
1350
+ dfd.reject(jqXHR, textStatus, errorThrown);
1351
+ }
1352
+ );
1353
+ }
1354
+ );
1355
+ return this._enhancePromise(promise);
1356
+ }
1357
+ data.files = $.makeArray(data.files);
1358
+ if (data.files.length) {
1359
+ return this._onSend(null, data);
1360
+ }
1361
+ }
1362
+ return this._getXHRPromise(false, data && data.context);
1363
+ }
1364
+
1365
+ });
1366
+
1367
+ }));
assets/js/fileupload/jquery.iframe-transport.js ADDED
@@ -0,0 +1,208 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * jQuery Iframe Transport Plugin 1.8.0
3
+ * https://github.com/blueimp/jQuery-File-Upload
4
+ *
5
+ * Copyright 2011, Sebastian Tschan
6
+ * https://blueimp.net
7
+ *
8
+ * Licensed under the MIT license:
9
+ * http://www.opensource.org/licenses/MIT
10
+ */
11
+
12
+ /*jslint unparam: true, nomen: true */
13
+ /*global define, window, document */
14
+
15
+ (function (factory) {
16
+ 'use strict';
17
+ if (typeof define === 'function' && define.amd) {
18
+ // Register as an anonymous AMD module:
19
+ define(['jquery'], factory);
20
+ } else {
21
+ // Browser globals:
22
+ factory(window.jQuery);
23
+ }
24
+ }(function ($) {
25
+ 'use strict';
26
+
27
+ // Helper variable to create unique names for the transport iframes:
28
+ var counter = 0;
29
+
30
+ // The iframe transport accepts four additional options:
31
+ // options.fileInput: a jQuery collection of file input fields
32
+ // options.paramName: the parameter name for the file form data,
33
+ // overrides the name property of the file input field(s),
34
+ // can be a string or an array of strings.
35
+ // options.formData: an array of objects with name and value properties,
36
+ // equivalent to the return data of .serializeArray(), e.g.:
37
+ // [{name: 'a', value: 1}, {name: 'b', value: 2}]
38
+ // options.initialIframeSrc: the URL of the initial iframe src,
39
+ // by default set to "javascript:false;"
40
+ $.ajaxTransport('iframe', function (options) {
41
+ if (options.async) {
42
+ // javascript:false as initial iframe src
43
+ // prevents warning popups on HTTPS in IE6:
44
+ var initialIframeSrc = options.initialIframeSrc || 'javascript:false;',
45
+ form,
46
+ iframe,
47
+ addParamChar;
48
+ return {
49
+ send: function (_, completeCallback) {
50
+ form = $('<form style="display:none;"></form>');
51
+ form.attr('accept-charset', options.formAcceptCharset);
52
+ addParamChar = /\?/.test(options.url) ? '&' : '?';
53
+ // XDomainRequest only supports GET and POST:
54
+ if (options.type === 'DELETE') {
55
+ options.url = options.url + addParamChar + '_method=DELETE';
56
+ options.type = 'POST';
57
+ } else if (options.type === 'PUT') {
58
+ options.url = options.url + addParamChar + '_method=PUT';
59
+ options.type = 'POST';
60
+ } else if (options.type === 'PATCH') {
61
+ options.url = options.url + addParamChar + '_method=PATCH';
62
+ options.type = 'POST';
63
+ }
64
+ // IE versions below IE8 cannot set the name property of
65
+ // elements that have already been added to the DOM,
66
+ // so we set the name along with the iframe HTML markup:
67
+ counter += 1;
68
+ iframe = $(
69
+ '<iframe src="' + initialIframeSrc +
70
+ '" name="iframe-transport-' + counter + '"></iframe>'
71
+ ).bind('load', function () {
72
+ var fileInputClones,
73
+ paramNames = $.isArray(options.paramName) ?
74
+ options.paramName : [options.paramName];
75
+ iframe
76
+ .unbind('load')
77
+ .bind('load', function () {
78
+ var response;
79
+ // Wrap in a try/catch block to catch exceptions thrown
80
+ // when trying to access cross-domain iframe contents:
81
+ try {
82
+ response = iframe.contents();
83
+ // Google Chrome and Firefox do not throw an
84
+ // exception when calling iframe.contents() on
85
+ // cross-domain requests, so we unify the response:
86
+ if (!response.length || !response[0].firstChild) {
87
+ throw new Error();
88
+ }
89
+ } catch (e) {
90
+ response = undefined;
91
+ }
92
+ // The complete callback returns the
93
+ // iframe content document as response object:
94
+ completeCallback(
95
+ 200,
96
+ 'success',
97
+ {'iframe': response}
98
+ );
99
+ // Fix for IE endless progress bar activity bug
100
+ // (happens on form submits to iframe targets):
101
+ $('<iframe src="' + initialIframeSrc + '"></iframe>')
102
+ .appendTo(form);
103
+ window.setTimeout(function () {
104
+ // Removing the form in a setTimeout call
105
+ // allows Chrome's developer tools to display
106
+ // the response result
107
+ form.remove();
108
+ }, 0);
109
+ });
110
+ form
111
+ .prop('target', iframe.prop('name'))
112
+ .prop('action', options.url)
113
+ .prop('method', options.type);
114
+ if (options.formData) {
115
+ $.each(options.formData, function (index, field) {
116
+ $('<input type="hidden"/>')
117
+ .prop('name', field.name)
118
+ .val(field.value)
119
+ .appendTo(form);
120
+ });
121
+ }
122
+ if (options.fileInput && options.fileInput.length &&
123
+ options.type === 'POST') {
124
+ fileInputClones = options.fileInput.clone();
125
+ // Insert a clone for each file input field:
126
+ options.fileInput.after(function (index) {
127
+ return fileInputClones[index];
128
+ });
129
+ if (options.paramName) {
130
+ options.fileInput.each(function (index) {
131
+ $(this).prop(
132
+ 'name',
133
+ paramNames[index] || options.paramName
134
+ );
135
+ });
136
+ }
137
+ // Appending the file input fields to the hidden form
138
+ // removes them from their original location:
139
+ form
140
+ .append(options.fileInput)
141
+ .prop('enctype', 'multipart/form-data')
142
+ // enctype must be set as encoding for IE:
143
+ .prop('encoding', 'multipart/form-data');
144
+ }
145
+ form.submit();
146
+ // Insert the file input fields at their original location
147
+ // by replacing the clones with the originals:
148
+ if (fileInputClones && fileInputClones.length) {
149
+ options.fileInput.each(function (index, input) {
150
+ var clone = $(fileInputClones[index]);
151
+ $(input).prop('name', clone.prop('name'));
152
+ clone.replaceWith(input);
153
+ });
154
+ }
155
+ });
156
+ form.append(iframe).appendTo(document.body);
157
+ },
158
+ abort: function () {
159
+ if (iframe) {
160
+ // javascript:false as iframe src aborts the request
161
+ // and prevents warning popups on HTTPS in IE6.
162
+ // concat is used to avoid the "Script URL" JSLint error:
163
+ iframe
164
+ .unbind('load')
165
+ .prop('src', initialIframeSrc);
166
+ }
167
+ if (form) {
168
+ form.remove();
169
+ }
170
+ }
171
+ };
172
+ }
173
+ });
174
+
175
+ // The iframe transport returns the iframe content document as response.
176
+ // The following adds converters from iframe to text, json, html, xml
177
+ // and script.
178
+ // Please note that the Content-Type for JSON responses has to be text/plain
179
+ // or text/html, if the browser doesn't include application/json in the
180
+ // Accept header, else IE will show a download dialog.
181
+ // The Content-Type for XML responses on the other hand has to be always
182
+ // application/xml or text/xml, so IE properly parses the XML response.
183
+ // See also
184
+ // https://github.com/blueimp/jQuery-File-Upload/wiki/Setup#content-type-negotiation
185
+ $.ajaxSetup({
186
+ converters: {
187
+ 'iframe text': function (iframe) {
188
+ return iframe && $(iframe[0].body).text();
189
+ },
190
+ 'iframe json': function (iframe) {
191
+ return iframe && $.parseJSON($(iframe[0].body).text());
192
+ },
193
+ 'iframe html': function (iframe) {
194
+ return iframe && $(iframe[0].body).html();
195
+ },
196
+ 'iframe xml': function (iframe) {
197
+ var xmlDoc = iframe && iframe[0];
198
+ return xmlDoc && $.isXMLDoc(xmlDoc) ? xmlDoc :
199
+ $.parseXML((xmlDoc.XMLDocument && xmlDoc.XMLDocument.xml) ||
200
+ $(xmlDoc.body).html());
201
+ },
202
+ 'iframe script': function (iframe) {
203
+ return iframe && $.globalEval($(iframe[0].body).text());
204
+ }
205
+ }
206
+ });
207
+
208
+ }));
assets/js/handsontable/handsontable.full.js CHANGED
File without changes
assets/js/handsontable/handsontable.full.min.js CHANGED
File without changes
assets/js/icheck/icheck.min.js ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /*! iCheck v1.0.2 by Damir Sultanov, http://git.io/arlzeA, MIT Licensed */
2
+ (function(f){function A(a,b,d){var c=a[0],g=/er/.test(d)?_indeterminate:/bl/.test(d)?n:k,e=d==_update?{checked:c[k],disabled:c[n],indeterminate:"true"==a.attr(_indeterminate)||"false"==a.attr(_determinate)}:c[g];if(/^(ch|di|in)/.test(d)&&!e)x(a,g);else if(/^(un|en|de)/.test(d)&&e)q(a,g);else if(d==_update)for(var f in e)e[f]?x(a,f,!0):q(a,f,!0);else if(!b||"toggle"==d){if(!b)a[_callback]("ifClicked");e?c[_type]!==r&&q(a,g):x(a,g)}}function x(a,b,d){var c=a[0],g=a.parent(),e=b==k,u=b==_indeterminate,
3
+ v=b==n,s=u?_determinate:e?y:"enabled",F=l(a,s+t(c[_type])),B=l(a,b+t(c[_type]));if(!0!==c[b]){if(!d&&b==k&&c[_type]==r&&c.name){var w=a.closest("form"),p='input[name="'+c.name+'"]',p=w.length?w.find(p):f(p);p.each(function(){this!==c&&f(this).data(m)&&q(f(this),b)})}u?(c[b]=!0,c[k]&&q(a,k,"force")):(d||(c[b]=!0),e&&c[_indeterminate]&&q(a,_indeterminate,!1));D(a,e,b,d)}c[n]&&l(a,_cursor,!0)&&g.find("."+C).css(_cursor,"default");g[_add](B||l(a,b)||"");g.attr("role")&&!u&&g.attr("aria-"+(v?n:k),"true");
4
+ g[_remove](F||l(a,s)||"")}function q(a,b,d){var c=a[0],g=a.parent(),e=b==k,f=b==_indeterminate,m=b==n,s=f?_determinate:e?y:"enabled",q=l(a,s+t(c[_type])),r=l(a,b+t(c[_type]));if(!1!==c[b]){if(f||!d||"force"==d)c[b]=!1;D(a,e,s,d)}!c[n]&&l(a,_cursor,!0)&&g.find("."+C).css(_cursor,"pointer");g[_remove](r||l(a,b)||"");g.attr("role")&&!f&&g.attr("aria-"+(m?n:k),"false");g[_add](q||l(a,s)||"")}function E(a,b){if(a.data(m)){a.parent().html(a.attr("style",a.data(m).s||""));if(b)a[_callback](b);a.off(".i").unwrap();
5
+ f(_label+'[for="'+a[0].id+'"]').add(a.closest(_label)).off(".i")}}function l(a,b,f){if(a.data(m))return a.data(m).o[b+(f?"":"Class")]}function t(a){return a.charAt(0).toUpperCase()+a.slice(1)}function D(a,b,f,c){if(!c){if(b)a[_callback]("ifToggled");a[_callback]("ifChanged")[_callback]("if"+t(f))}}var m="iCheck",C=m+"-helper",r="radio",k="checked",y="un"+k,n="disabled";_determinate="determinate";_indeterminate="in"+_determinate;_update="update";_type="type";_click="click";_touch="touchbegin.i touchend.i";
6
+ _add="addClass";_remove="removeClass";_callback="trigger";_label="label";_cursor="cursor";_mobile=/ipad|iphone|ipod|android|blackberry|windows phone|opera mini|silk/i.test(navigator.userAgent);f.fn[m]=function(a,b){var d='input[type="checkbox"], input[type="'+r+'"]',c=f(),g=function(a){a.each(function(){var a=f(this);c=a.is(d)?c.add(a):c.add(a.find(d))})};if(/^(check|uncheck|toggle|indeterminate|determinate|disable|enable|update|destroy)$/i.test(a))return a=a.toLowerCase(),g(this),c.each(function(){var c=
7
+ f(this);"destroy"==a?E(c,"ifDestroyed"):A(c,!0,a);f.isFunction(b)&&b()});if("object"!=typeof a&&a)return this;var e=f.extend({checkedClass:k,disabledClass:n,indeterminateClass:_indeterminate,labelHover:!0},a),l=e.handle,v=e.hoverClass||"hover",s=e.focusClass||"focus",t=e.activeClass||"active",B=!!e.labelHover,w=e.labelHoverClass||"hover",p=(""+e.increaseArea).replace("%","")|0;if("checkbox"==l||l==r)d='input[type="'+l+'"]';-50>p&&(p=-50);g(this);return c.each(function(){var a=f(this);E(a);var c=this,
8
+ b=c.id,g=-p+"%",d=100+2*p+"%",d={position:"absolute",top:g,left:g,display:"block",width:d,height:d,margin:0,padding:0,background:"#fff",border:0,opacity:0},g=_mobile?{position:"absolute",visibility:"hidden"}:p?d:{position:"absolute",opacity:0},l="checkbox"==c[_type]?e.checkboxClass||"icheckbox":e.radioClass||"i"+r,z=f(_label+'[for="'+b+'"]').add(a.closest(_label)),u=!!e.aria,y=m+"-"+Math.random().toString(36).substr(2,6),h='<div class="'+l+'" '+(u?'role="'+c[_type]+'" ':"");u&&z.each(function(){h+=
9
+ 'aria-labelledby="';this.id?h+=this.id:(this.id=y,h+=y);h+='"'});h=a.wrap(h+"/>")[_callback]("ifCreated").parent().append(e.insert);d=f('<ins class="'+C+'"/>').css(d).appendTo(h);a.data(m,{o:e,s:a.attr("style")}).css(g);e.inheritClass&&h[_add](c.className||"");e.inheritID&&b&&h.attr("id",m+"-"+b);"static"==h.css("position")&&h.css("position","relative");A(a,!0,_update);if(z.length)z.on(_click+".i mouseover.i mouseout.i "+_touch,function(b){var d=b[_type],e=f(this);if(!c[n]){if(d==_click){if(f(b.target).is("a"))return;
10
+ A(a,!1,!0)}else B&&(/ut|nd/.test(d)?(h[_remove](v),e[_remove](w)):(h[_add](v),e[_add](w)));if(_mobile)b.stopPropagation();else return!1}});a.on(_click+".i focus.i blur.i keyup.i keydown.i keypress.i",function(b){var d=b[_type];b=b.keyCode;if(d==_click)return!1;if("keydown"==d&&32==b)return c[_type]==r&&c[k]||(c[k]?q(a,k):x(a,k)),!1;if("keyup"==d&&c[_type]==r)!c[k]&&x(a,k);else if(/us|ur/.test(d))h["blur"==d?_remove:_add](s)});d.on(_click+" mousedown mouseup mouseover mouseout "+_touch,function(b){var d=
11
+ b[_type],e=/wn|up/.test(d)?t:v;if(!c[n]){if(d==_click)A(a,!1,!0);else{if(/wn|er|in/.test(d))h[_add](e);else h[_remove](e+" "+t);if(z.length&&B&&e==v)z[/ut|nd/.test(d)?_remove:_add](w)}if(_mobile)b.stopPropagation();else return!1}})})}})(window.jQuery||window.Zepto);
assets/js/jquery-datatables/FixedHeader.js CHANGED
File without changes
assets/js/jquery-datatables/jquery.dataTables.min.js CHANGED
File without changes
assets/js/jquery-datatables/jquery.dataTables.rowGrouping.js CHANGED
File without changes
assets/js/jquery-datatables/jquery.dataTables.rowGrouping.min.js CHANGED
File without changes
assets/js/jquery-datatables/media/swf/copy_cvs_xls_pdf.swf CHANGED
File without changes
assets/js/jsrender/jsrender.min.js CHANGED
@@ -1,6 +1,6 @@
1
  /*! JsRender v1.0.0-beta: http://github.com/BorisMoore/jsrender and http://jsviews.com/jsviews
2
  informal pre V1.0 commit counter: 56 */
3
- (function(n,t,i){"use strict";function ot(n){return n}function nr(n){return n}function bt(n){s._dbgMode=n;yt=n?"Unavailable (nested view): use #getIndex()":"";it("dbg",si.dbg=tt.dbg=n?nr:ot)}function st(n){this.name=(u.link?"JsViews":"JsRender")+" Error";this.message=n||this.name}function f(n,t){for(var i in t)n[i]=t[i];return n}function d(n){return typeof n=="function"}function kt(n,t,i){return(!o.rTag||n)&&(p=n?n.charAt(0):p,w=n?n.charAt(1):w,h=t?t.charAt(0):h,v=t?t.charAt(1):v,nt=i||nt,n="\\"+p+"(\\"+nt+")?\\"+w,t="\\"+h+"\\"+v,y="(?:(?:(\\w+(?=[\\/\\s\\"+h+"]))|(?:(\\w+)?(:)|(>)|!--((?:[^-]|-(?!-))*)--|(\\*)))\\s*((?:[^\\"+h+"]|\\"+h+"(?!\\"+v+"))*?)",o.rTag=y+")",y=new RegExp(n+y+"(\\/)?|(?:\\/(\\w+)))"+t,"g"),vt=new RegExp("<.*>|([^\\\\]|^)[{}]|"+n+".*"+t)),[p,w,h,v,nt]}function tr(n,t){t||(t=n,n=i);var e,f,o,u,r=this,s=!t||t==="root";if(n){if(u=r.type===t?r:i,!u)if(e=r.views,r._.useKey){for(f in e)if(u=e[f].get(n,t))break}else for(f=0,o=e.length;!u&&f<o;f++)u=e[f].get(n,t)}else if(s)while(r.parent.parent)u=r=r.parent;else while(r&&!u)u=r.type===t?r:i,r=r.parent;return u}function dt(){var n=this.get("item");return n?n.index:i}function gt(){return this.index}function ir(t){var u,e=this,o=e.linkCtx,r=(e.ctx||{})[t];return r===i&&o&&o.ctx&&(r=o.ctx[t]),r===i&&(r=si[t]),r&&d(r)&&!r._wrp&&(u=function(){return r.apply(!this||this===n?e:this,arguments)},u._wrp=1,f(u,r)),u||r}function rr(n,t,u){var f,e,c,s=+u===u&&u,h=t.linkCtx;if(s&&(u=(s=t.tmpl.bnds[s-1])(t.data,t,r)),e=u.args[0],n||s){f=h&&h.tag;f||(f={_:{inline:!h,bnd:s},tagName:":",cvt:n,flow:!0,tagCtx:u,_is:"tag"},h&&(h.tag=f,f.linkCtx=h,u.ctx=a(u.ctx,h.view.ctx)),o._lnk(f));for(c in u.props)ft.test(c)&&(f[c]=u.props[c]);u.view=t;f.ctx=u.ctx||{};delete u.ctx;t._.tag=f;e=ht(f,f.convert||n!=="true"&&n)[0];e=s&&t._.onRender?t._.onRender(e,t,s):e;t._.tag=i}return e!=i?e:""}function ht(n,t){var r=n.tagCtx,u=r.view,i=r.args;return t=t&&(""+t===t?u.getRsc("converters",t)||c("Unknown converter: '"+t+"'"):t),i=!i.length&&!r.index?[u.data]:t?i.slice():i,t&&(t.depends&&(n.depends=o.getDeps(n.depends,n,t.depends,t)),i[0]=t.apply(n,i)),i}function ur(n,t){for(var f,e,u=this;f===i&&u;)e=u.tmpl[n],f=e&&e[t],u=u.parent;return f||r[n][t]}function fr(n,t,u,s,h){var lt,l,pt,at,et,y,vt,d,v,ot,rt,wt,g,yt,bt,k,p,st,it,kt,nt="",ct=+s===s&&s,w=t.linkCtx||0,ut=t.ctx,dt=u||t.tmpl;for(n._is==="tag"&&(l=n,n=l.tagName,s=l.tagCtxs),l=l||w.tag,ct&&(s=(wt=dt.bnds[ct-1])(t.data,t,r)),vt=s.length,y=0;y<vt;y++){if(y||u&&l||(g=t.getRsc("tags",n)||c("Unknown tag: {{"+n+"}}")),v=s[y],w.tag||(rt=v.tmpl,rt=v.content=rt&&dt.tmpls[rt-1],f(v,{tmpl:(l?l:g).template||rt,render:ui,index:y,view:t,ctx:a(v.ctx,ut)})),(u=v.props.tmpl)&&(u=""+u===u?t.getRsc("templates",u)||e(u):u,v.tmpl=u),l||(g._ctr?(l=new g._ctr,yt=!!l.init,l.attr=l.attr||g.attr||i):o._lnk(l={render:g.render}),l._={inline:!w},w&&(w.attr=l.attr=w.attr||l.attr,w.tag=l,l.linkCtx=w),(l._.bnd=wt||w.fn)?l._.arrVws={}:l.dataBoundOnly&&c("{^{"+n+"}} tag must be data-bound"),l.tagName=n,l.parent=et=ut&&ut.tag,l._is="tag",l._def=g,l.tagCtxs=s),!y)for(st in it=v.props)ft.test(st)&&(l[st]=it[st]);v.tag=l;l.dataMap&&l.tagCtxs&&(v.map=l.tagCtxs[y].map);l.flow||(ot=v.ctx=v.ctx||{},pt=l.parents=ot.parentTags=ut&&a(ot.parentTags,ut.parentTags)||{},et&&(pt[et.tagName]=et),ot.tag=l)}for(t._.tag=l,l.rendering={},y=0;y<vt;y++)v=l.tagCtx=l.tagCtxs[y],it=v.props,p=ht(l,l.convert),(bt=it.dataMap||l.dataMap)&&(p.length||it.dataMap)&&(k=v.map,(!k||k.src!==p[0]||h)&&(k&&k.src&&k.unmap(),k=v.map=bt.map(p[0],it)),p=[k.tgt]),l.ctx=v.ctx,!y&&yt&&(kt=l.template,l.init(v,w,l.ctx),yt=i,l.template!==kt&&(l._.tmpl=l.template)),d=i,lt=l.render,(lt=l.render)&&(d=lt.apply(l,p)),p=p.length?p:[t],d=d!==i?d:v.render(p[0],!0)||(h?i:""),nt=nt?nt+(d||""):d;return delete l.rendering,l.tagCtx=l.tagCtxs[0],l.ctx=l.tagCtx.ctx,l._.inline&&(at=l.attr)&&at!==b&&(nt=at==="text"?tt.html(nt):""),ct&&t._.onRender?t._.onRender(nt,t,ct):nt}function g(n,t,i,r,u,f,e,o){var a,h,c,s=this,v=t==="array",l={key:0,useKey:v?0:1,id:""+gi++,onRender:o,bnds:{}};s.data=r;s.tmpl=u;s.content=e;s.views=v?[]:{};s.parent=i;s.type=t;s._=l;s.linked=!!o;i?(a=i.views,h=i._,h.useKey?(a[l.key="_"+h.useKey++]=s,s.index=yt,s.getIndex=dt,c=h.tag,l.bnd=v&&(!c||!!c._.bnd&&c)):a.splice(l.key=s.index=f,0,s),s.ctx=n||i.ctx):s.ctx=n}function er(n){var i,r,t,u,e,f,s;for(i in k)if(e=k[i],(f=e.compile)&&(r=n[i+"s"]))for(t in r)u=r[t]=f(t,r[t],n),u&&(s=o.onStore[i])&&s(t,u,f)}function or(n,t,r){var o,u;return d(t)?t={depends:t.depends,render:t}:(t.baseTag&&(t.flow=!!t.flow,t=f(f({},t.baseTag),t)),(u=t.template)!==i&&(t.template=""+u===u?e[u]||e(u):u),t.init!==!1&&(o=t._ctr=function(){},(o.prototype=t).constructor=o)),r&&(t._parentTmpl=r),t}function ni(r,u,f,o){function c(u){if(""+u===u||u.nodeType>0){try{h=u.nodeType>0?u:!vt.test(u)&&t&&t(n.document).find(u)[0]}catch(s){}return h&&(u=e[r=r||h.getAttribute(et)],u||(r=r||"_"+di++,h.setAttribute(et,r),u=e[r]=ni(r,h.innerHTML,f,o)),h=i),u}}var s,h;return u=u||"",s=c(u),o=o||(u.markup?u:{}),o.tmplName=r,f&&(o._parentTmpl=f),!s&&u.markup&&(s=c(u.markup))&&s.fn&&(s.debug!==u.debug||s.allowCode!==u.allowCode)&&(s=s.markup),s!==i?(r&&!f&&(wt[r]=function(){return u.render.apply(u,arguments)}),s.fn||u.fn?s.fn&&(u=r&&r!==s.tmplName?a(o,s):s):(u=ii(s,o),lt(s.replace(vi,"\\$&"),u)),er(o),u):void 0}function ti(n){function t(t,i){this.tgt=n.getTgt(t,i)}return d(n)&&(n={getTgt:n}),n.baseMap&&(n=f(f({},n.baseMap),n)),n.map=function(n,i){return new t(n,i)},n}function ii(n,t){var i,e=s.wrapMap||{},r=f({markup:n,tmpls:[],links:{},tags:{},bnds:[],_is:"template",render:ri},t);return t.htmlTag||(i=wi.exec(n),r.htmlTag=i?i[1].toLowerCase():""),i=e[r.htmlTag],i&&i!==e.div&&(r.markup=u.trim(r.markup)),r}function sr(n,t){function u(e,s,h){var v,c,l,a;if(e&&typeof e=="object"&&!e.nodeType&&!e.markup&&!e.getTgt){for(l in e)u(l,e[l],s);return r}return s===i&&(s=e,e=i),e&&""+e!==e&&(h=s,s=e,e=i),a=h?h[f]=h[f]||{}:u,c=t.compile,s===null?e&&delete a[e]:(s=c?s=c(e,s,h):s,e&&(a[e]=s)),c&&s&&(s._is=n),s&&(v=o.onStore[n])&&v(e,s,c),s}var f=n+"s";r[f]=u;k[n]=t}function hr(n,t){var i=this.jquery&&(this[0]||c('Unknown template: "'+this.selector+'"')),r=i.getAttribute(et);return ri.call(r?e[r]:e(i),n,t)}function ct(n,t,i){if(s._dbgMode)try{return n.fn(t,i,r)}catch(u){return c(u,i)}return n.fn(t,i,r)}function ri(n,t,i,r,f,e){var o=this;return!r&&o.fn._nvw&&!u.isArray(n)?ct(o,n,{tmpl:o}):ui.call(o,n,t,i,r,f,e)}function ui(n,t,r,f,o,s){var y,ut,d,l,nt,tt,it,p,v,rt,w,ft,h,et,c=this,k="";if(!!t===t&&(r=t,t=i),o===!0&&(it=!0,o=0),c.tag?(p=c,c=c.tag,rt=c._,ft=c.tagName,h=rt.tmpl||p.tmpl,et=c.attr&&c.attr!==b,t=a(t,c.ctx),v=p.content,p.props.link===!1&&(t=t||{},t.link=!1),f=f||p.view,n=arguments.length?n:f):h=c,h&&(!f&&n&&n._is==="view"&&(f=n),f&&(v=v||f.content,s=s||f._.onRender,n===f&&(n=f.data),t=a(t,f.ctx)),f&&f.data!==i||((t=t||{}).root=n),h.fn||(h=e[h]||e(h)),h)){if(s=(t&&t.link)!==!1&&!et&&s,w=s,s===!0&&(w=i,s=f._.onRender),t=h.helpers?a(h.helpers,t):t,u.isArray(n)&&!r)for(l=it?f:o!==i&&f||new g(t,"array",f,n,h,o,v,s),y=0,ut=n.length;y<ut;y++)d=n[y],nt=new g(t,"item",l,d,h,(o||0)+y,v,s),tt=ct(h,d,nt),k+=l._.onRender?l._.onRender(tt,nt):tt;else(f||!h.fn._nvw)&&(l=it?f:new g(t,ft||"data",f,n,h,o,v,s),rt&&!c.flow&&(l.tag=c)),k+=ct(h,n,l);return w?w(k,l):k}return""}function c(n,t,i){var r=s.onError(n,t,i);if(""+n===n)throw new o.Err(r);return!t.linkCtx&&t.linked?tt.html(r):r}function l(n){c("Syntax error\n"+n)}function lt(n,t,i,r){function k(t){t-=f;t&&h.push(n.substr(f,t).replace(ut,"\\n"))}function c(t){t&&l('Unmatched or missing tag: "{{/'+t+'}}" in template:\n'+n)}function d(e,o,v,y,p,d,nt,tt,it,rt,et,ot){d&&(p=":",y=b);rt=rt||i;var st=(o||i)&&[],ct="",lt="",at="",vt="",yt="",pt="",wt="",bt="",ht=!rt&&!p&&!nt;v=v||(it=it||"#data",p);k(ot);f=ot+e.length;tt?g&&h.push(["*","\n"+it.replace(ai,"$1")+"\n"]):v?(v==="else"&&(pi.test(it)&&l('for "{{else if expr}}" use "{{else expr}}"'),st=u[7],u[8]=n.substring(u[8],ot),u=s.pop(),h=u[2],ht=!0),it&&oi(it.replace(ut," "),st,t).replace(yi,function(n,t,i,r,u,f,e,o){return e?(lt+=f+",",vt+="'"+o+"',"):i?(at+=r+f+",",pt+=r+"'"+o+"',"):t?wt+=f:(u==="trigger"&&(bt+=f),ct+=r+f+",",yt+=r+"'"+o+"',",w=w||ft.test(u)),""}).slice(0,-1),a=[v,y||!!r||w||"",ht&&[],fi(vt,yt,pt),fi(lt,ct,at),wt,bt,st||0],h.push(a),ht&&(s.push(u),u=a,u[8]=f)):et&&(c(et!==u[0]&&u[0]!=="else"&&et),u[8]=n.substring(u[8],ot),u=s.pop());c(!u&&et);h=u[2]}var o,a,w,g=t&&t.allowCode,e=[],f=0,s=[],h=e,u=[,,e];return i&&(n=p+n+v),c(s[0]&&s[0][2].pop()[0]),n.replace(y,d),k(n.length),(f=e[e.length-1])&&c(""+f!==f&&+f[8]===f[8]&&f[0]),i?(o=at(e,n,i),o.paths=e[0][7]):o=at(e,t),o._nvw&&(o._nvw=!/[~#]/.test(n)),o}function fi(n,t,i){return[n.slice(0,-1),t.slice(0,-1),i.slice(0,-1)]}function ei(n,t){return"\n\t"+(t?t+":{":"")+"args:["+n[0]+"]"+(n[1]||!t?",\n\tprops:{"+n[1]+"}":"")+(n[2]?",\n\tctx:{"+n[2]+"}":"")}function oi(n,t,i){function p(p,b,k,d,g,nt,tt,it,rt,ut,ft,et,ot,st,ht,ct,at,vt,yt,pt){function dt(n,i,r,f,e,s,h,l){if(r&&(t&&(u==="linkTo"&&(o=t._jsvto=t._jsvto||[],o.push(g)),(!u||c)&&t.push(g.slice(i.length))),r!==".")){var a=(f?'view.hlp("'+f+'")':e?"view":"data")+(l?(s?"."+s:f?"":e?"":"."+r)+(h||""):(l=f?"":e?s||"":r,""));return a=a+(l?"."+l:""),i+(a.slice(0,9)==="view.data"?a.slice(5):a)}return n}nt=nt||"";k=k||b||et;g=g||rt;ut=ut||at||"";var bt,kt,wt;if(!tt||e||f)return t&&ct&&!e&&!f&&(!u||c||o)&&(bt=y[r],pt.length-1>yt-bt&&(bt=pt.slice(bt,yt+1),ct=w+":"+bt+h,wt=v[ct],wt||(v[ct]=1,v[ct]=wt=lt(ct,i||t,!0),wt.paths.push({_jsvOb:wt})),wt!==1&&(o||t).push({_jsvOb:wt}))),e?(e=!ot,e?p:'"'):f?(f=!st,f?p:'"'):(k?(r++,y[r]=yt++,k):"")+(vt?r?"":(s=pt.slice(s,yt),u?(u=c=o=!1,"\b"):"\b,")+s+(s=yt+p.length,"\b"):it?(r&&l(n),u=g,c=d,s=yt+p.length,g+":"):g?g.split("^").join(".").replace(ci,dt)+(ut?(a[++r]=!0,g.charAt(0)!=="."&&(y[r]=yt),kt?"":ut):nt):nt?nt:ht?(a[r--]=!1,ht)+(ut?(a[++r]=!0,ut):""):ft?(a[r]||l(n),","):b?"":(e=ot,f=st,'"'));l(n)}var u,o,c,f,e,s=0,v=i?i.links:t&&(t.links=t.links||{}),a={},y={0:-1},r=0;return(n+(i?" ":"")).replace(/\)\^/g,").").replace(li,p)}function at(n,i,r){var y,f,e,c,d,ht,ct,bt,lt,g,rt,p,o,ft,et,v,nt,w,tt,vt,k,yt,pt,ot,s,a,st,wt,h=0,u="",it={},kt=n.length;for(""+i===i?(v=r?'data-link="'+i.replace(ut," ").slice(1,-1)+'"':i,i=0):(v=i.tmplName||"unnamed",i.allowCode&&(it.allowCode=!0),i.debug&&(it.debug=!0),p=i.bnds,et=i.tmpls),y=0;y<kt;y++)if(f=n[y],""+f===f)u+='\n+"'+f+'"';else if(e=f[0],e==="*")u+=";\n"+f[1]+"\nret=ret";else{if(c=f[1],tt=f[2],d=ei(f[3],"params")+"},"+ei(ft=f[4]),a=f[5],wt=f[6],vt=f[8],(pt=e==="else")||(h=0,p&&(o=f[7])&&(h=p.push(o))),(ot=e===":")?c&&(e=c===b?">":c+e):(tt&&(nt=ii(vt,it),nt.tmplName=v+"/"+e,at(tt,nt),et.push(nt)),pt||(w=e,yt=u,u=""),k=n[y+1],k=k&&k[0]==="else"),st=a?";\ntry{\nret+=":"\n+",ot&&(o||wt||c&&c!==b)){if(s="return {"+d+"};",a&&(s="try {\n"+s+"\n}catch(e){return {error: j._err(e,view,"+a+")}}\n"),s=new Function("data,view,j,u"," // "+v+" "+h+" "+e+"\n"+s),s.paths=o,s._tag=e,r)return s;rt=1}if(u+=ot?(r?(a?"\ntry{\n":"")+"return ":st)+(rt?(rt=0,g=lt=!0,'c("'+c+'",view,'+(o?(p[h-1]=s,h):"{"+d+"}")+")"):e===">"?(ct=!0,"h("+ft[0]+")"):(bt=!0,"((v="+ft[0]+')!=null?v:"")')):(g=ht=!0,"\n{view:view,tmpl:"+(tt?et.length:"0")+","+d+"},"),w&&!k){if(u="["+u.slice(0,-1)+"]",(r||o)&&(u=new Function("data,view,j,u"," // "+v+" "+h+" "+w+"\nreturn "+u+";"),o&&((p[h-1]=u).paths=o),u._tag=e,r))return u;u=yt+st+'t("'+w+'",view,this,'+(h||u)+")";o=0;w=0}a&&(g=!0,u+=";\n}catch(e){ret"+(r?"urn ":"+=")+"j._err(e,view,"+a+");}\n"+(r?"":"ret=ret"))}u="// "+v+"\nj=j||"+(t?"jQuery.":"jsviews.")+"views;var v"+(ht?",t=j._tag":"")+(lt?",c=j._cnvt":"")+(ct?",h=j.converters.html":"")+(r?";\n":',ret=""\n')+(it.debug?"debugger;":"")+u+(r?"\n":";\nreturn ret;");try{u=new Function("data,view,j,u",u)}catch(dt){l("Compiled template code:\n\n"+u+'\n: "'+dt.message+'"')}return i&&(i.fn=u),g||(u._nvw=!0),u}function a(n,t){return n&&n!==t?t?f(f({},t),n):n:t&&f({},t)}function cr(n){return pt[n]||(pt[n]="&#"+n.charCodeAt(0)+";")}function lr(n){var i,t,r=[];if(typeof n=="object")for(i in n)t=n[i],t&&t.toJSON&&!t.toJSON()||d(t)||r.push({key:i,prop:t});return r}function hi(n){return n!=null?bi.test(n)&&(""+n).replace(ki,cr)||n:""}if((!t||!t.render)&&!n.jsviews){var u,rt,y,vt,yt,p="{",w="{",h="}",v="}",nt="^",ci=/^(!*?)(?:null|true|false|\d[\d.]*|([\w$]+|\.|~([\w$]+)|#(view|([\w$]+))?)([\w$.^]*?)(?:[.[^]([\w$]+)\]?)?)$/g,li=/(\()(?=\s*\()|(?:([([])\s*)?(?:(\^?)(!*?[#~]?[\w$.^]+)?\s*((\+\+|--)|\+|-|&&|\|\||===|!==|==|!=|<=|>=|[<>%*:?\/]|(=))\s*|(!*?[#~]?[\w$.^]+)([([])?)|(,\s*)|(\(?)\\?(?:(')|("))|(?:\s*(([)\]])(?=\s*\.|\s*\^|\s*$)|[)\]])([([]?))|(\s+)/g,ut=/[ \t]*(\r\n|\n|\r)/g,ai=/\\(['"])/g,vi=/['"\\]/g,yi=/(?:\x08|^)(onerror:)?(?:(~?)(([\w$]+):)?([^\x08]+))\x08(,)?([^\x08]+)/gi,pi=/^if\s/,wi=/<(\w+)[>\s]/,bi=/[\x00`><\"'&]/,ft=/^on[A-Z]|^convert(Back)?$/,ki=/[\x00`><"'&]/g,di=0,gi=0,pt={"&":"&amp;","<":"&lt;",">":"&gt;","\x00":"&#0;","'":"&#39;",'"':"&#34;","`":"&#96;"},b="html",et="data-jsv-tmpl",wt={},k={template:{compile:ni},tag:{compile:or},helper:{},converter:{}},r={jsviews:"v1.0.0-beta",settings:function(n){f(s,n);bt(s._dbgMode);s.jsv&&s.jsv()},sub:{View:g,Err:st,tmplFn:lt,cvt:ht,parse:oi,extend:f,syntaxErr:l,onStore:{},_lnk:ot},map:ti,_cnvt:rr,_tag:fr,_err:c};(st.prototype=new Error).constructor=st;dt.depends=function(){return[this.get("item"),"index"]};gt.depends=function(){return["index"]};g.prototype={get:tr,getIndex:gt,getRsc:ur,hlp:ir,_is:"view"};for(rt in k)sr(rt,k[rt]);var e=r.templates,tt=r.converters,si=r.helpers,it=r.tags,o=r.sub,s=r.settings;t?(u=t,u.fn.render=hr,u.observable&&(f(o,u.views.sub),r.map=u.views.map)):(u=n.jsviews={},u.isArray=Array&&Array.isArray||function(n){return Object.prototype.toString.call(n)==="[object Array]"});u.render=wt;u.views=r;u.templates=e=r.templates;s({debugMode:bt,delimiters:kt,onError:function(n,t,r){return t&&(n=r===i?"{Error: "+n+"}":d(r)?r(n,t):r),n==i?"":n},_dbgMode:!0});it({"else":function(){},"if":{render:function(n){var t=this;return t.rendering.done||!n&&(arguments.length||!t.tagCtx.index)?"":(t.rendering.done=!0,t.selected=t.tagCtx.index,t.tagCtx.render(t.tagCtx.view,!0))},onUpdate:function(n,t,i){for(var r,f,u=0;(r=this.tagCtxs[u])&&r.args.length;u++)if(r=r.args[0],f=!r!=!i[u].args[0],!this.convert&&!!r||f)return f;return!1},flow:!0},"for":{render:function(n){var f,t=this,r=t.tagCtx,e="",o=0;return t.rendering.done||((f=!arguments.length)&&(n=r.view.data),n!==i&&(e+=r.render(n,f),o+=u.isArray(n)?n.length:1),(t.rendering.done=o)&&(t.selected=r.index)),e},flow:!0},include:{flow:!0},"*":{render:ot,flow:!0}});it("props",{baseTag:it["for"],dataMap:ti(lr)});tt({html:hi,attr:hi,url:function(n){return n!=i?encodeURI(""+n):n===null?n:""}});kt()}})(this,this.jQuery);
4
- /*
5
- //# sourceMappingURL=jsrender.min.js.map
6
  */
1
  /*! JsRender v1.0.0-beta: http://github.com/BorisMoore/jsrender and http://jsviews.com/jsviews
2
  informal pre V1.0 commit counter: 56 */
3
+ (function(n,t,i){"use strict";function ot(n){return n}function nr(n){return n}function bt(n){s._dbgMode=n;yt=n?"Unavailable (nested view): use #getIndex()":"";it("dbg",si.dbg=tt.dbg=n?nr:ot)}function st(n){this.name=(u.link?"JsViews":"JsRender")+" Error";this.message=n||this.name}function f(n,t){for(var i in t)n[i]=t[i];return n}function d(n){return typeof n=="function"}function kt(n,t,i){return(!o.rTag||n)&&(p=n?n.charAt(0):p,w=n?n.charAt(1):w,h=t?t.charAt(0):h,v=t?t.charAt(1):v,nt=i||nt,n="\\"+p+"(\\"+nt+")?\\"+w,t="\\"+h+"\\"+v,y="(?:(?:(\\w+(?=[\\/\\s\\"+h+"]))|(?:(\\w+)?(:)|(>)|!--((?:[^-]|-(?!-))*)--|(\\*)))\\s*((?:[^\\"+h+"]|\\"+h+"(?!\\"+v+"))*?)",o.rTag=y+")",y=new RegExp(n+y+"(\\/)?|(?:\\/(\\w+)))"+t,"g"),vt=new RegExp("<.*>|([^\\\\]|^)[{}]|"+n+".*"+t)),[p,w,h,v,nt]}function tr(n,t){t||(t=n,n=i);var e,f,o,u,r=this,s=!t||t==="root";if(n){if(u=r.type===t?r:i,!u)if(e=r.views,r._.useKey){for(f in e)if(u=e[f].get(n,t))break}else for(f=0,o=e.length;!u&&f<o;f++)u=e[f].get(n,t)}else if(s)while(r.parent.parent)u=r=r.parent;else while(r&&!u)u=r.type===t?r:i,r=r.parent;return u}function dt(){var n=this.get("item");return n?n.index:i}function gt(){return this.index}function ir(t){var u,e=this,o=e.linkCtx,r=(e.ctx||{})[t];return r===i&&o&&o.ctx&&(r=o.ctx[t]),r===i&&(r=si[t]),r&&d(r)&&!r._wrp&&(u=function(){return r.apply(!this||this===n?e:this,arguments)},u._wrp=1,f(u,r)),u||r}function rr(n,t,u){var f,e,c,s=+u===u&&u,h=t.linkCtx;if(s&&(u=(s=t.tmpl.bnds[s-1])(t.data,t,r)),e=u.args[0],n||s){f=h&&h.tag;f||(f={_:{inline:!h,bnd:s},tagName:":",cvt:n,flow:!0,tagCtx:u,_is:"tag"},h&&(h.tag=f,f.linkCtx=h,u.ctx=a(u.ctx,h.view.ctx)),o._lnk(f));for(c in u.props)ft.test(c)&&(f[c]=u.props[c]);u.view=t;f.ctx=u.ctx||{};delete u.ctx;t._.tag=f;e=ht(f,f.convert||n!=="true"&&n)[0];e=s&&t._.onRender?t._.onRender(e,t,s):e;t._.tag=i}return e!=i?e:""}function ht(n,t){var r=n.tagCtx,u=r.view,i=r.args;return t=t&&(""+t===t?u.getRsc("converters",t)||c("Unknown converter: '"+t+"'"):t),i=!i.length&&!r.index?[u.data]:t?i.slice():i,t&&(t.depends&&(n.depends=o.getDeps(n.depends,n,t.depends,t)),i[0]=t.apply(n,i)),i}function ur(n,t){for(var f,e,u=this;f===i&&u;)e=u.tmpl[n],f=e&&e[t],u=u.parent;return f||r[n][t]}function fr(n,t,u,s,h){var lt,l,pt,at,et,y,vt,d,v,ot,rt,wt,g,yt,bt,k,p,st,it,kt,nt="",ct=+s===s&&s,w=t.linkCtx||0,ut=t.ctx,dt=u||t.tmpl;for(n._is==="tag"&&(l=n,n=l.tagName,s=l.tagCtxs),l=l||w.tag,ct&&(s=(wt=dt.bnds[ct-1])(t.data,t,r)),vt=s.length,y=0;y<vt;y++){if(y||u&&l||(g=t.getRsc("tags",n)||c("Unknown tag: {{"+n+"}}")),v=s[y],w.tag||(rt=v.tmpl,rt=v.content=rt&&dt.tmpls[rt-1],f(v,{tmpl:(l?l:g).template||rt,render:ui,index:y,view:t,ctx:a(v.ctx,ut)})),(u=v.props.tmpl)&&(u=""+u===u?t.getRsc("templates",u)||e(u):u,v.tmpl=u),l||(g._ctr?(l=new g._ctr,yt=!!l.init,l.attr=l.attr||g.attr||i):o._lnk(l={render:g.render}),l._={inline:!w},w&&(w.attr=l.attr=w.attr||l.attr,w.tag=l,l.linkCtx=w),(l._.bnd=wt||w.fn)?l._.arrVws={}:l.dataBoundOnly&&c("{^{"+n+"}} tag must be data-bound"),l.tagName=n,l.parent=et=ut&&ut.tag,l._is="tag",l._def=g,l.tagCtxs=s),!y)for(st in it=v.props)ft.test(st)&&(l[st]=it[st]);v.tag=l;l.dataMap&&l.tagCtxs&&(v.map=l.tagCtxs[y].map);l.flow||(ot=v.ctx=v.ctx||{},pt=l.parents=ot.parentTags=ut&&a(ot.parentTags,ut.parentTags)||{},et&&(pt[et.tagName]=et),ot.tag=l)}for(t._.tag=l,l.rendering={},y=0;y<vt;y++)v=l.tagCtx=l.tagCtxs[y],it=v.props,p=ht(l,l.convert),(bt=it.dataMap||l.dataMap)&&(p.length||it.dataMap)&&(k=v.map,(!k||k.src!==p[0]||h)&&(k&&k.src&&k.unmap(),k=v.map=bt.map(p[0],it)),p=[k.tgt]),l.ctx=v.ctx,!y&&yt&&(kt=l.template,l.init(v,w,l.ctx),yt=i,l.template!==kt&&(l._.tmpl=l.template)),d=i,lt=l.render,(lt=l.render)&&(d=lt.apply(l,p)),p=p.length?p:[t],d=d!==i?d:v.render(p[0],!0)||(h?i:""),nt=nt?nt+(d||""):d;return delete l.rendering,l.tagCtx=l.tagCtxs[0],l.ctx=l.tagCtx.ctx,l._.inline&&(at=l.attr)&&at!==b&&(nt=at==="text"?tt.html(nt):""),ct&&t._.onRender?t._.onRender(nt,t,ct):nt}function g(n,t,i,r,u,f,e,o){var a,h,c,s=this,v=t==="array",l={key:0,useKey:v?0:1,id:""+gi++,onRender:o,bnds:{}};s.data=r;s.tmpl=u;s.content=e;s.views=v?[]:{};s.parent=i;s.type=t;s._=l;s.linked=!!o;i?(a=i.views,h=i._,h.useKey?(a[l.key="_"+h.useKey++]=s,s.index=yt,s.getIndex=dt,c=h.tag,l.bnd=v&&(!c||!!c._.bnd&&c)):a.splice(l.key=s.index=f,0,s),s.ctx=n||i.ctx):s.ctx=n}function er(n){var i,r,t,u,e,f,s;for(i in k)if(e=k[i],(f=e.compile)&&(r=n[i+"s"]))for(t in r)u=r[t]=f(t,r[t],n),u&&(s=o.onStore[i])&&s(t,u,f)}function or(n,t,r){var o,u;return d(t)?t={depends:t.depends,render:t}:(t.baseTag&&(t.flow=!!t.flow,t=f(f({},t.baseTag),t)),(u=t.template)!==i&&(t.template=""+u===u?e[u]||e(u):u),t.init!==!1&&(o=t._ctr=function(){},(o.prototype=t).constructor=o)),r&&(t._parentTmpl=r),t}function ni(r,u,f,o){function c(u){if(""+u===u||u.nodeType>0){try{h=u.nodeType>0?u:!vt.test(u)&&t&&t(n.document).find(u)[0]}catch(s){}return h&&(u=e[r=r||h.getAttribute(et)],u||(r=r||"_"+di++,h.setAttribute(et,r),u=e[r]=ni(r,h.innerHTML,f,o)),h=i),u}}var s,h;return u=u||"",s=c(u),o=o||(u.markup?u:{}),o.tmplName=r,f&&(o._parentTmpl=f),!s&&u.markup&&(s=c(u.markup))&&s.fn&&(s.debug!==u.debug||s.allowCode!==u.allowCode)&&(s=s.markup),s!==i?(r&&!f&&(wt[r]=function(){return u.render.apply(u,arguments)}),s.fn||u.fn?s.fn&&(u=r&&r!==s.tmplName?a(o,s):s):(u=ii(s,o),lt(s.replace(vi,"\\$&"),u)),er(o),u):void 0}function ti(n){function t(t,i){this.tgt=n.getTgt(t,i)}return d(n)&&(n={getTgt:n}),n.baseMap&&(n=f(f({},n.baseMap),n)),n.map=function(n,i){return new t(n,i)},n}function ii(n,t){var i,e=s.wrapMap||{},r=f({markup:n,tmpls:[],links:{},tags:{},bnds:[],_is:"template",render:ri},t);return t.htmlTag||(i=wi.exec(n),r.htmlTag=i?i[1].toLowerCase():""),i=e[r.htmlTag],i&&i!==e.div&&(r.markup=u.trim(r.markup)),r}function sr(n,t){function u(e,s,h){var v,c,l,a;if(e&&typeof e=="object"&&!e.nodeType&&!e.markup&&!e.getTgt){for(l in e)u(l,e[l],s);return r}return s===i&&(s=e,e=i),e&&""+e!==e&&(h=s,s=e,e=i),a=h?h[f]=h[f]||{}:u,c=t.compile,s===null?e&&delete a[e]:(s=c?s=c(e,s,h):s,e&&(a[e]=s)),c&&s&&(s._is=n),s&&(v=o.onStore[n])&&v(e,s,c),s}var f=n+"s";r[f]=u;k[n]=t}function hr(n,t){var i=this.jquery&&(this[0]||c('Unknown template: "'+this.selector+'"')),r=i.getAttribute(et);return ri.call(r?e[r]:e(i),n,t)}function ct(n,t,i){if(s._dbgMode)try{return n.fn(t,i,r)}catch(u){return c(u,i)}return n.fn(t,i,r)}function ri(n,t,i,r,f,e){var o=this;return!r&&o.fn._nvw&&!u.isArray(n)?ct(o,n,{tmpl:o}):ui.call(o,n,t,i,r,f,e)}function ui(n,t,r,f,o,s){var y,ut,d,l,nt,tt,it,p,v,rt,w,ft,h,et,c=this,k="";if(!!t===t&&(r=t,t=i),o===!0&&(it=!0,o=0),c.tag?(p=c,c=c.tag,rt=c._,ft=c.tagName,h=rt.tmpl||p.tmpl,et=c.attr&&c.attr!==b,t=a(t,c.ctx),v=p.content,p.props.link===!1&&(t=t||{},t.link=!1),f=f||p.view,n=arguments.length?n:f):h=c,h&&(!f&&n&&n._is==="view"&&(f=n),f&&(v=v||f.content,s=s||f._.onRender,n===f&&(n=f.data),t=a(t,f.ctx)),f&&f.data!==i||((t=t||{}).root=n),h.fn||(h=e[h]||e(h)),h)){if(s=(t&&t.link)!==!1&&!et&&s,w=s,s===!0&&(w=i,s=f._.onRender),t=h.helpers?a(h.helpers,t):t,u.isArray(n)&&!r)for(l=it?f:o!==i&&f||new g(t,"array",f,n,h,o,v,s),y=0,ut=n.length;y<ut;y++)d=n[y],nt=new g(t,"item",l,d,h,(o||0)+y,v,s),tt=ct(h,d,nt),k+=l._.onRender?l._.onRender(tt,nt):tt;else(f||!h.fn._nvw)&&(l=it?f:new g(t,ft||"data",f,n,h,o,v,s),rt&&!c.flow&&(l.tag=c)),k+=ct(h,n,l);return w?w(k,l):k}return""}function c(n,t,i){var r=s.onError(n,t,i);if(""+n===n)throw new o.Err(r);return!t.linkCtx&&t.linked?tt.html(r):r}function l(n){c("Syntax error\n"+n)}function lt(n,t,i,r){function k(t){t-=f;t&&h.push(n.substr(f,t).replace(ut,"\\n"))}function c(t){t&&l('Unmatched or missing tag: "{{/'+t+'}}" in template:\n'+n)}function d(e,o,v,y,p,d,nt,tt,it,rt,et,ot){d&&(p=":",y=b);rt=rt||i;var st=(o||i)&&[],ct="",lt="",at="",vt="",yt="",pt="",wt="",bt="",ht=!rt&&!p&&!nt;v=v||(it=it||"#data",p);k(ot);f=ot+e.length;tt?g&&h.push(["*","\n"+it.replace(ai,"$1")+"\n"]):v?(v==="else"&&(pi.test(it)&&l('for "{{else if expr}}" use "{{else expr}}"'),st=u[7],u[8]=n.substring(u[8],ot),u=s.pop(),h=u[2],ht=!0),it&&oi(it.replace(ut," "),st,t).replace(yi,function(n,t,i,r,u,f,e,o){return e?(lt+=f+",",vt+="'"+o+"',"):i?(at+=r+f+",",pt+=r+"'"+o+"',"):t?wt+=f:(u==="trigger"&&(bt+=f),ct+=r+f+",",yt+=r+"'"+o+"',",w=w||ft.test(u)),""}).slice(0,-1),a=[v,y||!!r||w||"",ht&&[],fi(vt,yt,pt),fi(lt,ct,at),wt,bt,st||0],h.push(a),ht&&(s.push(u),u=a,u[8]=f)):et&&(c(et!==u[0]&&u[0]!=="else"&&et),u[8]=n.substring(u[8],ot),u=s.pop());c(!u&&et);h=u[2]}var o,a,w,g=t&&t.allowCode,e=[],f=0,s=[],h=e,u=[,,e];return i&&(n=p+n+v),c(s[0]&&s[0][2].pop()[0]),n.replace(y,d),k(n.length),(f=e[e.length-1])&&c(""+f!==f&&+f[8]===f[8]&&f[0]),i?(o=at(e,n,i),o.paths=e[0][7]):o=at(e,t),o._nvw&&(o._nvw=!/[~#]/.test(n)),o}function fi(n,t,i){return[n.slice(0,-1),t.slice(0,-1),i.slice(0,-1)]}function ei(n,t){return"\n\t"+(t?t+":{":"")+"args:["+n[0]+"]"+(n[1]||!t?",\n\tprops:{"+n[1]+"}":"")+(n[2]?",\n\tctx:{"+n[2]+"}":"")}function oi(n,t,i){function p(p,b,k,d,g,nt,tt,it,rt,ut,ft,et,ot,st,ht,ct,at,vt,yt,pt){function dt(n,i,r,f,e,s,h,l){if(r&&(t&&(u==="linkTo"&&(o=t._jsvto=t._jsvto||[],o.push(g)),(!u||c)&&t.push(g.slice(i.length))),r!==".")){var a=(f?'view.hlp("'+f+'")':e?"view":"data")+(l?(s?"."+s:f?"":e?"":"."+r)+(h||""):(l=f?"":e?s||"":r,""));return a=a+(l?"."+l:""),i+(a.slice(0,9)==="view.data"?a.slice(5):a)}return n}nt=nt||"";k=k||b||et;g=g||rt;ut=ut||at||"";var bt,kt,wt;if(!tt||e||f)return t&&ct&&!e&&!f&&(!u||c||o)&&(bt=y[r],pt.length-1>yt-bt&&(bt=pt.slice(bt,yt+1),ct=w+":"+bt+h,wt=v[ct],wt||(v[ct]=1,v[ct]=wt=lt(ct,i||t,!0),wt.paths.push({_jsvOb:wt})),wt!==1&&(o||t).push({_jsvOb:wt}))),e?(e=!ot,e?p:'"'):f?(f=!st,f?p:'"'):(k?(r++,y[r]=yt++,k):"")+(vt?r?"":(s=pt.slice(s,yt),u?(u=c=o=!1,"\b"):"\b,")+s+(s=yt+p.length,"\b"):it?(r&&l(n),u=g,c=d,s=yt+p.length,g+":"):g?g.split("^").join(".").replace(ci,dt)+(ut?(a[++r]=!0,g.charAt(0)!=="."&&(y[r]=yt),kt?"":ut):nt):nt?nt:ht?(a[r--]=!1,ht)+(ut?(a[++r]=!0,ut):""):ft?(a[r]||l(n),","):b?"":(e=ot,f=st,'"'));l(n)}var u,o,c,f,e,s=0,v=i?i.links:t&&(t.links=t.links||{}),a={},y={0:-1},r=0;return(n+(i?" ":"")).replace(/\)\^/g,").").replace(li,p)}function at(n,i,r){var y,f,e,c,d,ht,ct,bt,lt,g,rt,p,o,ft,et,v,nt,w,tt,vt,k,yt,pt,ot,s,a,st,wt,h=0,u="",it={},kt=n.length;for(""+i===i?(v=r?'data-link="'+i.replace(ut," ").slice(1,-1)+'"':i,i=0):(v=i.tmplName||"unnamed",i.allowCode&&(it.allowCode=!0),i.debug&&(it.debug=!0),p=i.bnds,et=i.tmpls),y=0;y<kt;y++)if(f=n[y],""+f===f)u+='\n+"'+f+'"';else if(e=f[0],e==="*")u+=";\n"+f[1]+"\nret=ret";else{if(c=f[1],tt=f[2],d=ei(f[3],"params")+"},"+ei(ft=f[4]),a=f[5],wt=f[6],vt=f[8],(pt=e==="else")||(h=0,p&&(o=f[7])&&(h=p.push(o))),(ot=e===":")?c&&(e=c===b?">":c+e):(tt&&(nt=ii(vt,it),nt.tmplName=v+"/"+e,at(tt,nt),et.push(nt)),pt||(w=e,yt=u,u=""),k=n[y+1],k=k&&k[0]==="else"),st=a?";\ntry{\nret+=":"\n+",ot&&(o||wt||c&&c!==b)){if(s="return {"+d+"};",a&&(s="try {\n"+s+"\n}catch(e){return {error: j._err(e,view,"+a+")}}\n"),s=new Function("data,view,j,u"," // "+v+" "+h+" "+e+"\n"+s),s.paths=o,s._tag=e,r)return s;rt=1}if(u+=ot?(r?(a?"\ntry{\n":"")+"return ":st)+(rt?(rt=0,g=lt=!0,'c("'+c+'",view,'+(o?(p[h-1]=s,h):"{"+d+"}")+")"):e===">"?(ct=!0,"h("+ft[0]+")"):(bt=!0,"((v="+ft[0]+')!=null?v:"")')):(g=ht=!0,"\n{view:view,tmpl:"+(tt?et.length:"0")+","+d+"},"),w&&!k){if(u="["+u.slice(0,-1)+"]",(r||o)&&(u=new Function("data,view,j,u"," // "+v+" "+h+" "+w+"\nreturn "+u+";"),o&&((p[h-1]=u).paths=o),u._tag=e,r))return u;u=yt+st+'t("'+w+'",view,this,'+(h||u)+")";o=0;w=0}a&&(g=!0,u+=";\n}catch(e){ret"+(r?"urn ":"+=")+"j._err(e,view,"+a+");}\n"+(r?"":"ret=ret"))}u="// "+v+"\nj=j||"+(t?"jQuery.":"jsviews.")+"views;var v"+(ht?",t=j._tag":"")+(lt?",c=j._cnvt":"")+(ct?",h=j.converters.html":"")+(r?";\n":',ret=""\n')+(it.debug?"debugger;":"")+u+(r?"\n":";\nreturn ret;");try{u=new Function("data,view,j,u",u)}catch(dt){l("Compiled template code:\n\n"+u+'\n: "'+dt.message+'"')}return i&&(i.fn=u),g||(u._nvw=!0),u}function a(n,t){return n&&n!==t?t?f(f({},t),n):n:t&&f({},t)}function cr(n){return pt[n]||(pt[n]="&#"+n.charCodeAt(0)+";")}function lr(n){var i,t,r=[];if(typeof n=="object")for(i in n)t=n[i],t&&t.toJSON&&!t.toJSON()||d(t)||r.push({key:i,prop:t});return r}function hi(n){return n!=null?bi.test(n)&&(""+n).replace(ki,cr)||n:""}if((!t||!t.render)&&!n.jsviews){var u,rt,y,vt,yt,p="{",w="{",h="}",v="}",nt="^",ci=/^(!*?)(?:null|true|false|\d[\d.]*|([\w$]+|\.|~([\w$]+)|#(view|([\w$]+))?)([\w$.^]*?)(?:[.[^]([\w$]+)\]?)?)$/g,li=/(\()(?=\s*\()|(?:([([])\s*)?(?:(\^?)(!*?[#~]?[\w$.^]+)?\s*((\+\+|--)|\+|-|&&|\|\||===|!==|==|!=|<=|>=|[<>%*:?\/]|(=))\s*|(!*?[#~]?[\w$.^]+)([([])?)|(,\s*)|(\(?)\\?(?:(')|("))|(?:\s*(([)\]])(?=\s*\.|\s*\^|\s*$)|[)\]])([([]?))|(\s+)/g,ut=/[ \t]*(\r\n|\n|\r)/g,ai=/\\(['"])/g,vi=/['"\\]/g,yi=/(?:\x08|^)(onerror:)?(?:(~?)(([\w$]+):)?([^\x08]+))\x08(,)?([^\x08]+)/gi,pi=/^if\s/,wi=/<(\w+)[>\s]/,bi=/[\x00`><\"'&]/,ft=/^on[A-Z]|^convert(Back)?$/,ki=/[\x00`><"'&]/g,di=0,gi=0,pt={"&":"&amp;","<":"&lt;",">":"&gt;","\x00":"&#0;","'":"&#39;",'"':"&#34;","`":"&#96;"},b="html",et="data-jsv-tmpl",wt={},k={template:{compile:ni},tag:{compile:or},helper:{},converter:{}},r={jsviews:"v1.0.0-beta",settings:function(n){f(s,n);bt(s._dbgMode);s.jsv&&s.jsv()},sub:{View:g,Err:st,tmplFn:lt,cvt:ht,parse:oi,extend:f,syntaxErr:l,onStore:{},_lnk:ot},map:ti,_cnvt:rr,_tag:fr,_err:c};(st.prototype=new Error).constructor=st;dt.depends=function(){return[this.get("item"),"index"]};gt.depends=function(){return["index"]};g.prototype={get:tr,getIndex:gt,getRsc:ur,hlp:ir,_is:"view"};for(rt in k)sr(rt,k[rt]);var e=r.templates,tt=r.converters,si=r.helpers,it=r.tags,o=r.sub,s=r.settings;t?(u=t,u.fn.render=hr,u.observable&&(f(o,u.views.sub),r.map=u.views.map)):(u=n.jsviews={},u.isArray=Array&&Array.isArray||function(n){return Object.prototype.toString.call(n)==="[object Array]"});u.render=wt;u.views=r;u.templates=e=r.templates;s({debugMode:bt,delimiters:kt,onError:function(n,t,r){return t&&(n=r===i?"{Error: "+n+"}":d(r)?r(n,t):r),n==i?"":n},_dbgMode:!0});it({"else":function(){},"if":{render:function(n){var t=this;return t.rendering.done||!n&&(arguments.length||!t.tagCtx.index)?"":(t.rendering.done=!0,t.selected=t.tagCtx.index,t.tagCtx.render(t.tagCtx.view,!0))},onUpdate:function(n,t,i){for(var r,f,u=0;(r=this.tagCtxs[u])&&r.args.length;u++)if(r=r.args[0],f=!r!=!i[u].args[0],!this.convert&&!!r||f)return f;return!1},flow:!0},"for":{render:function(n){var f,t=this,r=t.tagCtx,e="",o=0;return t.rendering.done||((f=!arguments.length)&&(n=r.view.data),n!==i&&(e+=r.render(n,f),o+=u.isArray(n)?n.length:1),(t.rendering.done=o)&&(t.selected=r.index)),e},flow:!0},include:{flow:!0},"*":{render:ot,flow:!0}});it("props",{baseTag:it["for"],dataMap:ti(lr)});tt({html:hi,attr:hi,url:function(n){return n!=i?encodeURI(""+n):n===null?n:""}});kt()}})(this,this.jQuery);
4
+ /*
5
+ //# sourceMappingURL=jsrender.min.js.map
6
  */
assets/js/jsrender/jsrender.min.js.map CHANGED
File without changes
assets/js/maskmoney/jquery.maskMoney.js ADDED
@@ -0,0 +1,392 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function ($) {
2
+ "use strict";
3
+ if (!$.browser) {
4
+ $.browser = {};
5
+ $.browser.mozilla = /mozilla/.test(navigator.userAgent.toLowerCase()) && !/webkit/.test(navigator.userAgent.toLowerCase());
6
+ $.browser.webkit = /webkit/.test(navigator.userAgent.toLowerCase());
7
+ $.browser.opera = /opera/.test(navigator.userAgent.toLowerCase());
8
+ $.browser.msie = /msie/.test(navigator.userAgent.toLowerCase());
9
+ }
10
+
11
+ var methods = {
12
+ destroy : function () {
13
+ $(this).unbind(".maskMoney");
14
+
15
+ if ($.browser.msie) {
16
+ this.onpaste = null;
17
+ }
18
+ return this;
19
+ },
20
+
21
+ mask : function (value) {
22
+ return this.each(function () {
23
+ var $this = $(this),
24
+ decimalSize;
25
+ if (typeof value === "number") {
26
+ $this.trigger("mask");
27
+ decimalSize = $($this.val().split(/\D/)).last()[0].length;
28
+ value = value.toFixed(decimalSize);
29
+ $this.val(value);
30
+ }
31
+ return $this.trigger("mask");
32
+ });
33
+ },
34
+
35
+ unmasked : function () {
36
+ return this.map(function () {
37
+ var value = ($(this).val() || "0"),
38
+ isNegative = value.indexOf("-") !== -1,
39
+ decimalPart;
40
+ // get the last position of the array that is a number(coercion makes "" to be evaluated as false)
41
+ $(value.split(/\D/).reverse()).each(function (index, element) {
42
+ if(element) {
43
+ decimalPart = element;
44
+ return false;
45
+ }
46
+ });
47
+ value = value.replace(/\D/g, "");
48
+ value = value.replace(new RegExp(decimalPart + "$"), "." + decimalPart);
49
+ if (isNegative) {
50
+ value = "-" + value;
51
+ }
52
+ return parseFloat(value);
53
+ });
54
+ },
55
+
56
+ init : function (settings) {
57
+ settings = $.extend({
58
+ prefix: "",
59
+ suffix: "",
60
+ affixesStay: true,
61
+ thousands: ",",
62
+ decimal: ".",
63
+ precision: 2,
64
+ allowZero: false,
65
+ allowNegative: false
66
+ }, settings);
67
+
68
+ return this.each(function () {
69
+ var $input = $(this),
70
+ onFocusValue;
71
+
72
+ // data-* api
73
+ settings = $.extend(settings, $input.data());
74
+
75
+ function getInputSelection() {
76
+ var el = $input.get(0),
77
+ start = 0,
78
+ end = 0,
79
+ normalizedValue,
80
+ range,
81
+ textInputRange,
82
+ len,
83
+ endRange;
84
+
85
+ if (typeof el.selectionStart === "number" && typeof el.selectionEnd === "number") {
86
+ start = el.selectionStart;
87
+ end = el.selectionEnd;
88
+ } else {
89
+ range = document.selection.createRange();
90
+
91
+ if (range && range.parentElement() === el) {
92
+ len = el.value.length;
93
+ normalizedValue = el.value.replace(/\r\n/g, "\n");
94
+
95
+ // Create a working TextRange that lives only in the input
96
+ textInputRange = el.createTextRange();
97
+ textInputRange.moveToBookmark(range.getBookmark());
98
+
99
+ // Check if the start and end of the selection are at the very end
100
+ // of the input, since moveStart/moveEnd doesn't return what we want
101
+ // in those cases
102
+ endRange = el.createTextRange();
103
+ endRange.collapse(false);
104
+
105
+ if (textInputRange.compareEndPoints("StartToEnd", endRange) > -1) {
106
+ start = end = len;
107
+ } else {
108
+ start = -textInputRange.moveStart("character", -len);
109
+ start += normalizedValue.slice(0, start).split("\n").length - 1;
110
+
111
+ if (textInputRange.compareEndPoints("EndToEnd", endRange) > -1) {
112
+ end = len;
113
+ } else {
114
+ end = -textInputRange.moveEnd("character", -len);
115
+ end += normalizedValue.slice(0, end).split("\n").length - 1;
116
+ }
117
+ }
118
+ }
119
+ }
120
+
121
+ return {
122
+ start: start,
123
+ end: end
124
+ };
125
+ } // getInputSelection
126
+
127
+ function canInputMoreNumbers() {
128
+ var haventReachedMaxLength = !($input.val().length >= $input.attr("maxlength") && $input.attr("maxlength") >= 0),
129
+ selection = getInputSelection(),
130
+ start = selection.start,
131
+ end = selection.end,
132
+ haveNumberSelected = (selection.start !== selection.end && $input.val().substring(start, end).match(/\d/)) ? true : false,
133
+ startWithZero = ($input.val().substring(0, 1) === "0");
134
+ return haventReachedMaxLength || haveNumberSelected || startWithZero;
135
+ }
136
+
137
+ function setCursorPosition(pos) {
138
+ $input.each(function (index, elem) {
139
+ if (elem.setSelectionRange) {
140
+ elem.focus();
141
+ elem.setSelectionRange(pos, pos);
142
+ } else if (elem.createTextRange) {
143
+ var range = elem.createTextRange();
144
+ range.collapse(true);
145
+ range.moveEnd("character", pos);
146
+ range.moveStart("character", pos);
147
+ range.select();
148
+ }
149
+ });
150
+ }
151
+
152
+ function setSymbol(value) {
153
+ var operator = "";
154
+ if (value.indexOf("-") > -1) {
155
+ value = value.replace("-", "");
156
+ operator = "-";
157
+ }
158
+ return operator + settings.prefix + value + settings.suffix;
159
+ }
160
+
161
+ function maskValue(value) {
162
+ var negative = (value.indexOf("-") > -1) ? "-" : "",
163
+ onlyNumbers = value.replace(/[^0-9]/g, ""),
164
+ integerPart = onlyNumbers.slice(0, onlyNumbers.length - settings.precision),
165
+ newValue,
166
+ decimalPart,
167
+ leadingZeros;
168
+
169
+ // remove initial zeros
170
+ integerPart = integerPart.replace(/^0/g, "");
171
+ // put settings.thousands every 3 chars
172
+ integerPart = integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, settings.thousands);
173
+ if (integerPart === "") {
174
+ integerPart = "0";
175
+ }
176
+ newValue = negative + integerPart;
177
+
178
+ if (settings.precision > 0) {
179
+ decimalPart = onlyNumbers.slice(onlyNumbers.length - settings.precision);
180
+ leadingZeros = new Array((settings.precision + 1) - decimalPart.length).join(0);
181
+ newValue += settings.decimal + leadingZeros + decimalPart;
182
+ }
183
+ return setSymbol(newValue);
184
+ }
185
+
186
+ function maskAndPosition(startPos) {
187
+ var originalLen = $input.val().length,
188
+ newLen;
189
+ $input.val(maskValue($input.val()));
190
+ newLen = $input.val().length;
191
+ startPos = startPos - (originalLen - newLen);
192
+ setCursorPosition(startPos);
193
+ }
194
+
195
+ function mask() {
196
+ var value = $input.val();
197
+ $input.val(maskValue(value));
198
+ }
199
+
200
+ function changeSign() {
201
+ var inputValue = $input.val();
202
+ if (settings.allowNegative) {
203
+ if (inputValue !== "" && inputValue.charAt(0) === "-") {
204
+ return inputValue.replace("-", "");
205
+ } else {
206
+ return "-" + inputValue;
207
+ }
208
+ } else {
209
+ return inputValue;
210
+ }
211
+ }
212
+
213
+ function preventDefault(e) {
214
+ if (e.preventDefault) { //standard browsers
215
+ e.preventDefault();
216
+ } else { // old internet explorer
217
+ e.returnValue = false;
218
+ }
219
+ }
220
+
221
+ function keypressEvent(e) {
222
+ e = e || window.event;
223
+ var key = e.which || e.charCode || e.keyCode,
224
+ keyPressedChar,
225
+ selection,
226
+ startPos,
227
+ endPos,
228
+ value;
229
+ //added to handle an IE "special" event
230
+ if (key === undefined) {
231
+ return false;
232
+ }
233
+ // any key except the numbers 0-9
234
+ if (key < 48 || key > 57) {
235
+ // -(minus) key
236
+ if (key === 45) {
237
+ $input.val(changeSign());
238
+ return false;
239
+ // +(plus) key
240
+ } else if (key === 43) {
241
+ $input.val($input.val().replace("-", ""));
242
+ return false;
243
+ // enter key or tab key
244
+ } else if (key === 13 || key === 9) {
245
+ return true;
246
+ } else if ($.browser.mozilla && (key === 37 || key === 39) && e.charCode === 0) {
247
+ // needed for left arrow key or right arrow key with firefox
248
+ // the charCode part is to avoid allowing "%"(e.charCode 0, e.keyCode 37)
249
+ return true;
250
+ } else { // any other key with keycode less than 48 and greater than 57
251
+ preventDefault(e);
252
+ return true;
253
+ }
254
+ } else if (!canInputMoreNumbers()) {
255
+ return false;
256
+ } else {
257
+ preventDefault(e);
258
+
259
+ keyPressedChar = String.fromCharCode(key);
260
+ selection = getInputSelection();
261
+ startPos = selection.start;
262
+ endPos = selection.end;
263
+ value = $input.val();
264
+ $input.val(value.substring(0, startPos) + keyPressedChar + value.substring(endPos, value.length));
265
+ maskAndPosition(startPos + 1);
266
+ return false;
267
+ }
268
+ }
269
+
270
+ function keydownEvent(e) {
271
+ e = e || window.event;
272
+ var key = e.which || e.charCode || e.keyCode,
273
+ selection,
274
+ startPos,
275
+ endPos,
276
+ value,
277
+ lastNumber;
278
+ //needed to handle an IE "special" event
279
+ if (key === undefined) {
280
+ return false;
281
+ }
282
+
283
+ selection = getInputSelection();
284
+ startPos = selection.start;
285
+ endPos = selection.end;
286
+
287
+ if (key === 8 || key === 46 || key === 63272) { // backspace or delete key (with special case for safari)
288
+ preventDefault(e);
289
+
290
+ value = $input.val();
291
+ // not a selection
292
+ if (startPos === endPos) {
293
+ // backspace
294
+ if (key === 8) {
295
+ if (settings.suffix === "") {
296
+ startPos -= 1;
297
+ } else {
298
+ // needed to find the position of the last number to be erased
299
+ lastNumber = value.split("").reverse().join("").search(/\d/);
300
+ startPos = value.length - lastNumber - 1;
301
+ endPos = startPos + 1;
302
+ }
303
+ //delete
304
+ } else {
305
+ endPos += 1;
306
+ }
307
+ }
308
+
309
+ $input.val(value.substring(0, startPos) + value.substring(endPos, value.length));
310
+
311
+ maskAndPosition(startPos);
312
+ return false;
313
+ } else if (key === 9) { // tab key
314
+ return true;
315
+ } else { // any other key
316
+ return true;
317
+ }
318
+ }
319
+
320
+ function focusEvent() {
321
+ onFocusValue = $input.val();
322
+ mask();
323
+ var input = $input.get(0),
324
+ textRange;
325
+ if (input.createTextRange) {
326
+ textRange = input.createTextRange();
327
+ textRange.collapse(false); // set the cursor at the end of the input
328
+ textRange.select();
329
+ }
330
+ }
331
+
332
+ function getDefaultMask() {
333
+ var n = parseFloat("0") / Math.pow(10, settings.precision);
334
+ return (n.toFixed(settings.precision)).replace(new RegExp("\\.", "g"), settings.decimal);
335
+ }
336
+
337
+ function blurEvent(e) {
338
+ if ($.browser.msie) {
339
+ keypressEvent(e);
340
+ }
341
+
342
+ if ($input.val() === "" || $input.val() === setSymbol(getDefaultMask())) {
343
+ if (!settings.allowZero) {
344
+ $input.val("");
345
+ } else if (!settings.affixesStay) {
346
+ $input.val(getDefaultMask());
347
+ } else {
348
+ $input.val(setSymbol(getDefaultMask()));
349
+ }
350
+ } else {
351
+ if (!settings.affixesStay) {
352
+ var newValue = $input.val().replace(settings.prefix, "").replace(settings.suffix, "");
353
+ $input.val(newValue);
354
+ }
355
+ }
356
+ if ($input.val() !== onFocusValue) {
357
+ $input.change();
358
+ }
359
+ }
360
+
361
+ function clickEvent() {
362
+ var input = $input.get(0),
363
+ length;
364
+ if (input.setSelectionRange) {
365
+ length = $input.val().length;
366
+ input.setSelectionRange(length, length);
367
+ } else {
368
+ $input.val($input.val());
369
+ }
370
+ }
371
+
372
+ $input.unbind(".maskMoney");
373
+ $input.bind("keypress.maskMoney", keypressEvent);
374
+ $input.bind("keydown.maskMoney", keydownEvent);
375
+ $input.bind("blur.maskMoney", blurEvent);
376
+ $input.bind("focus.maskMoney", focusEvent);
377
+ $input.bind("click.maskMoney", clickEvent);
378
+ $input.bind("mask.maskMoney", mask);
379
+ });
380
+ }
381
+ };
382
+
383
+ $.fn.maskMoney = function (method) {
384
+ if (methods[method]) {
385
+ return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
386
+ } else if (typeof method === "object" || ! method) {
387
+ return methods.init.apply(this, arguments);
388
+ } else {
389
+ $.error("Method " + method + " does not exist on jQuery.maskMoney");
390
+ }
391
+ };
392
+ })(window.jQuery || window.Zepto);
assets/js/moment/LICENSE CHANGED
File without changes
assets/js/moment/locale/af.js CHANGED
File without changes
assets/js/moment/locale/ar-ma.js CHANGED
File without changes
assets/js/moment/locale/ar-sa.js CHANGED
File without changes
assets/js/moment/locale/ar-tn.js CHANGED
File without changes
assets/js/moment/locale/ar.js CHANGED
File without changes
assets/js/moment/locale/az.js CHANGED
File without changes
assets/js/moment/locale/be.js CHANGED
File without changes
assets/js/moment/locale/bg.js CHANGED
File without changes
assets/js/moment/locale/bn.js CHANGED
File without changes
assets/js/moment/locale/bo.js CHANGED
File without changes
assets/js/moment/locale/br.js CHANGED
File without changes
assets/js/moment/locale/bs.js CHANGED
File without changes
assets/js/moment/locale/ca.js CHANGED
File without changes
assets/js/moment/locale/cs.js CHANGED
File without changes
assets/js/moment/locale/cv.js CHANGED
File without changes
assets/js/moment/locale/cy.js CHANGED
File without changes
assets/js/moment/locale/da.js CHANGED
File without changes
assets/js/moment/locale/de-at.js CHANGED
File without changes
assets/js/moment/locale/de.js CHANGED
File without changes
assets/js/moment/locale/dv.js CHANGED
File without changes
assets/js/moment/locale/el.js CHANGED
File without changes
assets/js/moment/locale/en-au.js CHANGED
File without changes
assets/js/moment/locale/en-ca.js CHANGED
File without changes
assets/js/moment/locale/en-gb.js CHANGED
File without changes
assets/js/moment/locale/en-ie.js CHANGED
File without changes
assets/js/moment/locale/en-nz.js CHANGED
File without changes
assets/js/moment/locale/eo.js CHANGED
File without changes
assets/js/moment/locale/es.js CHANGED
File without changes
assets/js/moment/locale/et.js CHANGED
File without changes
assets/js/moment/locale/eu.js CHANGED
File without changes
assets/js/moment/locale/fa.js CHANGED
File without changes
assets/js/moment/locale/fi.js CHANGED
File without changes
assets/js/moment/locale/fo.js CHANGED
File without changes
assets/js/moment/locale/fr-ca.js CHANGED
File without changes
assets/js/moment/locale/fr-ch.js CHANGED
File without changes
assets/js/moment/locale/fr.js CHANGED
File without changes
assets/js/moment/locale/fy.js CHANGED
File without changes
assets/js/moment/locale/gd.js CHANGED
File without changes
assets/js/moment/locale/gl.js CHANGED
File without changes
assets/js/moment/locale/he.js CHANGED
File without changes
assets/js/moment/locale/hi.js CHANGED
File without changes
assets/js/moment/locale/hr.js CHANGED
File without changes
assets/js/moment/locale/hu.js CHANGED
File without changes
assets/js/moment/locale/hy-am.js CHANGED
File without changes
assets/js/moment/locale/id.js CHANGED
File without changes
assets/js/moment/locale/is.js CHANGED
File without changes
assets/js/moment/locale/it.js CHANGED
File without changes
assets/js/moment/locale/ja.js CHANGED
File without changes
assets/js/moment/locale/jv.js CHANGED
File without changes
assets/js/moment/locale/ka.js CHANGED
File without changes
assets/js/moment/locale/kk.js CHANGED
File without changes
assets/js/moment/locale/km.js CHANGED
File without changes
assets/js/moment/locale/ko.js CHANGED
File without changes
assets/js/moment/locale/lb.js CHANGED
File without changes
assets/js/moment/locale/lo.js CHANGED
File without changes
assets/js/moment/locale/lt.js CHANGED
File without changes
assets/js/moment/locale/lv.js CHANGED
File without changes
assets/js/moment/locale/me.js CHANGED
File without changes
assets/js/moment/locale/mk.js CHANGED
File without changes
assets/js/moment/locale/ml.js CHANGED
File without changes
assets/js/moment/locale/mr.js CHANGED
File without changes
assets/js/moment/locale/ms-my.js CHANGED
File without changes
assets/js/moment/locale/ms.js CHANGED
File without changes
assets/js/moment/locale/my.js CHANGED
File without changes
assets/js/moment/locale/nb.js CHANGED
File without changes
assets/js/moment/locale/ne.js CHANGED
File without changes
assets/js/moment/locale/nl.js CHANGED
File without changes
assets/js/moment/locale/nn.js CHANGED
File without changes
assets/js/moment/locale/pl.js CHANGED
File without changes
assets/js/moment/locale/pt-br.js CHANGED
File without changes
assets/js/moment/locale/pt.js CHANGED
File without changes
assets/js/moment/locale/ro.js CHANGED
File without changes
assets/js/moment/locale/ru.js CHANGED
File without changes
assets/js/moment/locale/se.js CHANGED
File without changes
assets/js/moment/locale/si.js CHANGED
File without changes
assets/js/moment/locale/sk.js CHANGED
File without changes
assets/js/moment/locale/sl.js CHANGED
File without changes
assets/js/moment/locale/sq.js CHANGED
File without changes
assets/js/moment/locale/sr-cyrl.js CHANGED
File without changes
assets/js/moment/locale/sr.js CHANGED
File without changes
assets/js/moment/locale/sv.js CHANGED
File without changes
assets/js/moment/locale/sw.js CHANGED
File without changes
assets/js/moment/locale/ta.js CHANGED
File without changes
assets/js/moment/locale/te.js CHANGED
File without changes
assets/js/moment/locale/th.js CHANGED
File without changes
assets/js/moment/locale/tl-ph.js CHANGED
File without changes
assets/js/moment/locale/tlh.js CHANGED
File without changes
assets/js/moment/locale/tr.js CHANGED
File without changes
assets/js/moment/locale/tzl.js CHANGED
File without changes
assets/js/moment/locale/tzm-latn.js CHANGED
File without changes
assets/js/moment/locale/tzm.js CHANGED
File without changes
assets/js/moment/locale/uk.js CHANGED
File without changes
assets/js/moment/locale/uz.js CHANGED
File without changes
assets/js/moment/locale/vi.js CHANGED
File without changes
assets/js/moment/locale/zh-cn.js CHANGED
File without changes
assets/js/moment/locale/zh-tw.js CHANGED
File without changes
assets/js/moment/moment.js CHANGED
File without changes
assets/js/php-datatables/wpdatatables.funcs.js CHANGED
@@ -1,334 +1,334 @@
1
- jQuery(document).ready(function($) {
2
-
3
-
4
- if( typeof wpdatatables_frontend_strings !== 'undefined' ){
5
- $.fn.DataTable.defaults.oLanguage.sInfo = wpdatatables_frontend_strings.sInfo;
6
- $.fn.DataTable.defaults.oLanguage.sSearch = wpdatatables_frontend_strings.sSearch;
7
- $.fn.DataTable.defaults.oLanguage.lengthMenu = wpdatatables_frontend_strings.lengthMenu;
8
- $.fn.DataTable.defaults.oLanguage.sEmptyTable = wpdatatables_frontend_strings.sEmptyTable;
9
- $.fn.DataTable.defaults.oLanguage.sInfoEmpty = wpdatatables_frontend_strings.sInfoEmpty;
10
- $.fn.DataTable.defaults.oLanguage.sInfoFiltered = wpdatatables_frontend_strings.sInfoFiltered;
11
- $.fn.DataTable.defaults.oLanguage.sInfoPostFix = wpdatatables_frontend_strings.sInfoPostFix;
12
- $.fn.DataTable.defaults.oLanguage.sInfoThousands = wpdatatables_frontend_strings.sInfoThousands;
13
- $.fn.DataTable.defaults.oLanguage.sLengthMenu = wpdatatables_frontend_strings.sLengthMenu;
14
- $.fn.DataTable.defaults.oLanguage.sProcessing = wpdatatables_frontend_strings.sProcessing;
15
- $.fn.DataTable.defaults.oLanguage.sZeroRecords = wpdatatables_frontend_strings.sZeroRecords;
16
- $.fn.DataTable.defaults.oLanguage.oPaginate = wpdatatables_frontend_strings.oPaginate;
17
- $.fn.DataTable.defaults.oLanguage.oAria = wpdatatables_frontend_strings.oAria;
18
- }
19
-
20
-
21
- /* Clear filters */
22
- $.fn.dataTableExt.oApi.fnFilterClear = function ( oSettings )
23
- {
24
- /* Remove global filter */
25
- oSettings.oPreviousSearch.sSearch = "";
26
-
27
- /* Remove the text of the global filter in the input boxes */
28
- if ( typeof oSettings.aanFeatures.f != 'undefined' )
29
- {
30
- var n = oSettings.aanFeatures.f;
31
- for ( var i=0, iLen=n.length ; i<iLen ; i++ )
32
- {
33
- $('input', n[i]).val( '' );
34
- }
35
- }
36
-
37
- /* Remove the search text for the column filters - NOTE - if you have input boxes for these
38
- * filters, these will need to be reset
39
- */
40
- for ( var i=0, iLen=oSettings.aoPreSearchCols.length ; i<iLen ; i++ )
41
- {
42
- oSettings.aoPreSearchCols[i].sSearch = "";
43
- }
44
-
45
- /* Redraw */
46
- oSettings.oApi._fnReDraw( oSettings );
47
- };
48
-
49
- jQuery.extend( jQuery.fn.dataTableExt.oSort, {
50
- "formatted-num-pre": function ( a ) {
51
- if($(a).text()!=''){
52
- a = $(a).text();
53
- }
54
- a = (a==="-") ? -1 : a.replace( /[^\d\-\.]/g, "" );
55
-
56
- if(a!=-1){
57
- while(a.indexOf('.')!=-1){
58
- a = a.replace(".","");
59
- }
60
-
61
- a = a.replace(',','.');
62
-
63
- }
64
-
65
- return parseFloat( a );
66
- },
67
-
68
- "formatted-num-asc": function ( a, b ) {
69
- return a - b;
70
- },
71
-
72
- "formatted-num-desc": function ( a, b ) {
73
- return b - a;
74
- },
75
-
76
- "statuscol-pre": function ( a ) {
77
-
78
- a = $(a).find('div.percents').text();
79
- return parseFloat( a );
80
- },
81
-
82
- "statuscol-asc": function ( a, b ) {
83
- return a - b;
84
- },
85
-
86
- "statuscol-desc": function ( a, b ) {
87
- return b - a;
88
- },
89
-
90
- 'datetime-pre': function( datetime ){
91
- var dateTimeArr = datetime.split(' ');
92
- return jQuery.fn.dataTableExt.oSort['date-pre'](dateTimeArr[0])+wdtPrepareTime( dateTimeArr[1] );
93
- },
94
-
95
- 'datetime-asc': function ( a, b ) {
96
- return a - b;
97
- },
98
-
99
- "datetime-desc": function ( a, b ) {
100
- return b - a;
101
- },
102
-
103
- 'datetime-am-pre': function( datetime ){
104
- // First divide date and time
105
- var dateTimeArr = datetime.split(' ');
106
- return jQuery.fn.dataTableExt.oSort['date-pre'](dateTimeArr[0])+wdtPrepareAmTime(dateTimeArr[1]+' '+dateTimeArr[2]);;
107
- },
108
-
109
- 'datetime-am-asc': function ( a, b ) {
110
- return a - b;
111
- },
112
-
113
- "datetime-am-desc": function ( a, b ) {
114
- return b - a;
115
- },
116
-
117
- 'datetime-eu-pre': function( datetime ){
118
- // First divide date and time
119
- var dateTimeArr = datetime.split(' ');
120
- return (wdtDateEuPre( dateTimeArr[0] )*100000)+wdtPrepareTime(dateTimeArr[1]);
121
- },
122
-
123
- 'datetime-eu-asc': function ( a, b ) {
124
- return a - b;
125
- },
126
-
127
- "datetime-eu-desc": function ( a, b ) {
128
- return b - a;
129
- },
130
-
131
- 'datetime-eu-am-pre': function( datetime ){
132
- // First divide date and time
133
- var dateTimeArr = datetime.split(' ');
134
- return ( wdtDateEuPre( dateTimeArr[0] )*100000 )+wdtPrepareAmTime(dateTimeArr[1]+' '+dateTimeArr[2]);
135
- },
136
-
137
- 'datetime-eu-am-asc': function ( a, b ) {
138
- return a - b;
139
- },
140
-
141
- "datetime-eu-am-desc": function ( a, b ) {
142
- return b - a;
143
- },
144
-
145
- 'datetime-dd-mmm-yyyy-pre': function( datetime ){
146
- // First divide date and time
147
- var dateTimeArr = datetime.split(' ');
148
- return wdtCustomDateDDMMMYYYYToOrd(dateTimeArr[0]+'-'+dateTimeArr[1]+'-'+dateTimeArr[2])+wdtPrepareTime(dateTimeArr[3]);
149
- },
150
-
151
- 'datetime-dd-mmm-yyyy-asc': function ( a, b ) {
152
- return a - b;
153
- },
154
-
155
- "datetime-dd-mmm-yyyy-desc": function ( a, b ) {
156
- return b - a;
157
- },
158
-
159
- 'datetime-dd-mmm-yyyy-am-pre': function( datetime ){
160
- // First divide date and time
161
- var dateTimeArr = datetime.split(' ');
162
- return wdtCustomDateDDMMMYYYYToOrd(dateTimeArr[0]+'-'+dateTimeArr[1]+'-'+dateTimeArr[2])+wdtPrepareAmTime(dateTimeArr[3]+' '+dateTimeArr[4]);
163
- },
164
-
165
- 'datetime-dd-mmm-yyyy-am-asc': function ( a, b ) {
166
- return a - b;
167
- },
168
-
169
- "datetime-dd-mmm-yyyy-am-desc": function ( a, b ) {
170
- return b - a;
171
- },
172
-
173
- 'time-pre': function( time ){
174
- return wdtPrepareTime( time )
175
- },
176
-
177
- 'time-am-pre': function( time ){
178
- return wdtPrepareAmTime( time )
179
- },
180
-
181
- } );
182
-
183
- $.fn.dataTableExt.oApi.fnGetColumnIndex = function ( oSettings, sCol )
184
- {
185
- var cols = oSettings.aoColumns;
186
- for ( var x=0, xLen=cols.length ; x<xLen ; x++ )
187
- {
188
- if ( (typeof(cols[x].sTitle) == 'string') && ( cols[x].sTitle.toLowerCase() == sCol.toLowerCase() ) )
189
- {
190
- return x;
191
- };
192
- }
193
- return -1;
194
- };
195
-
196
- // This will help DataTables magic detect the "dd-MMM-yyyy" format; Unshift so that it's the first data type (so it takes priority over existing)
197
- jQuery.fn.dataTableExt.aTypes.unshift(
198
- function (sData) {
199
- "use strict"; //let's avoid tom-foolery in this function
200
- if (/^([0-2]?\d|3[0-1])-(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)-\d{4}/i.test(sData)) {
201
- return 'date-dd-mmm-yyyy';
202
- }
203
- return null;
204
- }
205
- );
206
-
207
- // define the sorts
208
- jQuery.fn.dataTableExt.oSort['date-dd-mmm-yyyy-asc'] = function (a, b) {
209
- "use strict"; //let's avoid tom-foolery in this function
210
- var ordA = wdtCustomDateDDMMMYYYYToOrd(a),
211
- ordB = wdtCustomDateDDMMMYYYYToOrd(b);
212
- return (ordA < ordB) ? -1 : ((ordA > ordB) ? 1 : 0);
213
- };
214
-
215
- jQuery.fn.dataTableExt.oSort['date-dd-mmm-yyyy-desc'] = function (a, b) {
216
- "use strict"; //let's avoid tom-foolery in this function
217
- var ordA = wdtCustomDateDDMMMYYYYToOrd(a),
218
- ordB = wdtCustomDateDDMMMYYYYToOrd(b);
219
- return (ordA < ordB) ? 1 : ((ordA > ordB) ? -1 : 0);
220
- };
221
- jQuery.extend( jQuery.fn.dataTableExt.oSort, {
222
- "date-eu-pre": function ( date ) {
223
- return wdtDateEuPre( date );
224
- },
225
-
226
- "date-eu-asc": function ( a, b ) {
227
- return ((a < b) ? -1 : ((a > b) ? 1 : 0));
228
- },
229
-
230
- "date-eu-desc": function ( a, b ) {
231
- return ((a < b) ? 1 : ((a > b) ? -1 : 0));
232
- }
233
- } );
234
-
235
- });
236
-
237
-
238
- var wdtCustomDateDDMMMYYYYToOrd = function (date) {
239
- "use strict"; //let's avoid tom-foolery in this function
240
- // Convert to a number YYYYMMDD which we can use to order
241
- var dateParts = date.split(/-/);
242
- return (dateParts[2] * 10000) + (jQuery.inArray(dateParts[1].toUpperCase(), ["JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"]) * 100) + dateParts[0];
243
- };
244
-
245
- function wdtDateEuPre( date ){
246
- var date = date.replace(" ", "");
247
- if (date.indexOf('.') > 0) {
248
- /*date a, format dd.mn.(yyyy) ; (year is optional)*/
249
- var eu_date = date.split('.');
250
- } else if (date.indexOf('-') > 0) {
251
- /*date a, format dd.mn.(yyyy) ; (year is optional)*/
252
- var eu_date = date.split('-');
253
- } else {
254
- /*date a, format dd/mn/(yyyy) ; (year is optional)*/
255
- var eu_date = date.split('/');
256
- }
257
-
258
- var year = 0;
259
- var month = 0;
260
- var day = 0;
261
-
262
- /*year (optional)*/
263
- if (eu_date[2]) {
264
- year = eu_date[2];
265
- }
266
-
267
- /*month*/
268
- if(eu_date[1]){
269
- month = eu_date[1];
270
- if( month.length < 2 ){ month = 0+month; }
271
- }
272
-
273
- /*day*/
274
- if(eu_date[0]) {
275
- day = eu_date[0];
276
- if( day.length < 2 ){ day = 0+day; }
277
- }
278
-
279
- return (year + month + day) * 1;
280
- }
281
-
282
- function wdtValidateURL(textval) {
283
- var regex = /^([a-z]([a-z]|\d|\+|-|\.)*):(\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?((\[(|(v[\da-f]{1,}\.(([a-z]|\d|-|\.|_|~)|[!\$&'\(\)\*\+,;=]|:)+))\])|((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=])*)(:\d*)?)(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*|(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)){0})(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?(||.*)?$/i;
284
- return regex.test(textval);
285
- }
286
-
287
- function wdtPrepareTime( time ){
288
- return moment.duration( time, 'HH:mm').asSeconds()
289
- }
290
-
291
- function wdtPrepareAmTime( time ){
292
- return moment.duration( moment( time, 'hh:mm A').format("HH:mm"), 'HH:mm' ).asSeconds()
293
- }
294
-
295
- function wdtValidateEmail(email) {
296
- var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+(||.*)?$/;
297
- return regex.test(email);
298
- }
299
-
300
- function wdtRandString(n){
301
- if(!n){
302
- n = 5;
303
- }
304
-
305
- var text = '';
306
- var possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
307
-
308
- for(var i=0; i < n; i++){
309
- text += possible.charAt(Math.floor(Math.random() * possible.length));
310
- }
311
-
312
- return text;
313
- }
314
-
315
- function wdtFormatNumber(n, c, d, t){
316
- c = isNaN(c = Math.abs(c)) ? 2 : c,
317
- d = d == undefined ? "." : d,
318
- t = t == undefined ? "," : t,
319
- s = n < 0 ? "-" : "",
320
- i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "",
321
- j = (j = i.length) > 3 ? j % 3 : 0;
322
- return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
323
- };
324
-
325
- function wdtUnformatNumber( number, thousandsSeparator, decimalsSeparator, isFloat ){
326
- if( typeof isFloat == 'undefined' ) { isFloat = false; }
327
-
328
- var return_string = number.toString().replace( new RegExp( '\\'+thousandsSeparator, 'g'), '' );
329
-
330
- if( isFloat && decimalsSeparator == ',' ){
331
- return_string = return_string.replace( new RegExp( '\\'+decimalsSeparator ), '.' );
332
- }
333
- return return_string;
334
- }
1
+ jQuery(document).ready(function($) {
2
+
3
+
4
+ if( typeof wpdatatables_frontend_strings !== 'undefined' ){
5
+ $.fn.DataTable.defaults.oLanguage.sInfo = wpdatatables_frontend_strings.sInfo;
6
+ $.fn.DataTable.defaults.oLanguage.sSearch = wpdatatables_frontend_strings.sSearch;
7
+ $.fn.DataTable.defaults.oLanguage.lengthMenu = wpdatatables_frontend_strings.lengthMenu;
8
+ $.fn.DataTable.defaults.oLanguage.sEmptyTable = wpdatatables_frontend_strings.sEmptyTable;
9
+ $.fn.DataTable.defaults.oLanguage.sInfoEmpty = wpdatatables_frontend_strings.sInfoEmpty;
10
+ $.fn.DataTable.defaults.oLanguage.sInfoFiltered = wpdatatables_frontend_strings.sInfoFiltered;
11
+ $.fn.DataTable.defaults.oLanguage.sInfoPostFix = wpdatatables_frontend_strings.sInfoPostFix;
12
+ $.fn.DataTable.defaults.oLanguage.sInfoThousands = wpdatatables_frontend_strings.sInfoThousands;
13
+ $.fn.DataTable.defaults.oLanguage.sLengthMenu = wpdatatables_frontend_strings.sLengthMenu;
14
+ $.fn.DataTable.defaults.oLanguage.sProcessing = wpdatatables_frontend_strings.sProcessing;
15
+ $.fn.DataTable.defaults.oLanguage.sZeroRecords = wpdatatables_frontend_strings.sZeroRecords;
16
+ $.fn.DataTable.defaults.oLanguage.oPaginate = wpdatatables_frontend_strings.oPaginate;
17
+ $.fn.DataTable.defaults.oLanguage.oAria = wpdatatables_frontend_strings.oAria;
18
+ }
19
+
20
+
21
+ /* Clear filters */
22
+ $.fn.dataTableExt.oApi.fnFilterClear = function ( oSettings )
23
+ {
24
+ /* Remove global filter */
25
+ oSettings.oPreviousSearch.sSearch = "";
26
+
27
+ /* Remove the text of the global filter in the input boxes */
28
+ if ( typeof oSettings.aanFeatures.f != 'undefined' )
29
+ {
30
+ var n = oSettings.aanFeatures.f;
31
+ for ( var i=0, iLen=n.length ; i<iLen ; i++ )
32
+ {
33
+ $('input', n[i]).val( '' );
34
+ }
35
+ }
36
+
37
+ /* Remove the search text for the column filters - NOTE - if you have input boxes for these
38
+ * filters, these will need to be reset
39
+ */
40
+ for ( var i=0, iLen=oSettings.aoPreSearchCols.length ; i<iLen ; i++ )
41
+ {
42
+ oSettings.aoPreSearchCols[i].sSearch = "";
43
+ }
44
+
45
+ /* Redraw */
46
+ oSettings.oApi._fnReDraw( oSettings );
47
+ };
48
+
49
+ jQuery.extend( jQuery.fn.dataTableExt.oSort, {
50
+ "formatted-num-pre": function ( a ) {
51
+ if($(a).text()!=''){
52
+ a = $(a).text();
53
+ }
54
+ a = (a==="-") ? -1 : a.replace( /[^\d\-\.]/g, "" );
55
+
56
+ if(a!=-1){
57
+ while(a.indexOf('.')!=-1){
58
+ a = a.replace(".","");
59
+ }
60
+
61
+ a = a.replace(',','.');
62
+
63
+ }
64
+
65
+ return parseFloat( a );
66
+ },
67
+
68
+ "formatted-num-asc": function ( a, b ) {
69
+ return a - b;
70
+ },
71
+
72
+ "formatted-num-desc": function ( a, b ) {
73
+ return b - a;
74
+ },
75
+
76
+ "statuscol-pre": function ( a ) {
77
+
78
+ a = $(a).find('div.percents').text();
79
+ return parseFloat( a );
80
+ },
81
+
82
+ "statuscol-asc": function ( a, b ) {
83
+ return a - b;
84
+ },
85
+
86
+ "statuscol-desc": function ( a, b ) {
87
+ return b - a;
88
+ },
89
+
90
+ 'datetime-pre': function( datetime ){
91
+ var dateTimeArr = datetime.split(' ');
92
+ return jQuery.fn.dataTableExt.oSort['date-pre'](dateTimeArr[0])+wdtPrepareTime( dateTimeArr[1] );
93
+ },
94
+
95
+ 'datetime-asc': function ( a, b ) {
96
+ return a - b;
97
+ },
98
+
99
+ "datetime-desc": function ( a, b ) {
100
+ return b - a;
101
+ },
102
+
103
+ 'datetime-am-pre': function( datetime ){
104
+ // First divide date and time
105
+ var dateTimeArr = datetime.split(' ');
106
+ return jQuery.fn.dataTableExt.oSort['date-pre'](dateTimeArr[0])+wdtPrepareAmTime(dateTimeArr[1]+' '+dateTimeArr[2]);;
107
+ },
108
+
109
+ 'datetime-am-asc': function ( a, b ) {
110
+ return a - b;
111
+ },
112
+
113
+ "datetime-am-desc": function ( a, b ) {
114
+ return b - a;
115
+ },
116
+
117
+ 'datetime-eu-pre': function( datetime ){
118
+ // First divide date and time
119
+ var dateTimeArr = datetime.split(' ');
120
+ return (wdtDateEuPre( dateTimeArr[0] )*100000)+wdtPrepareTime(dateTimeArr[1]);
121
+ },
122
+
123
+ 'datetime-eu-asc': function ( a, b ) {
124
+ return a - b;
125
+ },
126
+
127
+ "datetime-eu-desc": function ( a, b ) {
128
+ return b - a;
129
+ },
130
+
131
+ 'datetime-eu-am-pre': function( datetime ){
132
+ // First divide date and time
133
+ var dateTimeArr = datetime.split(' ');
134
+ return ( wdtDateEuPre( dateTimeArr[0] )*100000 )+wdtPrepareAmTime(dateTimeArr[1]+' '+dateTimeArr[2]);
135
+ },
136
+
137
+ 'datetime-eu-am-asc': function ( a, b ) {
138
+ return a - b;
139
+ },
140
+
141
+ "datetime-eu-am-desc": function ( a, b ) {
142
+ return b - a;
143
+ },
144
+
145
+ 'datetime-dd-mmm-yyyy-pre': function( datetime ){
146
+ // First divide date and time
147
+ var dateTimeArr = datetime.split(' ');
148
+ return wdtCustomDateDDMMMYYYYToOrd(dateTimeArr[0]+'-'+dateTimeArr[1]+'-'+dateTimeArr[2])+wdtPrepareTime(dateTimeArr[3]);
149
+ },
150
+
151
+ 'datetime-dd-mmm-yyyy-asc': function ( a, b ) {
152
+ return a - b;
153
+ },
154
+
155
+ "datetime-dd-mmm-yyyy-desc": function ( a, b ) {
156
+ return b - a;
157
+ },
158
+
159
+ 'datetime-dd-mmm-yyyy-am-pre': function( datetime ){
160
+ // First divide date and time
161
+ var dateTimeArr = datetime.split(' ');
162
+ return wdtCustomDateDDMMMYYYYToOrd(dateTimeArr[0]+'-'+dateTimeArr[1]+'-'+dateTimeArr[2])+wdtPrepareAmTime(dateTimeArr[3]+' '+dateTimeArr[4]);
163
+ },
164
+
165
+ 'datetime-dd-mmm-yyyy-am-asc': function ( a, b ) {
166
+ return a - b;
167
+ },
168
+
169
+ "datetime-dd-mmm-yyyy-am-desc": function ( a, b ) {
170
+ return b - a;
171
+ },
172
+
173
+ 'time-pre': function( time ){
174
+ return wdtPrepareTime( time )
175
+ },
176
+
177
+ 'time-am-pre': function( time ){
178
+ return wdtPrepareAmTime( time )
179
+ },
180
+
181
+ } );
182
+
183
+ $.fn.dataTableExt.oApi.fnGetColumnIndex = function ( oSettings, sCol )
184
+ {
185
+ var cols = oSettings.aoColumns;
186
+ for ( var x=0, xLen=cols.length ; x<xLen ; x++ )
187
+ {
188
+ if ( (typeof(cols[x].sTitle) == 'string') && ( cols[x].sTitle.toLowerCase() == sCol.toLowerCase() ) )
189
+ {
190
+ return x;
191
+ };
192
+ }
193
+ return -1;
194
+ };
195
+
196
+ // This will help DataTables magic detect the "dd-MMM-yyyy" format; Unshift so that it's the first data type (so it takes priority over existing)
197
+ jQuery.fn.dataTableExt.aTypes.unshift(
198
+ function (sData) {
199
+ "use strict"; //let's avoid tom-foolery in this function
200
+ if (/^([0-2]?\d|3[0-1])-(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)-\d{4}/i.test(sData)) {
201
+ return 'date-dd-mmm-yyyy';
202
+ }
203
+ return null;
204
+ }
205
+ );
206
+
207
+ // define the sorts
208
+ jQuery.fn.dataTableExt.oSort['date-dd-mmm-yyyy-asc'] = function (a, b) {
209
+ "use strict"; //let's avoid tom-foolery in this function
210
+ var ordA = wdtCustomDateDDMMMYYYYToOrd(a),
211
+ ordB = wdtCustomDateDDMMMYYYYToOrd(b);
212
+ return (ordA < ordB) ? -1 : ((ordA > ordB) ? 1 : 0);
213
+ };
214
+
215
+ jQuery.fn.dataTableExt.oSort['date-dd-mmm-yyyy-desc'] = function (a, b) {
216
+ "use strict"; //let's avoid tom-foolery in this function
217
+ var ordA = wdtCustomDateDDMMMYYYYToOrd(a),
218
+ ordB = wdtCustomDateDDMMMYYYYToOrd(b);
219
+ return (ordA < ordB) ? 1 : ((ordA > ordB) ? -1 : 0);
220
+ };
221
+ jQuery.extend( jQuery.fn.dataTableExt.oSort, {
222
+ "date-eu-pre": function ( date ) {
223
+ return wdtDateEuPre( date );
224
+ },
225
+
226
+ "date-eu-asc": function ( a, b ) {
227
+ return ((a < b) ? -1 : ((a > b) ? 1 : 0));
228
+ },
229
+
230
+ "date-eu-desc": function ( a, b ) {
231
+ return ((a < b) ? 1 : ((a > b) ? -1 : 0));
232
+ }
233
+ } );
234
+
235
+ });
236
+
237
+
238
+ var wdtCustomDateDDMMMYYYYToOrd = function (date) {
239
+ "use strict"; //let's avoid tom-foolery in this function
240
+ // Convert to a number YYYYMMDD which we can use to order
241
+ var dateParts = date.split(/-/);
242
+ return (dateParts[2] * 10000) + (jQuery.inArray(dateParts[1].toUpperCase(), ["JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"]) * 100) + dateParts[0];
243
+ };
244
+
245
+ function wdtDateEuPre( date ){
246
+ var date = date.replace(" ", "");
247
+ if (date.indexOf('.') > 0) {
248
+ /*date a, format dd.mn.(yyyy) ; (year is optional)*/
249
+ var eu_date = date.split('.');
250
+ } else if (date.indexOf('-') > 0) {
251
+ /*date a, format dd.mn.(yyyy) ; (year is optional)*/
252
+ var eu_date = date.split('-');
253
+ } else {
254
+ /*date a, format dd/mn/(yyyy) ; (year is optional)*/
255
+ var eu_date = date.split('/');
256
+ }
257
+
258
+ var year = 0;
259
+ var month = 0;
260
+ var day = 0;
261
+
262
+ /*year (optional)*/
263
+ if (eu_date[2]) {
264
+ year = eu_date[2];
265
+ }
266
+
267
+ /*month*/
268
+ if(eu_date[1]){
269
+ month = eu_date[1];
270
+ if( month.length < 2 ){ month = 0+month; }
271
+ }
272
+
273
+ /*day*/
274
+ if(eu_date[0]) {
275
+ day = eu_date[0];
276
+ if( day.length < 2 ){ day = 0+day; }
277
+ }
278
+
279
+ return (year + month + day) * 1;
280
+ }
281
+
282
+ function wdtValidateURL(textval) {
283
+ var regex = /^([a-z]([a-z]|\d|\+|-|\.)*):(\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?((\[(|(v[\da-f]{1,}\.(([a-z]|\d|-|\.|_|~)|[!\$&'\(\)\*\+,;=]|:)+))\])|((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=])*)(:\d*)?)(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*|(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)){0})(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?(||.*)?$/i;
284
+ return regex.test(textval);
285
+ }
286
+
287
+ function wdtPrepareTime( time ){
288
+ return moment.duration( time, 'HH:mm').asSeconds()
289
+ }
290
+
291
+ function wdtPrepareAmTime( time ){
292
+ return moment.duration( moment( time, 'hh:mm A').format("HH:mm"), 'HH:mm' ).asSeconds()
293
+ }
294
+
295
+ function wdtValidateEmail(email) {
296
+ var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+(||.*)?$/;
297
+ return regex.test(email);
298
+ }
299
+
300
+ function wdtRandString(n){
301
+ if(!n){
302
+ n = 5;
303
+ }
304
+
305
+ var text = '';
306
+ var possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
307
+
308
+ for(var i=0; i < n; i++){
309
+ text += possible.charAt(Math.floor(Math.random() * possible.length));
310
+ }
311
+
312
+ return text;
313
+ }
314
+
315
+ function wdtFormatNumber(n, c, d, t){
316
+ c = isNaN(c = Math.abs(c)) ? 2 : c,
317
+ d = d == undefined ? "." : d,
318
+ t = t == undefined ? "," : t,
319
+ s = n < 0 ? "-" : "",
320
+ i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "",
321
+ j = (j = i.length) > 3 ? j % 3 : 0;
322
+ return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
323
+ };
324
+
325
+ function wdtUnformatNumber( number, thousandsSeparator, decimalsSeparator, isFloat ){
326
+ if( typeof isFloat == 'undefined' ) { isFloat = false; }
327
+
328
+ var return_string = number.toString().replace( new RegExp( '\\'+thousandsSeparator, 'g'), '' );
329
+
330
+ if( isFloat && decimalsSeparator == ',' ){
331
+ return_string = return_string.replace( new RegExp( '\\'+decimalsSeparator ), '.' );
332
+ }
333
+ return return_string;
334
+ }
assets/js/php-datatables/wpdatatables.funcs.min.js CHANGED
File without changes
assets/js/popup/jquery.remodal.min.js CHANGED
File without changes
assets/js/selecter/jquery.fs.selecter.min.js CHANGED
File without changes
assets/js/slider.gif CHANGED
File without changes
assets/js/tagsinput/jquery.tagsinput.js CHANGED
File without changes
assets/js/tagsinput/jquery.tagsinput.min.js CHANGED
File without changes
assets/js/urijs/URI.min.js CHANGED
File without changes
assets/js/wpdatatables/wpdatatables.js CHANGED
File without changes
assets/js/wpdatatables/wpdatatables.min.js CHANGED
File without changes
assets/js/wpdatatables/wpdatatables_admin.js CHANGED
File without changes
assets/js/wpdatatables/wpdatatables_chart_wizard.js CHANGED
File without changes
assets/js/wpdatatables/wpdatatables_edit_table.js CHANGED
File without changes
assets/js/wpdatatables/wpdatatables_mce.js CHANGED
File without changes
config/config.inc.php CHANGED
File without changes
controllers/wdt_admin.php CHANGED
@@ -9,6 +9,8 @@
9
  ?>
10
  <?php
11
 
 
 
12
  // Labels for create/edit JS
13
  global $wdt_admin_translation_array;
14
  $wdt_admin_translation_array = array(
@@ -436,8 +438,6 @@ function wpdatatables_enqueue_editing_scripts()
436
 
437
  }
438
 
439
-
440
-
441
  /**
442
  * Renders the browser of existing tables
443
  */
@@ -447,7 +447,15 @@ function wpdatatables_browse()
447
  if (!current_user_can('manage_options')) {
448
  wp_die(__('You do not have sufficient permissions to access this page.'));
449
  }
450
- $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : '';
 
 
 
 
 
 
 
 
451
  if ($action == 'edit') {
452
  $id = (int)$_GET['table_id'];
453
  $tpl = new PDTTpl();
@@ -529,7 +537,7 @@ function wpdatatables_browse()
529
  */
530
  function wpdatatables_delete_table( $id ){
531
  global $wpdb;
532
- if( empty( $id ) || !current_user_can('manage_options') ){ return false; }
533
 
534
  $wpdb->query("DELETE
535
  FROM {$wpdb->prefix}wpdatatables
@@ -537,9 +545,6 @@ function wpdatatables_delete_table( $id ){
537
  $wpdb->query("DELETE
538
  FROM {$wpdb->prefix}wpdatatables_columns
539
  WHERE table_id={$id}");
540
- $wpdb->query("DELETE
541
- FROM {$wpdb->prefix}wpdatacharts
542
- WHERE wpdatatable_id={$id}");
543
  }
544
 
545
  /**
9
  ?>
10
  <?php
11
 
12
+ defined('ABSPATH') or die("Cannot access pages directly.");
13
+
14
  // Labels for create/edit JS
15
  global $wdt_admin_translation_array;
16
  $wdt_admin_translation_array = array(
438
 
439
  }
440
 
 
 
441
  /**
442
  * Renders the browser of existing tables
443
  */
447
  if (!current_user_can('manage_options')) {
448
  wp_die(__('You do not have sufficient permissions to access this page.'));
449
  }
450
+
451
+ $action = '';
452
+ if (isset($_REQUEST['action']) && -1 != $_REQUEST['action']) {
453
+ $action = $_REQUEST['action'];
454
+ }
455
+ if (isset($_REQUEST['action2']) && -1 != $_REQUEST['action2']) {
456
+ $action = $_REQUEST['action2'];
457
+ }
458
+
459
  if ($action == 'edit') {
460
  $id = (int)$_GET['table_id'];
461
  $tpl = new PDTTpl();
537
  */
538
  function wpdatatables_delete_table( $id ){
539
  global $wpdb;
540
+ if (empty($id) || !current_user_can('manage_options') || !isset($_REQUEST['wdtNonce']) || !wp_verify_nonce($_REQUEST['wdtNonce'], 'wdtDeleteTableNonce')){ return false; }
541
 
542
  $wpdb->query("DELETE
543
  FROM {$wpdb->prefix}wpdatatables
545
  $wpdb->query("DELETE
546
  FROM {$wpdb->prefix}wpdatatables_columns
547
  WHERE table_id={$id}");
 
 
 
548
  }
549
 
550
  /**
controllers/wdt_admin_ajax_actions.php CHANGED
@@ -9,6 +9,8 @@
9
  ?>
10
  <?php
11
 
 
 
12
  /**
13
  * Handler which returns the AJAX preview
14
  */
9
  ?>
10
  <?php
11
 
12
+ defined('ABSPATH') or die("Cannot access pages directly.");
13
+
14
  /**
15
  * Handler which returns the AJAX preview
16
  */
controllers/wdt_functions.php CHANGED
@@ -9,6 +9,8 @@
9
  ?>
10
  <?php
11
 
 
 
12
  /**
13
  * The installation/activation method, installs the plugin table
14
  */
@@ -310,9 +312,8 @@ function wdt_get_table_by_id( $table_id ){
310
 
311
  do_action( 'wpdatatables_before_get_table_metadata', $table_id );
312
 
313
- $query = "SELECT *
314
- FROM {$wpdb->prefix}wpdatatables
315
- WHERE id={$table_id}";
316
  $data = $wpdb->get_row( $query, ARRAY_A );
317
  $data['content'] = stripslashes($data['content']);
318
  if( isset($data['title'] ) ) {
9
  ?>
10
  <?php
11
 
12
+ defined('ABSPATH') or die("Cannot access pages directly.");
13
+
14
  /**
15
  * The installation/activation method, installs the plugin table
16
  */
312
 
313
  do_action( 'wpdatatables_before_get_table_metadata', $table_id );
314
 
315
+ $query = $wpdb->prepare("SELECT * FROM `{$wpdb->prefix}wpdatatables` WHERE `id` = %d", $table_id);
316
+
 
317
  $data = $wpdb->get_row( $query, ARRAY_A );
318
  $data['content'] = stripslashes($data['content']);
319
  if( isset($data['title'] ) ) {
languages/en_US/wpdatatables.mo CHANGED
File without changes
languages/en_US/wpdatatables.po CHANGED
File without changes
languages/nl_NL/nl_NL.mo CHANGED
File without changes
languages/nl_NL/nl_NL.po CHANGED
File without changes
languages/nl_NL/wpdatatables-nl_NL.mo CHANGED
File without changes
languages/nl_NL/wpdatatables-nl_NL.po CHANGED
File without changes
languages/ru_RU/wpdatatables-ru_RU.mo CHANGED
File without changes
languages/ru_RU/wpdatatables-ru_RU.po CHANGED
File without changes
lib/phpExcel/PHPExcel.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Autoloader.php CHANGED
File without changes
lib/phpExcel/PHPExcel/CachedObjectStorage/APC.php CHANGED
File without changes
lib/phpExcel/PHPExcel/CachedObjectStorage/CacheBase.php CHANGED
File without changes
lib/phpExcel/PHPExcel/CachedObjectStorage/DiscISAM.php CHANGED
File without changes
lib/phpExcel/PHPExcel/CachedObjectStorage/ICache.php CHANGED
File without changes
lib/phpExcel/PHPExcel/CachedObjectStorage/Igbinary.php CHANGED
File without changes
lib/phpExcel/PHPExcel/CachedObjectStorage/Memcache.php CHANGED
File without changes
lib/phpExcel/PHPExcel/CachedObjectStorage/Memory.php CHANGED
File without changes
lib/phpExcel/PHPExcel/CachedObjectStorage/MemoryGZip.php CHANGED
File without changes
lib/phpExcel/PHPExcel/CachedObjectStorage/MemorySerialized.php CHANGED
File without changes
lib/phpExcel/PHPExcel/CachedObjectStorage/PHPTemp.php CHANGED
File without changes
lib/phpExcel/PHPExcel/CachedObjectStorage/SQLite.php CHANGED
File without changes
lib/phpExcel/PHPExcel/CachedObjectStorage/SQLite3.php CHANGED
File without changes
lib/phpExcel/PHPExcel/CachedObjectStorage/Wincache.php CHANGED
File without changes
lib/phpExcel/PHPExcel/CachedObjectStorageFactory.php CHANGED
File without changes
lib/phpExcel/PHPExcel/CalcEngine/CyclicReferenceStack.php CHANGED
File without changes
lib/phpExcel/PHPExcel/CalcEngine/Logger.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Calculation.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Calculation/Database.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Calculation/DateTime.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Calculation/Engineering.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Calculation/Exception.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Calculation/ExceptionHandler.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Calculation/Financial.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Calculation/FormulaParser.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Calculation/FormulaToken.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Calculation/Function.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Calculation/Functions.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Calculation/Logical.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Calculation/LookupRef.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Calculation/MathTrig.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Calculation/Statistical.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Calculation/TextData.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Calculation/Token/Stack.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Calculation/functionlist.txt CHANGED
File without changes
lib/phpExcel/PHPExcel/Cell.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Cell/AdvancedValueBinder.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Cell/DataType.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Cell/DataValidation.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Cell/DefaultValueBinder.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Cell/Hyperlink.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Cell/IValueBinder.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Chart.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Chart/Axis.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Chart/DataSeries.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Chart/DataSeriesValues.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Chart/Exception.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Chart/GridLines.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Chart/Layout.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Chart/Legend.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Chart/PlotArea.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Chart/Properties.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Chart/Renderer/PHP Charting Libraries.txt CHANGED
@@ -1,20 +1,20 @@
1
- ChartDirector
2
- http://www.advsofteng.com/cdphp.html
3
-
4
- GraPHPite
5
- http://graphpite.sourceforge.net/
6
-
7
- JpGraph
8
- http://www.aditus.nu/jpgraph/
9
-
10
- LibChart
11
- http://naku.dohcrew.com/libchart/pages/introduction/
12
-
13
- pChart
14
- http://pchart.sourceforge.net/
15
-
16
- TeeChart
17
- http://www.steema.com/products/teechart/overview.html
18
-
19
- PHPGraphLib
20
  http://www.ebrueggeman.com/phpgraphlib
1
+ ChartDirector
2
+ http://www.advsofteng.com/cdphp.html
3
+
4
+ GraPHPite
5
+ http://graphpite.sourceforge.net/
6
+
7
+ JpGraph
8
+ http://www.aditus.nu/jpgraph/
9
+
10
+ LibChart
11
+ http://naku.dohcrew.com/libchart/pages/introduction/
12
+
13
+ pChart
14
+ http://pchart.sourceforge.net/
15
+
16
+ TeeChart
17
+ http://www.steema.com/products/teechart/overview.html
18
+
19
+ PHPGraphLib
20
  http://www.ebrueggeman.com/phpgraphlib
lib/phpExcel/PHPExcel/Chart/Renderer/jpgraph.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Chart/Title.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Comment.php CHANGED
File without changes
lib/phpExcel/PHPExcel/DocumentProperties.php CHANGED
File without changes
lib/phpExcel/PHPExcel/DocumentSecurity.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Exception.php CHANGED
File without changes
lib/phpExcel/PHPExcel/HashTable.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Helper/HTML.php CHANGED
File without changes
lib/phpExcel/PHPExcel/IComparable.php CHANGED
File without changes
lib/phpExcel/PHPExcel/IOFactory.php CHANGED
File without changes
lib/phpExcel/PHPExcel/NamedRange.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Reader/Abstract.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Reader/CSV.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Reader/DefaultReadFilter.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Reader/Excel2003XML.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Reader/Excel2007.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Reader/Excel2007/Chart.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Reader/Excel2007/Theme.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Reader/Excel5.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Reader/Excel5/Color.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Reader/Excel5/Color/BIFF5.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Reader/Excel5/Color/BIFF8.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Reader/Excel5/Color/BuiltIn.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Reader/Excel5/ErrorCode.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Reader/Excel5/Escher.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Reader/Excel5/MD5.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Reader/Excel5/RC4.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Reader/Excel5/Style/Border.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Reader/Excel5/Style/FillPattern.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Reader/Exception.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Reader/Gnumeric.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Reader/HTML.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Reader/IReadFilter.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Reader/IReader.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Reader/OOCalc.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Reader/SYLK.php CHANGED
File without changes
lib/phpExcel/PHPExcel/ReferenceHelper.php CHANGED
File without changes
lib/phpExcel/PHPExcel/RichText.php CHANGED
File without changes
lib/phpExcel/PHPExcel/RichText/ITextElement.php CHANGED
File without changes
lib/phpExcel/PHPExcel/RichText/Run.php CHANGED
File without changes
lib/phpExcel/PHPExcel/RichText/TextElement.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Settings.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/CodePage.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/Date.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/Drawing.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/Escher.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/Escher/DgContainer.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/Escher/DgContainer/SpgrContainer.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/Escher/DgContainer/SpgrContainer/SpContainer.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/Escher/DggContainer.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/Escher/DggContainer/BstoreContainer.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/Escher/DggContainer/BstoreContainer/BSE.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/Escher/DggContainer/BstoreContainer/BSE/Blip.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/Excel5.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/File.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/Font.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/JAMA/CHANGELOG.TXT CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/JAMA/CholeskyDecomposition.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/JAMA/EigenvalueDecomposition.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/JAMA/LUDecomposition.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/JAMA/Matrix.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/JAMA/QRDecomposition.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/JAMA/SingularValueDecomposition.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/JAMA/examples/LMQuadTest.php ADDED
@@ -0,0 +1,116 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * quadratic (p-o)'S'S(p-o)
4
+ * solve for o, S
5
+ * S is a single scale factor
6
+ */
7
+ class LMQuadTest {
8
+
9
+ /**
10
+ * @param array[] $x
11
+ * @param array[] $a
12
+ */
13
+ function val($x, $a) {
14
+ if (count($a) != 3) die ("Wrong number of elements in array a");
15
+ if (count($x) != 2) die ("Wrong number of elements in array x");
16
+
17
+ $ox = $a[0];
18
+ $oy = $a[1];
19
+ $s = $a[2];
20
+
21
+ $sdx = $s * ($x[0] - $ox);
22
+ $sdy = $s * ($x[1] - $oy);
23
+
24
+ return ($sdx * $sdx) + ($sdy * $sdy);
25
+ } // function val()
26
+
27
+
28
+ /**
29
+ * z = (p-o)'S'S(p-o)
30
+ * dz/dp = 2S'S(p-o)
31
+ *
32
+ * z = (s*(px-ox))^2 + (s*(py-oy))^2
33
+ * dz/dox = -2(s*(px-ox))*s
34
+ * dz/ds = 2*s*[(px-ox)^2 + (py-oy)^2]
35
+ *
36
+ * z = (s*dx)^2 + (s*dy)^2
37
+ * dz/ds = 2(s*dx)*dx + 2(s*dy)*dy
38
+ *
39
+ * @param array[] $x
40
+ * @param array[] $a
41
+ * @param int $a_k
42
+ * @param array[] $a
43
+ */
44
+ function grad($x, $a, $a_k) {
45
+ if (count($a) != 3) die ("Wrong number of elements in array a");
46
+ if (count($x) != 2) die ("Wrong number of elements in array x");
47
+ if ($a_k < 3) die ("a_k=".$a_k);
48
+
49
+ $ox = $a[0];
50
+ $oy = $a[1];
51
+ $s = $a[2];
52
+
53
+ $dx = ($x[0] - $ox);
54
+ $dy = ($x[1] - $oy);
55
+
56
+ if ($a_k == 0)
57
+ return -2.*$s*$s*$dx;
58
+ elseif ($a_k == 1)
59
+ return -2.*$s*$s*$dy;
60
+ else
61
+ return 2.*$s*($dx*$dx + $dy*$dy);
62
+ } // function grad()
63
+
64
+
65
+ /**
66
+ * @return array[] $a
67
+ */
68
+ function initial() {
69
+ $a[0] = 0.05;
70
+ $a[1] = 0.1;
71
+ $a[2] = 1.0;
72
+
73
+ return $a;
74
+ } // function initial()
75
+
76
+
77
+ /**
78
+ * @return Object[] $a
79
+ */
80
+ function testdata() {
81
+ $npts = 25;
82
+
83
+ $a[0] = 0.;
84
+ $a[1] = 0.;
85
+ $a[2] = 0.9;
86
+
87
+ $i = 0;
88
+
89
+ for ($r = -2; $r <= 2; ++$r) {
90
+ for ($c = -2; $c <= 2; ++$c) {
91
+ $x[$i][0] = $c;
92
+ $x[$i][1] = $r;
93
+ $y[$i] = $this->val($x[$i], $a);
94
+ print("Quad ".$c.",".$r." -> ".$y[$i]."<br />");
95
+ $s[$i] = 1.;
96
+ ++$i;
97
+ }
98
+ }
99
+ print("quad x= ");
100
+
101
+ $qx = new Matrix($x);
102
+ $qx->print(10, 2);
103
+
104
+ print("quad y= ");
105
+ $qy = new Matrix($y, $npts);
106
+ $qy->print(10, 2);
107
+
108
+ $o[0] = $x;
109
+ $o[1] = $a;
110
+ $o[2] = $y;
111
+ $o[3] = $s;
112
+
113
+ return $o;
114
+ } // function testdata()
115
+
116
+ } // class LMQuadTest
lib/phpExcel/PHPExcel/Shared/JAMA/examples/LagrangeInterpolation.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ require_once "../Matrix.php";
4
+
5
+ /**
6
+ * Given n points (x0,y0)...(xn-1,yn-1), the following methid computes
7
+ * the polynomial factors of the n-1't degree polynomial passing through
8
+ * the n points.
9
+ *
10
+ * Example: Passing in three points (2,3) (1,4) and (3,7) will produce
11
+ * the results [2.5, -8.5, 10] which means that the points are on the
12
+ * curve y = 2.5x² - 8.5x + 10.
13
+ *
14
+ * @see http://geosoft.no/software/lagrange/LagrangeInterpolation.java.html
15
+ * @author Jacob Dreyer
16
+ * @author Paul Meagher (port to PHP and minor changes)
17
+ *
18
+ * @param x[] float
19
+ * @param y[] float
20
+ */
21
+ class LagrangeInterpolation {
22
+
23
+ public function findPolynomialFactors($x, $y) {
24
+ $n = count($x);
25
+
26
+ $data = array(); // double[n][n];
27
+ $rhs = array(); // double[n];
28
+
29
+ for ($i = 0; $i < $n; ++$i) {
30
+ $v = 1;
31
+ for ($j = 0; $j < $n; ++$j) {
32
+ $data[$i][$n-$j-1] = $v;
33
+ $v *= $x[$i];
34
+ }
35
+ $rhs[$i] = $y[$i];
36
+ }
37
+
38
+ // Solve m * s = b
39
+ $m = new Matrix($data);
40
+ $b = new Matrix($rhs, $n);
41
+
42
+ $s = $m->solve($b);
43
+
44
+ return $s->getRowPackedCopy();
45
+ } // function findPolynomialFactors()
46
+
47
+ } // class LagrangeInterpolation
48
+
49
+
50
+ $x = array(2.0, 1.0, 3.0);
51
+ $y = array(3.0, 4.0, 7.0);
52
+
53
+ $li = new LagrangeInterpolation;
54
+ $f = $li->findPolynomialFactors($x, $y);
55
+
56
+
57
+ for ($i = 0; $i < 3; ++$i) {
58
+ echo $f[$i]."<br />";
59
+ }
lib/phpExcel/PHPExcel/Shared/JAMA/examples/LagrangeInterpolation2.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ require_once "../Matrix.php";
4
+
5
+ /**
6
+ * Given n points (x0,y0)...(xn-1,yn-1), the following method computes
7
+ * the polynomial factors of the n-1't degree polynomial passing through
8
+ * the n points.
9
+ *
10
+ * Example: Passing in three points (2,3) (1,4) and (3,7) will produce
11
+ * the results [2.5, -8.5, 10] which means that the points are on the
12
+ * curve y = 2.5x² - 8.5x + 10.
13
+ *
14
+ * @see http://geosoft.no/software/lagrange/LagrangeInterpolation.java.html
15
+ * @see http://source.freehep.org/jcvsweb/ilc/LCSIM/wdview/lcsim/src/org/lcsim/fit/polynomial/PolynomialFitter.java
16
+ * @author Jacob Dreyer
17
+ * @author Paul Meagher (port to PHP and minor changes)
18
+ *
19
+ * @param x[] float
20
+ * @param y[] float
21
+ */
22
+ class LagrangeInterpolation {
23
+
24
+ public function findPolynomialFactors($x, $y) {
25
+ $n = count($x);
26
+
27
+ $data = array(); // double[n][n];
28
+ $rhs = array(); // double[n];
29
+
30
+ for ($i = 0; $i < $n; ++$i) {
31
+ $v = 1;
32
+ for ($j = 0; $j < $n; ++$j) {
33
+ $data[$i][$n-$j-1] = $v;
34
+ $v *= $x[$i];
35
+ }
36
+ $rhs[$i] = $y[$i];
37
+ }
38
+
39
+ // Solve m * s = b
40
+ $m = new Matrix($data);
41
+ $b = new Matrix($rhs, $n);
42
+
43
+ $s = $m->solve($b);
44
+
45
+ return $s->getRowPackedCopy();
46
+ } // function findPolynomialFactors()
47
+
48
+ } // class LagrangeInterpolation
49
+
50
+
51
+ $x = array(2.0, 1.0, 3.0);
52
+ $y = array(3.0, 4.0, 7.0);
53
+
54
+ $li = new LagrangeInterpolation;
55
+ $f = $li->findPolynomialFactors($x, $y);
56
+
57
+ for ($i = 0; $i < 3; ++$i) {
58
+ echo $f[$i]."<br />";
59
+ }
lib/phpExcel/PHPExcel/Shared/JAMA/examples/LevenbergMarquardt.php ADDED
@@ -0,0 +1,185 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // Levenberg-Marquardt in PHP
4
+
5
+ // http://www.idiom.com/~zilla/Computer/Javanumeric/LM.java
6
+
7
+ class LevenbergMarquardt {
8
+
9
+ /**
10
+ * Calculate the current sum-squared-error
11
+ *
12
+ * Chi-squared is the distribution of squared Gaussian errors,
13
+ * thus the name.
14
+ *
15
+ * @param double[][] $x
16
+ * @param double[] $a
17
+ * @param double[] $y,
18
+ * @param double[] $s,
19
+ * @param object $f
20
+ */
21
+ function chiSquared($x, $a, $y, $s, $f) {
22
+ $npts = count($y);
23
+ $sum = 0.0;
24
+
25
+ for ($i = 0; $i < $npts; ++$i) {
26
+ $d = $y[$i] - $f->val($x[$i], $a);
27
+ $d = $d / $s[$i];
28
+ $sum = $sum + ($d*$d);
29
+ }
30
+
31
+ return $sum;
32
+ } // function chiSquared()
33
+
34
+
35
+ /**
36
+ * Minimize E = sum {(y[k] - f(x[k],a)) / s[k]}^2
37
+ * The individual errors are optionally scaled by s[k].
38
+ * Note that LMfunc implements the value and gradient of f(x,a),
39
+ * NOT the value and gradient of E with respect to a!
40
+ *
41
+ * @param x array of domain points, each may be multidimensional
42
+ * @param y corresponding array of values
43
+ * @param a the parameters/state of the model
44
+ * @param vary false to indicate the corresponding a[k] is to be held fixed
45
+ * @param s2 sigma^2 for point i
46
+ * @param lambda blend between steepest descent (lambda high) and
47
+ * jump to bottom of quadratic (lambda zero).
48
+ * Start with 0.001.
49
+ * @param termepsilon termination accuracy (0.01)
50
+ * @param maxiter stop and return after this many iterations if not done
51
+ * @param verbose set to zero (no prints), 1, 2
52
+ *
53
+ * @return the new lambda for future iterations.
54
+ * Can use this and maxiter to interleave the LM descent with some other
55
+ * task, setting maxiter to something small.
56
+ */
57
+ function solve($x, $a, $y, $s, $vary, $f, $lambda, $termepsilon, $maxiter, $verbose) {
58
+ $npts = count($y);
59
+ $nparm = count($a);
60
+
61
+ if ($verbose > 0) {
62
+ print("solve x[".count($x)."][".count($x[0])."]");
63
+ print(" a[".count($a)."]");
64
+ println(" y[".count(length)."]");
65
+ }
66
+
67
+ $e0 = $this->chiSquared($x, $a, $y, $s, $f);
68
+
69
+ //double lambda = 0.001;
70
+ $done = false;
71
+
72
+ // g = gradient, H = hessian, d = step to minimum
73
+ // H d = -g, solve for d
74
+ $H = array();
75
+ $g = array();
76
+
77
+ //double[] d = new double[nparm];
78
+
79
+ $oos2 = array();
80
+
81
+ for($i = 0; $i < $npts; ++$i) {
82
+ $oos2[$i] = 1./($s[$i]*$s[$i]);
83
+ }
84
+ $iter = 0;
85
+ $term = 0; // termination count test
86
+
87
+ do {
88
+ ++$iter;
89
+
90
+ // hessian approximation
91
+ for( $r = 0; $r < $nparm; ++$r) {
92
+ for( $c = 0; $c < $nparm; ++$c) {
93
+ for( $i = 0; $i < $npts; ++$i) {
94
+ if ($i == 0) $H[$r][$c] = 0.;
95
+ $xi = $x[$i];
96
+ $H[$r][$c] += ($oos2[$i] * $f->grad($xi, $a, $r) * $f->grad($xi, $a, $c));
97
+ } //npts
98
+ } //c
99
+ } //r
100
+
101
+ // boost diagonal towards gradient descent
102
+ for( $r = 0; $r < $nparm; ++$r)
103
+ $H[$r][$r] *= (1. + $lambda);
104
+
105
+ // gradient
106
+ for( $r = 0; $r < $nparm; ++$r) {
107
+ for( $i = 0; $i < $npts; ++$i) {
108
+ if ($i == 0) $g[$r] = 0.;
109
+ $xi = $x[$i];
110
+ $g[$r] += ($oos2[$i] * ($y[$i]-$f->val($xi,$a)) * $f->grad($xi, $a, $r));
111
+ }
112
+ } //npts
113
+
114
+ // scale (for consistency with NR, not necessary)
115
+ if ($false) {
116
+ for( $r = 0; $r < $nparm; ++$r) {
117
+ $g[$r] = -0.5 * $g[$r];
118
+ for( $c = 0; $c < $nparm; ++$c) {
119
+ $H[$r][$c] *= 0.5;
120
+ }
121
+ }
122
+ }
123
+
124
+ // solve H d = -g, evaluate error at new location
125
+ //double[] d = DoubleMatrix.solve(H, g);
126
+ // double[] d = (new Matrix(H)).lu().solve(new Matrix(g, nparm)).getRowPackedCopy();
127
+ //double[] na = DoubleVector.add(a, d);
128
+ // double[] na = (new Matrix(a, nparm)).plus(new Matrix(d, nparm)).getRowPackedCopy();
129
+ // double e1 = chiSquared(x, na, y, s, f);
130
+
131
+ // if (verbose > 0) {
132
+ // System.out.println("\n\niteration "+iter+" lambda = "+lambda);
133
+ // System.out.print("a = ");
134
+ // (new Matrix(a, nparm)).print(10, 2);
135
+ // if (verbose > 1) {
136
+ // System.out.print("H = ");
137
+ // (new Matrix(H)).print(10, 2);
138
+ // System.out.print("g = ");
139
+ // (new Matrix(g, nparm)).print(10, 2);
140
+ // System.out.print("d = ");
141
+ // (new Matrix(d, nparm)).print(10, 2);
142
+ // }
143
+ // System.out.print("e0 = " + e0 + ": ");
144
+ // System.out.print("moved from ");
145
+ // (new Matrix(a, nparm)).print(10, 2);
146
+ // System.out.print("e1 = " + e1 + ": ");
147
+ // if (e1 < e0) {
148
+ // System.out.print("to ");
149
+ // (new Matrix(na, nparm)).print(10, 2);
150
+ // } else {
151
+ // System.out.println("move rejected");
152
+ // }
153
+ // }
154
+
155
+ // termination test (slightly different than NR)
156
+ // if (Math.abs(e1-e0) > termepsilon) {
157
+ // term = 0;
158
+ // } else {
159
+ // term++;
160
+ // if (term == 4) {
161
+ // System.out.println("terminating after " + iter + " iterations");
162
+ // done = true;
163
+ // }
164
+ // }
165
+ // if (iter >= maxiter) done = true;
166
+
167
+ // in the C++ version, found that changing this to e1 >= e0
168
+ // was not a good idea. See comment there.
169
+ //
170
+ // if (e1 > e0 || Double.isNaN(e1)) { // new location worse than before
171
+ // lambda *= 10.;
172
+ // } else { // new location better, accept new parameters
173
+ // lambda *= 0.1;
174
+ // e0 = e1;
175
+ // // simply assigning a = na will not get results copied back to caller
176
+ // for( int i = 0; i < nparm; i++ ) {
177
+ // if (vary[i]) a[i] = na[i];
178
+ // }
179
+ // }
180
+ } while(!$done);
181
+
182
+ return $lambda;
183
+ } // function solve()
184
+
185
+ } // class LevenbergMarquardt
lib/phpExcel/PHPExcel/Shared/JAMA/examples/MagicSquareExample.php ADDED
@@ -0,0 +1,182 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @package JAMA
4
+ */
5
+
6
+ require_once "../Matrix.php";
7
+
8
+ /**
9
+ * Example of use of Matrix Class, featuring magic squares.
10
+ */
11
+ class MagicSquareExample {
12
+
13
+ /**
14
+ * Generate magic square test matrix.
15
+ * @param int n dimension of matrix
16
+ */
17
+ function magic($n) {
18
+
19
+ // Odd order
20
+
21
+ if (($n % 2) == 1) {
22
+ $a = ($n+1)/2;
23
+ $b = ($n+1);
24
+ for ($j = 0; $j < $n; ++$j)
25
+ for ($i = 0; $i < $n; ++$i)
26
+ $M[$i][$j] = $n*(($i+$j+$a) % $n) + (($i+2*$j+$b) % $n) + 1;
27
+
28
+ // Doubly Even Order
29
+
30
+ } else if (($n % 4) == 0) {
31
+ for ($j = 0; $j < $n; ++$j) {
32
+ for ($i = 0; $i < $n; ++$i) {
33
+ if ((($i+1)/2)%2 == (($j+1)/2)%2)
34
+ $M[$i][$j] = $n*$n-$n*$i-$j;
35
+ else
36
+ $M[$i][$j] = $n*$i+$j+1;
37
+ }
38
+ }
39
+
40
+ // Singly Even Order
41
+
42
+ } else {
43
+
44
+ $p = $n/2;
45
+ $k = ($n-2)/4;
46
+ $A = $this->magic($p);
47
+ $M = array();
48
+ for ($j = 0; $j < $p; ++$j) {
49
+ for ($i = 0; $i < $p; ++$i) {
50
+ $aij = $A->get($i,$j);
51
+ $M[$i][$j] = $aij;
52
+ $M[$i][$j+$p] = $aij + 2*$p*$p;
53
+ $M[$i+$p][$j] = $aij + 3*$p*$p;
54
+ $M[$i+$p][$j+$p] = $aij + $p*$p;
55
+ }
56
+ }
57
+
58
+ for ($i = 0; $i < $p; ++$i) {
59
+ for ($j = 0; $j < $k; ++$j) {
60
+ $t = $M[$i][$j];
61
+ $M[$i][$j] = $M[$i+$p][$j];
62
+ $M[$i+$p][$j] = $t;
63
+ }
64
+ for ($j = $n-$k+1; $j < $n; ++$j) {
65
+ $t = $M[$i][$j];
66
+ $M[$i][$j] = $M[$i+$p][$j];
67
+ $M[$i+$p][$j] = $t;
68
+ }
69
+ }
70
+
71
+ $t = $M[$k][0]; $M[$k][0] = $M[$k+$p][0]; $M[$k+$p][0] = $t;
72
+ $t = $M[$k][$k]; $M[$k][$k] = $M[$k+$p][$k]; $M[$k+$p][$k] = $t;
73
+
74
+ }
75
+
76
+ return new Matrix($M);
77
+
78
+ }
79
+
80
+ /**
81
+ * Simple function to replicate PHP 5 behaviour
82
+ */
83
+ function microtime_float() {
84
+ list($usec, $sec) = explode(" ", microtime());
85
+ return ((float)$usec + (float)$sec);
86
+ }
87
+
88
+ /**
89
+ * Tests LU, QR, SVD and symmetric Eig decompositions.
90
+ *
91
+ * n = order of magic square.
92
+ * trace = diagonal sum, should be the magic sum, (n^3 + n)/2.
93
+ * max_eig = maximum eigenvalue of (A + A')/2, should equal trace.
94
+ * rank = linear algebraic rank, should equal n if n is odd,
95
+ * be less than n if n is even.
96
+ * cond = L_2 condition number, ratio of singular values.
97
+ * lu_res = test of LU factorization, norm1(L*U-A(p,:))/(n*eps).
98
+ * qr_res = test of QR factorization, norm1(Q*R-A)/(n*eps).
99
+ */
100
+ function main() {
101
+ ?>
102
+ <p>Test of Matrix Class, using magic squares.</p>
103
+ <p>See MagicSquareExample.main() for an explanation.</p>
104
+ <table border='1' cellspacing='0' cellpadding='4'>
105
+ <tr>
106
+ <th>n</th>
107
+ <th>trace</th>
108
+ <th>max_eig</th>
109
+ <th>rank</th>
110
+ <th>cond</th>
111
+ <th>lu_res</th>
112
+ <th>qr_res</th>
113
+ </tr>
114
+ <?php
115
+ $start_time = $this->microtime_float();
116
+ $eps = pow(2.0,-52.0);
117
+ for ($n = 3; $n <= 6; ++$n) {
118
+ echo "<tr>";
119
+
120
+ echo "<td align='right'>$n</td>";
121
+
122
+ $M = $this->magic($n);
123
+ $t = (int) $M->trace();
124
+
125
+ echo "<td align='right'>$t</td>";
126
+
127
+ $O = $M->plus($M->transpose());
128
+ $E = new EigenvalueDecomposition($O->times(0.5));
129
+ $d = $E->getRealEigenvalues();
130
+
131
+ echo "<td align='right'>".$d[$n-1]."</td>";
132
+
133
+ $r = $M->rank();
134
+
135
+ echo "<td align='right'>".$r."</td>";
136
+
137
+ $c = $M->cond();
138
+
139
+ if ($c < 1/$eps)
140
+ echo "<td align='right'>".sprintf("%.3f",$c)."</td>";
141
+ else
142
+ echo "<td align='right'>Inf</td>";
143
+
144
+ $LU = new LUDecomposition($M);
145
+ $L = $LU->getL();
146
+ $U = $LU->getU();
147
+ $p = $LU->getPivot();
148
+ // Java version: R = L.times(U).minus(M.getMatrix(p,0,n-1));
149
+ $S = $L->times($U);
150
+ $R = $S->minus($M->getMatrix($p,0,$n-1));
151
+ $res = $R->norm1()/($n*$eps);
152
+
153
+ echo "<td align='right'>".sprintf("%.3f",$res)."</td>";
154
+
155
+ $QR = new QRDecomposition($M);
156
+ $Q = $QR->getQ();
157
+ $R = $QR->getR();
158
+ $S = $Q->times($R);
159
+ $R = $S->minus($M);
160
+ $res = $R->norm1()/($n*$eps);
161
+
162
+ echo "<td align='right'>".sprintf("%.3f",$res)."</td>";
163
+
164
+ echo "</tr>";
165
+
166
+ }
167
+ echo "<table>";
168
+ echo "<br />";
169
+
170
+ $stop_time = $this->microtime_float();
171
+ $etime = $stop_time - $start_time;
172
+
173
+ echo "<p>Elapsed time is ". sprintf("%.4f",$etime) ." seconds.</p>";
174
+
175
+ }
176
+
177
+ }
178
+
179
+ $magic = new MagicSquareExample();
180
+ $magic->main();
181
+
182
+ ?>
lib/phpExcel/PHPExcel/Shared/JAMA/examples/Stats.php ADDED
@@ -0,0 +1,1605 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ //
3
+ // +----------------------------------------------------------------------+
4
+ // | PHP Version 4 |
5
+ // +----------------------------------------------------------------------+
6
+ // | Copyright (c) 1997-2003 The PHP Group |
7
+ // +----------------------------------------------------------------------+
8
+ // | This source file is subject to version 2.0 of the PHP license, |
9
+ // | that is bundled with this package in the file LICENSE, and is |
10
+ // | available at through the world-wide-web at |
11
+ // | http://www.php.net/license/2_02.txt. |
12
+ // | If you did not receive a copy of the PHP license and are unable to |
13
+ // | obtain it through the world-wide-web, please send a note to |
14
+ // | license@php.net so we can mail you a copy immediately. |
15
+ // +----------------------------------------------------------------------+
16
+ // | Authors: Jesus M. Castagnetto <jmcastagnetto@php.net> |
17
+ // +----------------------------------------------------------------------+
18
+ //
19
+ // $Id: Stats.php,v 1.15 2003/06/01 11:40:30 jmcastagnetto Exp $
20
+ //
21
+
22
+ include_once 'PEAR.php';
23
+
24
+ /**
25
+ * @package Math_Stats
26
+ */
27
+
28
+ // Constants for defining the statistics to calculate /*{{{*/
29
+ /**
30
+ * STATS_BASIC to generate the basic descriptive statistics
31
+ */
32
+ define('STATS_BASIC', 1);
33
+ /**
34
+ * STATS_FULL to generate also higher moments, mode, median, etc.
35
+ */
36
+ define('STATS_FULL', 2);
37
+ /*}}}*/
38
+
39
+ // Constants describing the data set format /*{{{*/
40
+ /**
41
+ * STATS_DATA_SIMPLE for an array of numeric values. This is the default.
42
+ * e.g. $data = array(2,3,4,5,1,1,6);
43
+ */
44
+ define('STATS_DATA_SIMPLE', 0);
45
+ /**
46
+ * STATS_DATA_CUMMULATIVE for an associative array of frequency values,
47
+ * where in each array entry, the index is the data point and the
48
+ * value the count (frequency):
49
+ * e.g. $data = array(3=>4, 2.3=>5, 1.25=>6, 0.5=>3)
50
+ */
51
+ define('STATS_DATA_CUMMULATIVE', 1);
52
+ /*}}}*/
53
+
54
+ // Constants defining how to handle nulls /*{{{*/
55
+ /**
56
+ * STATS_REJECT_NULL, reject data sets with null values. This is the default.
57
+ * Any non-numeric value is considered a null in this context.
58
+ */
59
+ define('STATS_REJECT_NULL', -1);
60
+ /**
61
+ * STATS_IGNORE_NULL, ignore null values and prune them from the data.
62
+ * Any non-numeric value is considered a null in this context.
63
+ */
64
+ define('STATS_IGNORE_NULL', -2);
65
+ /**
66
+ * STATS_USE_NULL_AS_ZERO, assign the value of 0 (zero) to null values.
67
+ * Any non-numeric value is considered a null in this context.
68
+ */
69
+ define('STATS_USE_NULL_AS_ZERO', -3);
70
+ /*}}}*/
71
+
72
+ /**
73
+ * A class to calculate descriptive statistics from a data set.
74
+ * Data sets can be simple arrays of data, or a cummulative hash.
75
+ * The second form is useful when passing large data set,
76
+ * for example the data set:
77
+ *
78
+ * <pre>
79
+ * $data1 = array (1,2,1,1,1,1,3,3,4.1,3,2,2,4.1,1,1,2,3,3,2,2,1,1,2,2);
80
+ * </pre>
81
+ *
82
+ * can be epxressed more compactly as:
83
+ *
84
+ * <pre>
85
+ * $data2 = array('1'=>9, '2'=>8, '3'=>5, '4.1'=>2);
86
+ * </pre>
87
+ *
88
+ * Example of use:
89
+ *
90
+ * <pre>
91
+ * include_once 'Math/Stats.php';
92
+ * $s = new Math_Stats();
93
+ * $s->setData($data1);
94
+ * // or
95
+ * // $s->setData($data2, STATS_DATA_CUMMULATIVE);
96
+ * $stats = $s->calcBasic();
97
+ * echo 'Mean: '.$stats['mean'].' StDev: '.$stats['stdev'].' <br />\n';
98
+ *
99
+ * // using data with nulls
100
+ * // first ignoring them:
101
+ * $data3 = array(1.2, 'foo', 2.4, 3.1, 4.2, 3.2, null, 5.1, 6.2);
102
+ * $s->setNullOption(STATS_IGNORE_NULL);
103
+ * $s->setData($data3);
104
+ * $stats3 = $s->calcFull();
105
+ *
106
+ * // and then assuming nulls == 0
107
+ * $s->setNullOption(STATS_USE_NULL_AS_ZERO);
108
+ * $s->setData($data3);
109
+ * $stats3 = $s->calcFull();
110
+ * </pre>
111
+ *
112
+ * Originally this class was part of NumPHP (Numeric PHP package)
113
+ *
114
+ * @author Jesus M. Castagnetto <jmcastagnetto@php.net>
115
+ * @version 0.8
116
+ * @access public
117
+ * @package Math_Stats
118
+ */
119
+ class Base {/*{{{*/
120
+ // properties /*{{{*/
121
+
122
+ /**
123
+ * The simple or cummulative data set.
124
+ * Null by default.
125
+ *
126
+ * @access private
127
+ * @var array
128
+ */
129
+ public $_data = null;
130
+
131
+ /**
132
+ * Expanded data set. Only set when cummulative data
133
+ * is being used. Null by default.
134
+ *
135
+ * @access private
136
+ * @var array
137
+ */
138
+ public $_dataExpanded = null;
139
+
140
+ /**
141
+ * Flag for data type, one of STATS_DATA_SIMPLE or
142
+ * STATS_DATA_CUMMULATIVE. Null by default.
143
+ *
144
+ * @access private
145
+ * @var int
146
+ */
147
+ public $_dataOption = null;
148
+
149
+ /**
150
+ * Flag for null handling options. One of STATS_REJECT_NULL,
151
+ * STATS_IGNORE_NULL or STATS_USE_NULL_AS_ZERO
152
+ *
153
+ * @access private
154
+ * @var int
155
+ */
156
+ public $_nullOption;
157
+
158
+ /**
159
+ * Array for caching result values, should be reset
160
+ * when using setData()
161
+ *
162
+ * @access private
163
+ * @var array
164
+ */
165
+ public $_calculatedValues = array();
166
+
167
+ /*}}}*/
168
+
169
+ /**
170
+ * Constructor for the class
171
+ *
172
+ * @access public
173
+ * @param optional int $nullOption how to handle null values
174
+ * @return object Math_Stats
175
+ */
176
+ function Math_Stats($nullOption=STATS_REJECT_NULL) {/*{{{*/
177
+ $this->_nullOption = $nullOption;
178
+ }/*}}}*/
179
+
180
+ /**
181
+ * Sets and verifies the data, checking for nulls and using
182
+ * the current null handling option
183
+ *
184
+ * @access public
185
+ * @param array $arr the data set
186
+ * @param optional int $opt data format: STATS_DATA_CUMMULATIVE or STATS_DATA_SIMPLE (default)
187
+ * @return mixed true on success, a PEAR_Error object otherwise
188
+ */
189
+ function setData($arr, $opt=STATS_DATA_SIMPLE) {/*{{{*/
190
+ if (!is_array($arr)) {
191
+ return PEAR::raiseError('invalid data, an array of numeric data was expected');
192
+ }
193
+ $this->_data = null;
194
+ $this->_dataExpanded = null;
195
+ $this->_dataOption = null;
196
+ $this->_calculatedValues = array();
197
+ if ($opt == STATS_DATA_SIMPLE) {
198
+ $this->_dataOption = $opt;
199
+ $this->_data = array_values($arr);
200
+ } else if ($opt == STATS_DATA_CUMMULATIVE) {
201
+ $this->_dataOption = $opt;
202
+ $this->_data = $arr;
203
+ $this->_dataExpanded = array();
204
+ }
205
+ return $this->_validate();
206
+ }/*}}}*/
207
+
208
+ /**
209
+ * Returns the data which might have been modified
210
+ * according to the current null handling options.
211
+ *
212
+ * @access public
213
+ * @param boolean $expanded whether to return a expanded list, default is false
214
+ * @return mixed array of data on success, a PEAR_Error object otherwise
215
+ * @see _validate()
216
+ */
217
+ function getData($expanded=false) {/*{{{*/
218
+ if ($this->_data == null) {
219
+ return PEAR::raiseError('data has not been set');
220
+ }
221
+ if ($this->_dataOption == STATS_DATA_CUMMULATIVE && $expanded) {
222
+ return $this->_dataExpanded;
223
+ } else {
224
+ return $this->_data;
225
+ }
226
+ }/*}}}*/
227
+
228
+ /**
229
+ * Sets the null handling option.
230
+ * Must be called before assigning a new data set containing null values
231
+ *
232
+ * @access public
233
+ * @return mixed true on success, a PEAR_Error object otherwise
234
+ * @see _validate()
235
+ */
236
+ function setNullOption($nullOption) {/*{{{*/
237
+ if ($nullOption == STATS_REJECT_NULL
238
+ || $nullOption == STATS_IGNORE_NULL
239
+ || $nullOption == STATS_USE_NULL_AS_ZERO) {
240
+ $this->_nullOption = $nullOption;
241
+ return true;
242
+ } else {
243
+ return PEAR::raiseError('invalid null handling option expecting: '.
244
+ 'STATS_REJECT_NULL, STATS_IGNORE_NULL or STATS_USE_NULL_AS_ZERO');
245
+ }
246
+ }/*}}}*/
247
+
248
+ /**
249
+ * Transforms the data by substracting each entry from the mean and
250
+ * dividing by its standard deviation. This will reset all pre-calculated
251
+ * values to their original (unset) defaults.
252
+ *
253
+ * @access public
254
+ * @return mixed true on success, a PEAR_Error object otherwise
255
+ * @see mean()
256
+ * @see stDev()
257
+ * @see setData()
258
+ */
259
+ function studentize() {/*{{{*/
260
+ $mean = $this->mean();
261
+ if (PEAR::isError($mean)) {
262
+ return $mean;
263
+ }
264
+ $std = $this->stDev();
265
+ if (PEAR::isError($std)) {
266
+ return $std;
267
+ }
268
+ if ($std == 0) {
269
+ return PEAR::raiseError('cannot studentize data, standard deviation is zero.');
270
+ }
271
+ $arr = array();
272
+ if ($this->_dataOption == STATS_DATA_CUMMULATIVE) {
273
+ foreach ($this->_data as $val=>$freq) {
274
+ $newval = ($val - $mean) / $std;
275
+ $arr["$newval"] = $freq;
276
+ }
277
+ } else {
278
+ foreach ($this->_data as $val) {
279
+ $newval = ($val - $mean) / $std;
280
+ $arr[] = $newval;
281
+ }
282
+ }
283
+ return $this->setData($arr, $this->_dataOption);
284
+ }/*}}}*/
285
+
286
+ /**
287
+ * Transforms the data by substracting each entry from the mean.
288
+ * This will reset all pre-calculated values to their original (unset) defaults.
289
+ *
290
+ * @access public
291
+ * @return mixed true on success, a PEAR_Error object otherwise
292
+ * @see mean()
293
+ * @see setData()
294
+ */
295
+ function center() {/*{{{*/
296
+ $mean = $this->mean();
297
+ if (PEAR::isError($mean)) {
298
+ return $mean;
299
+ }
300
+ $arr = array();
301
+ if ($this->_dataOption == STATS_DATA_CUMMULATIVE) {
302
+ foreach ($this->_data as $val=>$freq) {
303
+ $newval = $val - $mean;
304
+ $arr["$newval"] = $freq;
305
+ }
306
+ } else {
307
+ foreach ($this->_data as $val) {
308
+ $newval = $val - $mean;
309
+ $arr[] = $newval;
310
+ }
311
+ }
312
+ return $this->setData($arr, $this->_dataOption);
313
+ }/*}}}*/
314
+
315
+ /**
316
+ * Calculates the basic or full statistics for the data set
317
+ *
318
+ * @access public
319
+ * @param int $mode one of STATS_BASIC or STATS_FULL
320
+ * @param boolean $returnErrorObject whether the raw PEAR_Error (when true, default),
321
+ * or only the error message will be returned (when false), if an error happens.
322
+ * @return mixed an associative array of statistics on success, a PEAR_Error object otherwise
323
+ * @see calcBasic()
324
+ * @see calcFull()
325
+ */
326
+ function calc($mode, $returnErrorObject=true) {/*{{{*/
327
+ if ($this->_data == null) {
328
+ return PEAR::raiseError('data has not been set');
329
+ }
330
+ if ($mode == STATS_BASIC) {
331
+ return $this->calcBasic($returnErrorObject);
332
+ } elseif ($mode == STATS_FULL) {
333
+ return $this->calcFull($returnErrorObject);
334
+ } else {
335
+ return PEAR::raiseError('incorrect mode, expected STATS_BASIC or STATS_FULL');
336
+ }
337
+ }/*}}}*/
338
+
339
+ /**
340
+ * Calculates a basic set of statistics
341
+ *
342
+ * @access public
343
+ * @param boolean $returnErrorObject whether the raw PEAR_Error (when true, default),
344
+ * or only the error message will be returned (when false), if an error happens.
345
+ * @return mixed an associative array of statistics on success, a PEAR_Error object otherwise
346
+ * @see calc()
347
+ * @see calcFull()
348
+ */
349
+ function calcBasic($returnErrorObject=true) {/*{{{*/
350
+ return array (
351
+ 'min' => $this->__format($this->min(), $returnErrorObject),
352
+ 'max' => $this->__format($this->max(), $returnErrorObject),
353
+ 'sum' => $this->__format($this->sum(), $returnErrorObject),
354
+ 'sum2' => $this->__format($this->sum2(), $returnErrorObject),
355
+ 'count' => $this->__format($this->count(), $returnErrorObject),
356
+ 'mean' => $this->__format($this->mean(), $returnErrorObject),
357
+ 'stdev' => $this->__format($this->stDev(), $returnErrorObject),
358
+ 'variance' => $this->__format($this->variance(), $returnErrorObject),
359
+ 'range' => $this->__format($this->range(), $returnErrorObject)
360
+ );
361
+ }/*}}}*/
362
+
363
+ /**
364
+ * Calculates a full set of statistics
365
+ *
366
+ * @access public
367
+ * @param boolean $returnErrorObject whether the raw PEAR_Error (when true, default),
368
+ * or only the error message will be returned (when false), if an error happens.
369
+ * @return mixed an associative array of statistics on success, a PEAR_Error object otherwise
370
+ * @see calc()
371
+ * @see calcBasic()
372
+ */
373
+ function calcFull($returnErrorObject=true) {/*{{{*/
374
+ return array (
375
+ 'min' => $this->__format($this->min(), $returnErrorObject),
376
+ 'max' => $this->__format($this->max(), $returnErrorObject),
377
+ 'sum' => $this->__format($this->sum(), $returnErrorObject),
378
+ 'sum2' => $this->__format($this->sum2(), $returnErrorObject),
379
+ 'count' => $this->__format($this->count(), $returnErrorObject),
380
+ 'mean' => $this->__format($this->mean(), $returnErrorObject),
381
+ 'median' => $this->__format($this->median(), $returnErrorObject),
382
+ 'mode' => $this->__format($this->mode(), $returnErrorObject),
383
+ 'midrange' => $this->__format($this->midrange(), $returnErrorObject),
384
+ 'geometric_mean' => $this->__format($this->geometricMean(), $returnErrorObject),
385
+ 'harmonic_mean' => $this->__format($this->harmonicMean(), $returnErrorObject),
386
+ 'stdev' => $this->__format($this->stDev(), $returnErrorObject),
387
+ 'absdev' => $this->__format($this->absDev(), $returnErrorObject),
388
+ 'variance' => $this->__format($this->variance(), $returnErrorObject),
389
+ 'range' => $this->__format($this->range(), $returnErrorObject),
390
+ 'std_error_of_mean' => $this->__format($this->stdErrorOfMean(), $returnErrorObject),
391
+ 'skewness' => $this->__format($this->skewness(), $returnErrorObject),
392
+ 'kurtosis' => $this->__format($this->kurtosis(), $returnErrorObject),
393
+ 'coeff_of_variation' => $this->__format($this->coeffOfVariation(), $returnErrorObject),
394
+ 'sample_central_moments' => array (
395
+ 1 => $this->__format($this->sampleCentralMoment(1), $returnErrorObject),
396
+ 2 => $this->__format($this->sampleCentralMoment(2), $returnErrorObject),
397
+ 3 => $this->__format($this->sampleCentralMoment(3), $returnErrorObject),
398
+ 4 => $this->__format($this->sampleCentralMoment(4), $returnErrorObject),
399
+ 5 => $this->__format($this->sampleCentralMoment(5), $returnErrorObject)
400
+ ),
401
+ 'sample_raw_moments' => array (
402
+ 1 => $this->__format($this->sampleRawMoment(1), $returnErrorObject),
403
+ 2 => $this->__format($this->sampleRawMoment(2), $returnErrorObject),
404
+ 3 => $this->__format($this->sampleRawMoment(3), $returnErrorObject),
405
+ 4 => $this->__format($this->sampleRawMoment(4), $returnErrorObject),
406
+ 5 => $this->__format($this->sampleRawMoment(5), $returnErrorObject)
407
+ ),
408
+ 'frequency' => $this->__format($this->frequency(), $returnErrorObject),
409
+ 'quartiles' => $this->__format($this->quartiles(), $returnErrorObject),
410
+ 'interquartile_range' => $this->__format($this->interquartileRange(), $returnErrorObject),
411
+ 'interquartile_mean' => $this->__format($this->interquartileMean(), $returnErrorObject),
412
+ 'quartile_deviation' => $this->__format($this->quartileDeviation(), $returnErrorObject),
413
+ 'quartile_variation_coefficient' => $this->__format($this->quartileVariationCoefficient(), $returnErrorObject),
414
+ 'quartile_skewness_coefficient' => $this->__format($this->quartileSkewnessCoefficient(), $returnErrorObject)
415
+ );
416
+ }/*}}}*/
417
+
418
+ /**
419
+ * Calculates the minimum of a data set.
420
+ * Handles cummulative data sets correctly
421
+ *
422
+ * @access public
423
+ * @return mixed the minimum value on success, a PEAR_Error object otherwise
424
+ * @see calc()
425
+ * @see max()
426
+ */
427
+ function min() {/*{{{*/
428
+ if ($this->_data == null) {
429
+ return PEAR::raiseError('data has not been set');
430
+ }
431
+ if (!array_key_exists('min', $this->_calculatedValues)) {
432
+ if ($this->_dataOption == STATS_DATA_CUMMULATIVE) {
433
+ $min = min(array_keys($this->_data));
434
+ } else {
435
+ $min = min($this->_data);
436
+ }
437
+ $this->_calculatedValues['min'] = $min;
438
+ }
439
+ return $this->_calculatedValues['min'];
440
+ }/*}}}*/
441
+
442
+ /**
443
+ * Calculates the maximum of a data set.
444
+ * Handles cummulative data sets correctly
445
+ *
446
+ * @access public
447
+ * @return mixed the maximum value on success, a PEAR_Error object otherwise
448
+ * @see calc()
449
+ * @see min()
450
+ */
451
+ function max() {/*{{{*/
452
+ if ($this->_data == null) {
453
+ return PEAR::raiseError('data has not been set');
454
+ }
455
+ if (!array_key_exists('max', $this->_calculatedValues)) {
456
+ if ($this->_dataOption == STATS_DATA_CUMMULATIVE) {
457
+ $max = max(array_keys($this->_data));
458
+ } else {
459
+ $max = max($this->_data);
460
+ }
461
+ $this->_calculatedValues['max'] = $max;
462
+ }
463
+ return $this->_calculatedValues['max'];
464
+ }/*}}}*/
465
+
466
+ /**
467
+ * Calculates SUM { xi }
468
+ * Handles cummulative data sets correctly
469
+ *
470
+ * @access public
471
+ * @return mixed the sum on success, a PEAR_Error object otherwise
472
+ * @see calc()
473
+ * @see sum2()
474
+ * @see sumN()
475
+ */
476
+ function sum() {/*{{{*/
477
+ if (!array_key_exists('sum', $this->_calculatedValues)) {
478
+ $sum = $this->sumN(1);
479
+ if (PEAR::isError($sum)) {
480
+ return $sum;
481
+ } else {
482
+ $this->_calculatedValues['sum'] = $sum;
483
+ }
484
+ }
485
+ return $this->_calculatedValues['sum'];
486
+ }/*}}}*/
487
+
488
+ /**
489
+ * Calculates SUM { (xi)^2 }
490
+ * Handles cummulative data sets correctly
491
+ *
492
+ * @access public
493
+ * @return mixed the sum on success, a PEAR_Error object otherwise
494
+ * @see calc()
495
+ * @see sum()
496
+ * @see sumN()
497
+ */
498
+ function sum2() {/*{{{*/
499
+ if (!array_key_exists('sum2', $this->_calculatedValues)) {
500
+ $sum2 = $this->sumN(2);
501
+ if (PEAR::isError($sum2)) {
502
+ return $sum2;
503
+ } else {
504
+ $this->_calculatedValues['sum2'] = $sum2;
505
+ }
506
+ }
507
+ return $this->_calculatedValues['sum2'];
508
+ }/*}}}*/
509
+
510
+ /**
511
+ * Calculates SUM { (xi)^n }
512
+ * Handles cummulative data sets correctly
513
+ *
514
+ * @access public
515
+ * @param numeric $n the exponent
516
+ * @return mixed the sum on success, a PEAR_Error object otherwise
517
+ * @see calc()
518
+ * @see sum()
519
+ * @see sum2()
520
+ */
521
+ function sumN($n) {/*{{{*/
522
+ if ($this->_data == null) {
523
+ return PEAR::raiseError('data has not been set');
524
+ }
525
+ $sumN = 0;
526
+ if ($this->_dataOption == STATS_DATA_CUMMULATIVE) {
527
+ foreach($this->_data as $val=>$freq) {
528
+ $sumN += $freq * pow((double)$val, (double)$n);
529
+ }
530
+ } else {
531
+ foreach($this->_data as $val) {
532
+ $sumN += pow((double)$val, (double)$n);
533
+ }
534
+ }
535
+ return $sumN;
536
+ }/*}}}*/
537
+
538
+ /**
539
+ * Calculates PROD { (xi) }, (the product of all observations)
540
+ * Handles cummulative data sets correctly
541
+ *
542
+ * @access public
543
+ * @return mixed the product on success, a PEAR_Error object otherwise
544
+ * @see productN()
545
+ */
546
+ function product() {/*{{{*/
547
+ if (!array_key_exists('product', $this->_calculatedValues)) {
548
+ $product = $this->productN(1);
549
+ if (PEAR::isError($product)) {
550
+ return $product;
551
+ } else {
552
+ $this->_calculatedValues['product'] = $product;
553
+ }
554
+ }
555
+ return $this->_calculatedValues['product'];
556
+ }/*}}}*/
557
+
558
+ /**
559
+ * Calculates PROD { (xi)^n }, which is the product of all observations
560
+ * Handles cummulative data sets correctly
561
+ *
562
+ * @access public
563
+ * @param numeric $n the exponent
564
+ * @return mixed the product on success, a PEAR_Error object otherwise
565
+ * @see product()
566
+ */
567
+ function productN($n) {/*{{{*/
568
+ if ($this->_data == null) {
569
+ return PEAR::raiseError('data has not been set');
570
+ }
571
+ $prodN = 1.0;
572
+ if ($this->_dataOption == STATS_DATA_CUMMULATIVE) {
573
+ foreach($this->_data as $val=>$freq) {
574
+ if ($val == 0) {
575
+ return 0.0;
576
+ }
577
+ $prodN *= $freq * pow((double)$val, (double)$n);
578
+ }
579
+ } else {
580
+ foreach($this->_data as $val) {
581
+ if ($val == 0) {
582
+ return 0.0;
583
+ }
584
+ $prodN *= pow((double)$val, (double)$n);
585
+ }
586
+ }
587
+ return $prodN;
588
+
589
+ }/*}}}*/
590
+
591
+ /**
592
+ * Calculates the number of data points in the set
593
+ * Handles cummulative data sets correctly
594
+ *
595
+ * @access public
596
+ * @return mixed the count on success, a PEAR_Error object otherwise
597
+ * @see calc()
598
+ */
599
+ function count() {/*{{{*/
600
+ if ($this->_data == null) {
601
+ return PEAR::raiseError('data has not been set');
602
+ }
603
+ if (!array_key_exists('count', $this->_calculatedValues)) {
604
+ if ($this->_dataOption == STATS_DATA_CUMMULATIVE) {
605
+ $count = count($this->_dataExpanded);
606
+ } else {
607
+ $count = count($this->_data);
608
+ }
609
+ $this->_calculatedValues['count'] = $count;
610
+ }
611
+ return $this->_calculatedValues['count'];
612
+ }/*}}}*/
613
+
614
+ /**
615
+ * Calculates the mean (average) of the data points in the set
616
+ * Handles cummulative data sets correctly
617
+ *
618
+ * @access public
619
+ * @return mixed the mean value on success, a PEAR_Error object otherwise
620
+ * @see calc()
621
+ * @see sum()
622
+ * @see count()
623
+ */
624
+ function mean() {/*{{{*/
625
+ if (!array_key_exists('mean', $this->_calculatedValues)) {
626
+ $sum = $this->sum();
627
+ if (PEAR::isError($sum)) {
628
+ return $sum;
629
+ }
630
+ $count = $this->count();
631
+ if (PEAR::isError($count)) {
632
+ return $count;
633
+ }
634
+ $this->_calculatedValues['mean'] = $sum / $count;
635
+ }
636
+ return $this->_calculatedValues['mean'];
637
+ }/*}}}*/
638
+
639
+ /**
640
+ * Calculates the range of the data set = max - min
641
+ *
642
+ * @access public
643
+ * @return mixed the value of the range on success, a PEAR_Error object otherwise.
644
+ */
645
+ function range() {/*{{{*/
646
+ if (!array_key_exists('range', $this->_calculatedValues)) {
647
+ $min = $this->min();
648
+ if (PEAR::isError($min)) {
649
+ return $min;
650
+ }
651
+ $max = $this->max();
652
+ if (PEAR::isError($max)) {
653
+ return $max;
654
+ }
655
+ $this->_calculatedValues['range'] = $max - $min;
656
+ }
657
+ return $this->_calculatedValues['range'];
658
+
659
+ }/*}}}*/
660
+
661
+ /**
662
+ * Calculates the variance (unbiased) of the data points in the set
663
+ * Handles cummulative data sets correctly
664
+ *
665
+ * @access public
666
+ * @return mixed the variance value on success, a PEAR_Error object otherwise
667
+ * @see calc()
668
+ * @see __sumdiff()
669
+ * @see count()
670
+ */
671
+ function variance() {/*{{{*/
672
+ if (!array_key_exists('variance', $this->_calculatedValues)) {
673
+ $variance = $this->__calcVariance();
674
+ if (PEAR::isError($variance)) {
675
+ return $variance;
676
+ }
677
+ $this->_calculatedValues['variance'] = $variance;
678
+ }
679
+ return $this->_calculatedValues['variance'];
680
+ }/*}}}*/
681
+
682
+ /**
683
+ * Calculates the standard deviation (unbiased) of the data points in the set
684
+ * Handles cummulative data sets correctly
685
+ *
686
+ * @access public
687
+ * @return mixed the standard deviation on success, a PEAR_Error object otherwise
688
+ * @see calc()
689
+ * @see variance()
690
+ */
691
+ function stDev() {/*{{{*/
692
+ if (!array_key_exists('stDev', $this->_calculatedValues)) {
693
+ $variance = $this->variance();
694
+ if (PEAR::isError($variance)) {
695
+ return $variance;
696
+ }
697
+ $this->_calculatedValues['stDev'] = sqrt($variance);
698
+ }
699
+ return $this->_calculatedValues['stDev'];
700
+ }/*}}}*/
701
+
702
+ /**
703
+ * Calculates the variance (unbiased) of the data points in the set
704
+ * given a fixed mean (average) value. Not used in calcBasic(), calcFull()
705
+ * or calc().
706
+ * Handles cummulative data sets correctly
707
+ *
708
+ * @access public
709
+ * @param numeric $mean the fixed mean value
710
+ * @return mixed the variance on success, a PEAR_Error object otherwise
711
+ * @see __sumdiff()
712
+ * @see count()
713
+ * @see variance()
714
+ */
715
+ function varianceWithMean($mean) {/*{{{*/
716
+ return $this->__calcVariance($mean);
717
+ }/*}}}*/
718
+
719
+ /**
720
+ * Calculates the standard deviation (unbiased) of the data points in the set
721
+ * given a fixed mean (average) value. Not used in calcBasic(), calcFull()
722
+ * or calc().
723
+ * Handles cummulative data sets correctly
724
+ *
725
+ * @access public
726
+ * @param numeric $mean the fixed mean value
727
+ * @return mixed the standard deviation on success, a PEAR_Error object otherwise
728
+ * @see varianceWithMean()
729
+ * @see stDev()
730
+ */
731
+ function stDevWithMean($mean) {/*{{{*/
732
+ $varianceWM = $this->varianceWithMean($mean);
733
+ if (PEAR::isError($varianceWM)) {
734
+ return $varianceWM;
735
+ }
736
+ return sqrt($varianceWM);
737
+ }/*}}}*/
738
+
739
+ /**
740
+ * Calculates the absolute deviation of the data points in the set
741
+ * Handles cummulative data sets correctly
742
+ *
743
+ * @access public
744
+ * @return mixed the absolute deviation on success, a PEAR_Error object otherwise
745
+ * @see calc()
746
+ * @see __sumabsdev()
747
+ * @see count()
748
+ * @see absDevWithMean()
749
+ */
750
+ function absDev() {/*{{{*/
751
+ if (!array_key_exists('absDev', $this->_calculatedValues)) {
752
+ $absDev = $this->__calcAbsoluteDeviation();
753
+ if (PEAR::isError($absdev)) {
754
+ return $absdev;
755
+ }
756
+ $this->_calculatedValues['absDev'] = $absDev;
757
+ }
758
+ return $this->_calculatedValues['absDev'];
759
+ }/*}}}*/
760
+
761
+ /**
762
+ * Calculates the absolute deviation of the data points in the set
763
+ * given a fixed mean (average) value. Not used in calcBasic(), calcFull()
764
+ * or calc().
765
+ * Handles cummulative data sets correctly
766
+ *
767
+ * @access public
768
+ * @param numeric $mean the fixed mean value
769
+ * @return mixed the absolute deviation on success, a PEAR_Error object otherwise
770
+ * @see __sumabsdev()
771
+ * @see absDev()
772
+ */
773
+ function absDevWithMean($mean) {/*{{{*/
774
+ return $this->__calcAbsoluteDeviation($mean);
775
+ }/*}}}*/
776
+
777
+ /**
778
+ * Calculates the skewness of the data distribution in the set
779
+ * The skewness measures the degree of asymmetry of a distribution,
780
+ * and is related to the third central moment of a distribution.
781
+ * A normal distribution has a skewness = 0
782
+ * A distribution with a tail off towards the high end of the scale
783
+ * (positive skew) has a skewness > 0
784
+ * A distribution with a tail off towards the low end of the scale
785
+ * (negative skew) has a skewness < 0
786
+ * Handles cummulative data sets correctly
787
+ *
788
+ * @access public
789
+ * @return mixed the skewness value on success, a PEAR_Error object otherwise
790
+ * @see __sumdiff()
791
+ * @see count()
792
+ * @see stDev()
793
+ * @see calc()
794
+ */
795
+ function skewness() {/*{{{*/
796
+ if (!array_key_exists('skewness', $this->_calculatedValues)) {
797
+ $count = $this->count();
798
+ if (PEAR::isError($count)) {
799
+ return $count;
800
+ }
801
+ $stDev = $this->stDev();
802
+ if (PEAR::isError($stDev)) {
803
+ return $stDev;
804
+ }
805
+ $sumdiff3 = $this->__sumdiff(3);
806
+ if (PEAR::isError($sumdiff3)) {
807
+ return $sumdiff3;
808
+ }
809
+ $this->_calculatedValues['skewness'] = ($sumdiff3 / ($count * pow($stDev, 3)));
810
+ }
811
+ return $this->_calculatedValues['skewness'];
812
+ }/*}}}*/
813
+
814
+ /**
815
+ * Calculates the kurtosis of the data distribution in the set
816
+ * The kurtosis measures the degrees of peakedness of a distribution.
817
+ * It is also called the "excess" or "excess coefficient", and is
818
+ * a normalized form of the fourth central moment of a distribution.
819
+ * A normal distributions has kurtosis = 0
820
+ * A narrow and peaked (leptokurtic) distribution has a
821
+ * kurtosis > 0
822
+ * A flat and wide (platykurtic) distribution has a kurtosis < 0
823
+ * Handles cummulative data sets correctly
824
+ *
825
+ * @access public
826
+ * @return mixed the kurtosis value on success, a PEAR_Error object otherwise
827
+ * @see __sumdiff()
828
+ * @see count()
829
+ * @see stDev()
830
+ * @see calc()
831
+ */
832
+ function kurtosis() {/*{{{*/
833
+ if (!array_key_exists('kurtosis', $this->_calculatedValues)) {
834
+ $count = $this->count();
835
+ if (PEAR::isError($count)) {
836
+ return $count;
837
+ }
838
+ $stDev = $this->stDev();
839
+ if (PEAR::isError($stDev)) {
840
+ return $stDev;
841
+ }
842
+ $sumdiff4 = $this->__sumdiff(4);
843
+ if (PEAR::isError($sumdiff4)) {
844
+ return $sumdiff4;
845
+ }
846
+ $this->_calculatedValues['kurtosis'] = ($sumdiff4 / ($count * pow($stDev, 4))) - 3;
847
+ }
848
+ return $this->_calculatedValues['kurtosis'];
849
+ }/*}}}*/
850
+
851
+ /**
852
+ * Calculates the median of a data set.
853
+ * The median is the value such that half of the points are below it
854
+ * in a sorted data set.
855
+ * If the number of values is odd, it is the middle item.
856
+ * If the number of values is even, is the average of the two middle items.
857
+ * Handles cummulative data sets correctly
858
+ *
859
+ * @access public
860
+ * @return mixed the median value on success, a PEAR_Error object otherwise
861
+ * @see count()
862
+ * @see calc()
863
+ */
864
+ function median() {/*{{{*/
865
+ if ($this->_data == null) {
866
+ return PEAR::raiseError('data has not been set');
867
+ }
868
+ if (!array_key_exists('median', $this->_calculatedValues)) {
869
+ if ($this->_dataOption == STATS_DATA_CUMMULATIVE) {
870
+ $arr =& $this->_dataExpanded;
871
+ } else {
872
+ $arr =& $this->_data;
873
+ }
874
+ $n = $this->count();
875
+ if (PEAR::isError($n)) {
876
+ return $n;
877
+ }
878
+ $h = intval($n / 2);
879
+ if ($n % 2 == 0) {
880
+ $median = ($arr[$h] + $arr[$h - 1]) / 2;
881
+ } else {
882
+ $median = $arr[$h + 1];
883
+ }
884
+ $this->_calculatedValues['median'] = $median;
885
+ }
886
+ return $this->_calculatedValues['median'];
887
+ }/*}}}*/
888
+
889
+ /**
890
+ * Calculates the mode of a data set.
891
+ * The mode is the value with the highest frequency in the data set.
892
+ * There can be more than one mode.
893
+ * Handles cummulative data sets correctly
894
+ *
895
+ * @access public
896
+ * @return mixed an array of mode value on success, a PEAR_Error object otherwise
897
+ * @see frequency()
898
+ * @see calc()
899
+ */
900
+ function mode() {/*{{{*/
901
+ if ($this->_data == null) {
902
+ return PEAR::raiseError('data has not been set');
903
+ }
904
+ if (!array_key_exists('mode', $this->_calculatedValues)) {
905
+ if ($this->_dataOption == STATS_DATA_CUMMULATIVE) {
906
+ $arr = $this->_data;
907
+ } else {
908
+ $arr = $this->frequency();
909
+ }
910
+ arsort($arr);
911
+ $mcount = 1;
912
+ foreach ($arr as $val=>$freq) {
913
+ if ($mcount == 1) {
914
+ $mode = array($val);
915
+ $mfreq = $freq;
916
+ ++$mcount;
917
+ continue;
918
+ }
919
+ if ($mfreq == $freq)
920
+ $mode[] = $val;
921
+ if ($mfreq > $freq)
922
+ break;
923
+ }
924
+ $this->_calculatedValues['mode'] = $mode;
925
+ }
926
+ return $this->_calculatedValues['mode'];
927
+ }/*}}}*/
928
+
929
+ /**
930
+ * Calculates the midrange of a data set.
931
+ * The midrange is the average of the minimum and maximum of the data set.
932
+ * Handles cummulative data sets correctly
933
+ *
934
+ * @access public
935
+ * @return mixed the midrange value on success, a PEAR_Error object otherwise
936
+ * @see min()
937
+ * @see max()
938
+ * @see calc()
939
+ */
940
+ function midrange() {/*{{{*/
941
+ if (!array_key_exists('midrange', $this->_calculatedValues)) {
942
+ $min = $this->min();
943
+ if (PEAR::isError($min)) {
944
+ return $min;
945
+ }
946
+ $max = $this->max();
947
+ if (PEAR::isError($max)) {
948
+ return $max;
949
+ }
950
+ $this->_calculatedValues['midrange'] = (($max + $min) / 2);
951
+ }
952
+ return $this->_calculatedValues['midrange'];
953
+ }/*}}}*/
954
+
955
+ /**
956
+ * Calculates the geometrical mean of the data points in the set
957
+ * Handles cummulative data sets correctly
958
+ *
959
+ * @access public
960
+ * @return mixed the geometrical mean value on success, a PEAR_Error object otherwise
961
+ * @see calc()
962
+ * @see product()
963
+ * @see count()
964
+ */
965
+ function geometricMean() {/*{{{*/
966
+ if (!array_key_exists('geometricMean', $this->_calculatedValues)) {
967
+ $count = $this->count();
968
+ if (PEAR::isError($count)) {
969
+ return $count;
970
+ }
971
+ $prod = $this->product();
972
+ if (PEAR::isError($prod)) {
973
+ return $prod;
974
+ }
975
+ if ($prod == 0.0) {
976
+ return 0.0;
977
+ }
978
+ if ($prod < 0) {
979
+ return PEAR::raiseError('The product of the data set is negative, geometric mean undefined.');
980
+ }
981
+ $this->_calculatedValues['geometricMean'] = pow($prod , 1 / $count);
982
+ }
983
+ return $this->_calculatedValues['geometricMean'];
984
+ }/*}}}*/
985
+
986
+ /**
987
+ * Calculates the harmonic mean of the data points in the set
988
+ * Handles cummulative data sets correctly
989
+ *
990
+ * @access public
991
+ * @return mixed the harmonic mean value on success, a PEAR_Error object otherwise
992
+ * @see calc()
993
+ * @see count()
994
+ */
995
+ function harmonicMean() {/*{{{*/
996
+ if ($this->_data == null) {
997
+ return PEAR::raiseError('data has not been set');
998
+ }
999
+ if (!array_key_exists('harmonicMean', $this->_calculatedValues)) {
1000
+ $count = $this->count();
1001
+ if (PEAR::isError($count)) {
1002
+ return $count;
1003
+ }
1004
+ $invsum = 0.0;
1005
+ if ($this->_dataOption == STATS_DATA_CUMMULATIVE) {
1006
+ foreach($this->_data as $val=>$freq) {
1007
+ if ($val == 0) {
1008
+ return PEAR::raiseError('cannot calculate a '.
1009
+ 'harmonic mean with data values of zero.');
1010
+ }
1011
+ $invsum += $freq / $val;
1012
+ }
1013
+ } else {
1014
+ foreach($this->_data as $val) {
1015
+ if ($val == 0) {
1016
+ return PEAR::raiseError('cannot calculate a '.
1017
+ 'harmonic mean with data values of zero.');
1018
+ }
1019
+ $invsum += 1 / $val;
1020
+ }
1021
+ }
1022
+ $this->_calculatedValues['harmonicMean'] = $count / $invsum;
1023
+ }
1024
+ return $this->_calculatedValues['harmonicMean'];
1025
+ }/*}}}*/
1026
+
1027
+ /**
1028
+ * Calculates the nth central moment (m{n}) of a data set.
1029
+ *
1030
+ * The definition of a sample central moment is:
1031
+ *
1032
+ * m{n} = 1/N * SUM { (xi - avg)^n }
1033
+ *
1034
+ * where: N = sample size, avg = sample mean.
1035
+ *
1036
+ * @access public
1037
+ * @param integer $n moment to calculate
1038
+ * @return mixed the numeric value of the moment on success, PEAR_Error otherwise
1039
+ */
1040
+ function sampleCentralMoment($n) {/*{{{*/
1041
+ if (!is_int($n) || $n < 1) {
1042
+ return PEAR::isError('moment must be a positive integer >= 1.');
1043
+ }
1044
+
1045
+ if ($n == 1) {
1046
+ return 0;
1047
+ }
1048
+ $count = $this->count();
1049
+ if (PEAR::isError($count)) {
1050
+ return $count;
1051
+ }
1052
+ if ($count == 0) {
1053
+ return PEAR::raiseError("Cannot calculate {$n}th sample moment, ".
1054
+ 'there are zero data entries');
1055
+ }
1056
+ $sum = $this->__sumdiff($n);
1057
+ if (PEAR::isError($sum)) {
1058
+ return $sum;
1059
+ }
1060
+ return ($sum / $count);
1061
+ }/*}}}*/
1062
+
1063
+ /**
1064
+ * Calculates the nth raw moment (m{n}) of a data set.
1065
+ *
1066
+ * The definition of a sample central moment is:
1067
+ *
1068
+ * m{n} = 1/N * SUM { xi^n }
1069
+ *
1070
+ * where: N = sample size, avg = sample mean.
1071
+ *
1072
+ * @access public
1073
+ * @param integer $n moment to calculate
1074
+ * @return mixed the numeric value of the moment on success, PEAR_Error otherwise
1075
+ */
1076
+ function sampleRawMoment($n) {/*{{{*/
1077
+ if (!is_int($n) || $n < 1) {
1078
+ return PEAR::isError('moment must be a positive integer >= 1.');
1079
+ }
1080
+
1081
+ $count = $this->count();
1082
+ if (PEAR::isError($count)) {
1083
+ return $count;
1084
+ }
1085
+ if ($count == 0) {
1086
+ return PEAR::raiseError("Cannot calculate {$n}th raw moment, ".
1087
+ 'there are zero data entries.');
1088
+ }
1089
+ $sum = $this->sumN($n);
1090
+ if (PEAR::isError($sum)) {
1091
+ return $sum;
1092
+ }
1093
+ return ($sum / $count);
1094
+ }/*}}}*/
1095
+
1096
+
1097
+ /**
1098
+ * Calculates the coefficient of variation of a data set.
1099
+ * The coefficient of variation measures the spread of a set of data
1100
+ * as a proportion of its mean. It is often expressed as a percentage.
1101
+ * Handles cummulative data sets correctly
1102
+ *
1103
+ * @access public
1104
+ * @return mixed the coefficient of variation on success, a PEAR_Error object otherwise
1105
+ * @see stDev()
1106
+ * @see mean()
1107
+ * @see calc()
1108
+ */
1109
+ function coeffOfVariation() {/*{{{*/
1110
+ if (!array_key_exists('coeffOfVariation', $this->_calculatedValues)) {
1111
+ $mean = $this->mean();
1112
+ if (PEAR::isError($mean)) {
1113
+ return $mean;
1114
+ }
1115
+ if ($mean == 0.0) {
1116
+ return PEAR::raiseError('cannot calculate the coefficient '.
1117
+ 'of variation, mean of sample is zero');
1118
+ }
1119
+ $stDev = $this->stDev();
1120
+ if (PEAR::isError($stDev)) {
1121
+ return $stDev;
1122
+ }
1123
+
1124
+ $this->_calculatedValues['coeffOfVariation'] = $stDev / $mean;
1125
+ }
1126
+ return $this->_calculatedValues['coeffOfVariation'];
1127
+ }/*}}}*/
1128
+
1129
+ /**
1130
+ * Calculates the standard error of the mean.
1131
+ * It is the standard deviation of the sampling distribution of
1132
+ * the mean. The formula is:
1133
+ *
1134
+ * S.E. Mean = SD / (N)^(1/2)
1135
+ *
1136
+ * This formula does not assume a normal distribution, and shows
1137
+ * that the size of the standard error of the mean is inversely
1138
+ * proportional to the square root of the sample size.
1139
+ *
1140
+ * @access public
1141
+ * @return mixed the standard error of the mean on success, a PEAR_Error object otherwise
1142
+ * @see stDev()
1143
+ * @see count()
1144
+ * @see calc()
1145
+ */
1146
+ function stdErrorOfMean() {/*{{{*/
1147
+ if (!array_key_exists('stdErrorOfMean', $this->_calculatedValues)) {
1148
+ $count = $this->count();
1149
+ if (PEAR::isError($count)) {
1150
+ return $count;
1151
+ }
1152
+ $stDev = $this->stDev();
1153
+ if (PEAR::isError($stDev)) {
1154
+ return $stDev;
1155
+ }
1156
+ $this->_calculatedValues['stdErrorOfMean'] = $stDev / sqrt($count);
1157
+ }
1158
+ return $this->_calculatedValues['stdErrorOfMean'];
1159
+ }/*}}}*/
1160
+
1161
+ /**
1162
+ * Calculates the value frequency table of a data set.
1163
+ * Handles cummulative data sets correctly
1164
+ *
1165
+ * @access public
1166
+ * @return mixed an associative array of value=>frequency items on success, a PEAR_Error object otherwise
1167
+ * @see min()
1168
+ * @see max()
1169
+ * @see calc()
1170
+ */
1171
+ function frequency() {/*{{{*/
1172
+ if ($this->_data == null) {
1173
+ return PEAR::raiseError('data has not been set');
1174
+ }
1175
+ if (!array_key_exists('frequency', $this->_calculatedValues)) {
1176
+ if ($this->_dataOption == STATS_DATA_CUMMULATIVE) {
1177
+ $freq = $this->_data;
1178
+ } else {
1179
+ $freq = array();
1180
+ foreach ($this->_data as $val) {
1181
+ $freq["$val"]++;
1182
+ }
1183
+ ksort($freq);
1184
+ }
1185
+ $this->_calculatedValues['frequency'] = $freq;
1186
+ }
1187
+ return $this->_calculatedValues['frequency'];
1188
+ }/*}}}*/
1189
+
1190
+ /**
1191
+ * The quartiles are defined as the values that divide a sorted
1192
+ * data set into four equal-sized subsets, and correspond to the
1193
+ * 25th, 50th, and 75th percentiles.
1194
+ *
1195
+ * @access public
1196
+ * @return mixed an associative array of quartiles on success, a PEAR_Error otherwise
1197
+ * @see percentile()
1198
+ */
1199
+ function quartiles() {/*{{{*/
1200
+ if (!array_key_exists('quartiles', $this->_calculatedValues)) {
1201
+ $q1 = $this->percentile(25);
1202
+ if (PEAR::isError($q1)) {
1203
+ return $q1;
1204
+ }
1205
+ $q2 = $this->percentile(50);
1206
+ if (PEAR::isError($q2)) {
1207
+ return $q2;
1208
+ }
1209
+ $q3 = $this->percentile(75);
1210
+ if (PEAR::isError($q3)) {
1211
+ return $q3;
1212
+ }
1213
+ $this->_calculatedValues['quartiles'] = array (
1214
+ '25' => $q1,
1215
+ '50' => $q2,
1216
+ '75' => $q3
1217
+ );
1218
+ }
1219
+ return $this->_calculatedValues['quartiles'];
1220
+ }/*}}}*/
1221
+
1222
+ /**
1223
+ * The interquartile mean is defined as the mean of the values left
1224
+ * after discarding the lower 25% and top 25% ranked values, i.e.:
1225
+ *
1226
+ * interquart mean = mean(<P(25),P(75)>)
1227
+ *
1228
+ * where: P = percentile
1229
+ *
1230
+ * @todo need to double check the equation
1231
+ * @access public
1232
+ * @return mixed a numeric value on success, a PEAR_Error otherwise
1233
+ * @see quartiles()
1234
+ */
1235
+ function interquartileMean() {/*{{{*/
1236
+ if (!array_key_exists('interquartileMean', $this->_calculatedValues)) {
1237
+ $quart = $this->quartiles();
1238
+ if (PEAR::isError($quart)) {
1239
+ return $quart;
1240
+ }
1241
+ $q3 = $quart['75'];
1242
+ $q1 = $quart['25'];
1243
+ $sum = 0;
1244
+ $n = 0;
1245
+ foreach ($this->getData(true) as $val) {
1246
+ if ($val >= $q1 && $val <= $q3) {
1247
+ $sum += $val;
1248
+ ++$n;
1249
+ }
1250
+ }
1251
+ if ($n == 0) {
1252
+ return PEAR::raiseError('error calculating interquartile mean, '.
1253
+ 'empty interquartile range of values.');
1254
+ }
1255
+ $this->_calculatedValues['interquartileMean'] = $sum / $n;
1256
+ }
1257
+ return $this->_calculatedValues['interquartileMean'];
1258
+ }/*}}}*/
1259
+
1260
+ /**
1261
+ * The interquartile range is the distance between the 75th and 25th
1262
+ * percentiles. Basically the range of the middle 50% of the data set,
1263
+ * and thus is not affected by outliers or extreme values.
1264
+ *
1265
+ * interquart range = P(75) - P(25)
1266
+ *
1267
+ * where: P = percentile
1268
+ *
1269
+ * @access public
1270
+ * @return mixed a numeric value on success, a PEAR_Error otherwise
1271
+ * @see quartiles()
1272
+ */
1273
+ function interquartileRange() {/*{{{*/
1274
+ if (!array_key_exists('interquartileRange', $this->_calculatedValues)) {
1275
+ $quart = $this->quartiles();
1276
+ if (PEAR::isError($quart)) {
1277
+ return $quart;
1278
+ }
1279
+ $q3 = $quart['75'];
1280
+ $q1 = $quart['25'];
1281
+ $this->_calculatedValues['interquartileRange'] = $q3 - $q1;
1282
+ }
1283
+ return $this->_calculatedValues['interquartileRange'];
1284
+ }/*}}}*/
1285
+
1286
+ /**
1287
+ * The quartile deviation is half of the interquartile range value
1288
+ *
1289
+ * quart dev = (P(75) - P(25)) / 2
1290
+ *
1291
+ * where: P = percentile
1292
+ *
1293
+ * @access public
1294
+ * @return mixed a numeric value on success, a PEAR_Error otherwise
1295
+ * @see quartiles()
1296
+ * @see interquartileRange()
1297
+ */
1298
+ function quartileDeviation() {/*{{{*/
1299
+ if (!array_key_exists('quartileDeviation', $this->_calculatedValues)) {
1300
+ $iqr = $this->interquartileRange();
1301
+ if (PEAR::isError($iqr)) {
1302
+ return $iqr;
1303
+ }
1304
+ $this->_calculatedValues['quartileDeviation'] = $iqr / 2;
1305
+ }
1306
+ return $this->_calculatedValues['quartileDeviation'];
1307
+ }/*}}}*/
1308
+
1309
+ /**
1310
+ * The quartile variation coefficient is defines as follows:
1311
+ *
1312
+ * quart var coeff = 100 * (P(75) - P(25)) / (P(75) + P(25))
1313
+ *
1314
+ * where: P = percentile
1315
+ *
1316
+ * @todo need to double check the equation
1317
+ * @access public
1318
+ * @return mixed a numeric value on success, a PEAR_Error otherwise
1319
+ * @see quartiles()
1320
+ */
1321
+ function quartileVariationCoefficient() {/*{{{*/
1322
+ if (!array_key_exists('quartileVariationCoefficient', $this->_calculatedValues)) {
1323
+ $quart = $this->quartiles();
1324
+ if (PEAR::isError($quart)) {
1325
+ return $quart;
1326
+ }
1327
+ $q3 = $quart['75'];
1328
+ $q1 = $quart['25'];
1329
+ $d = $q3 - $q1;
1330
+ $s = $q3 + $q1;
1331
+ $this->_calculatedValues['quartileVariationCoefficient'] = 100 * $d / $s;
1332
+ }
1333
+ return $this->_calculatedValues['quartileVariationCoefficient'];
1334
+ }/*}}}*/
1335
+
1336
+ /**
1337
+ * The quartile skewness coefficient (also known as Bowley Skewness),
1338
+ * is defined as follows:
1339
+ *
1340
+ * quart skewness coeff = (P(25) - 2*P(50) + P(75)) / (P(75) - P(25))
1341
+ *
1342
+ * where: P = percentile
1343
+ *
1344
+ * @todo need to double check the equation
1345
+ * @access public
1346
+ * @return mixed a numeric value on success, a PEAR_Error otherwise
1347
+ * @see quartiles()
1348
+ */
1349
+ function quartileSkewnessCoefficient() {/*{{{*/
1350
+ if (!array_key_exists('quartileSkewnessCoefficient', $this->_calculatedValues)) {
1351
+ $quart = $this->quartiles();
1352
+ if (PEAR::isError($quart)) {
1353
+ return $quart;
1354
+ }
1355
+ $q3 = $quart['75'];
1356
+ $q2 = $quart['50'];
1357
+ $q1 = $quart['25'];
1358
+ $d = $q3 - 2*$q2 + $q1;
1359
+ $s = $q3 - $q1;
1360
+ $this->_calculatedValues['quartileSkewnessCoefficient'] = $d / $s;
1361
+ }
1362
+ return $this->_calculatedValues['quartileSkewnessCoefficient'];
1363
+ }/*}}}*/
1364
+
1365
+ /**
1366
+ * The pth percentile is the value such that p% of the a sorted data set
1367
+ * is smaller than it, and (100 - p)% of the data is larger.
1368
+ *
1369
+ * A quick algorithm to pick the appropriate value from a sorted data
1370
+ * set is as follows:
1371
+ *
1372
+ * - Count the number of values: n
1373
+ * - Calculate the position of the value in the data list: i = p * (n + 1)
1374
+ * - if i is an integer, return the data at that position
1375
+ * - if i < 1, return the minimum of the data set
1376
+ * - if i > n, return the maximum of the data set
1377
+ * - otherwise, average the entries at adjacent positions to i
1378
+ *
1379
+ * The median is the 50th percentile value.
1380
+ *
1381
+ * @todo need to double check generality of the algorithm
1382
+ *
1383
+ * @access public
1384
+ * @param numeric $p the percentile to estimate, e.g. 25 for 25th percentile
1385
+ * @return mixed a numeric value on success, a PEAR_Error otherwise
1386
+ * @see quartiles()
1387
+ * @see median()
1388
+ */
1389
+ function percentile($p) {/*{{{*/
1390
+ $count = $this->count();
1391
+ if (PEAR::isError($count)) {
1392
+ return $count;
1393
+ }
1394
+ if ($this->_dataOption == STATS_DATA_CUMMULATIVE) {
1395
+ $data =& $this->_dataExpanded;
1396
+ } else {
1397
+ $data =& $this->_data;
1398
+ }
1399
+ $obsidx = $p * ($count + 1) / 100;
1400
+ if (intval($obsidx) == $obsidx) {
1401
+ return $data[($obsidx - 1)];
1402
+ } elseif ($obsidx < 1) {
1403
+ return $data[0];
1404
+ } elseif ($obsidx > $count) {
1405
+ return $data[($count - 1)];
1406
+ } else {
1407
+ $left = floor($obsidx - 1);
1408
+ $right = ceil($obsidx - 1);
1409
+ return ($data[$left] + $data[$right]) / 2;
1410
+ }
1411
+ }/*}}}*/
1412
+
1413
+ // private methods
1414
+
1415
+ /**
1416
+ * Utility function to calculate: SUM { (xi - mean)^n }
1417
+ *
1418
+ * @access private
1419
+ * @param numeric $power the exponent
1420
+ * @param optional double $mean the data set mean value
1421
+ * @return mixed the sum on success, a PEAR_Error object otherwise
1422
+ *
1423
+ * @see stDev()
1424
+ * @see variaceWithMean();
1425
+ * @see skewness();
1426
+ * @see kurtosis();
1427
+ */
1428
+ function __sumdiff($power, $mean=null) {/*{{{*/
1429
+ if ($this->_data == null) {
1430
+ return PEAR::raiseError('data has not been set');
1431
+ }
1432
+ if (is_null($mean)) {
1433
+ $mean = $this->mean();
1434
+ if (PEAR::isError($mean)) {
1435
+ return $mean;
1436
+ }
1437
+ }
1438
+ $sdiff = 0;
1439
+ if ($this->_dataOption == STATS_DATA_CUMMULATIVE) {
1440
+ foreach ($this->_data as $val=>$freq) {
1441
+ $sdiff += $freq * pow((double)($val - $mean), (double)$power);
1442
+ }
1443
+ } else {
1444
+ foreach ($this->_data as $val)
1445
+ $sdiff += pow((double)($val - $mean), (double)$power);
1446
+ }
1447
+ return $sdiff;
1448
+ }/*}}}*/
1449
+
1450
+ /**
1451
+ * Utility function to calculate the variance with or without
1452
+ * a fixed mean
1453
+ *
1454
+ * @access private
1455
+ * @param $mean the fixed mean to use, null as default
1456
+ * @return mixed a numeric value on success, a PEAR_Error otherwise
1457
+ * @see variance()
1458
+ * @see varianceWithMean()
1459
+ */
1460
+ function __calcVariance($mean = null) {/*{{{*/
1461
+ if ($this->_data == null) {
1462
+ return PEAR::raiseError('data has not been set');
1463
+ }
1464
+ $sumdiff2 = $this->__sumdiff(2, $mean);
1465
+ if (PEAR::isError($sumdiff2)) {
1466
+ return $sumdiff2;
1467
+ }
1468
+ $count = $this->count();
1469
+ if (PEAR::isError($count)) {
1470
+ return $count;
1471
+ }
1472
+ if ($count == 1) {
1473
+ return PEAR::raiseError('cannot calculate variance of a singe data point');
1474
+ }
1475
+ return ($sumdiff2 / ($count - 1));
1476
+ }/*}}}*/
1477
+
1478
+ /**
1479
+ * Utility function to calculate the absolute deviation with or without
1480
+ * a fixed mean
1481
+ *
1482
+ * @access private
1483
+ * @param $mean the fixed mean to use, null as default
1484
+ * @return mixed a numeric value on success, a PEAR_Error otherwise
1485
+ * @see absDev()
1486
+ * @see absDevWithMean()
1487
+ */
1488
+ function __calcAbsoluteDeviation($mean = null) {/*{{{*/
1489
+ if ($this->_data == null) {
1490
+ return PEAR::raiseError('data has not been set');
1491
+ }
1492
+ $count = $this->count();
1493
+ if (PEAR::isError($count)) {
1494
+ return $count;
1495
+ }
1496
+ $sumabsdev = $this->__sumabsdev($mean);
1497
+ if (PEAR::isError($sumabsdev)) {
1498
+ return $sumabsdev;
1499
+ }
1500
+ return $sumabsdev / $count;
1501
+ }/*}}}*/
1502
+
1503
+ /**
1504
+ * Utility function to calculate: SUM { | xi - mean | }
1505
+ *
1506
+ * @access private
1507
+ * @param optional double $mean the mean value for the set or population
1508
+ * @return mixed the sum on success, a PEAR_Error object otherwise
1509
+ *
1510
+ * @see absDev()
1511
+ * @see absDevWithMean()
1512
+ */
1513
+ function __sumabsdev($mean=null) {/*{{{*/
1514
+ if ($this->_data == null) {
1515
+ return PEAR::raiseError('data has not been set');
1516
+ }
1517
+ if (is_null($mean)) {
1518
+ $mean = $this->mean();
1519
+ }
1520
+ $sdev = 0;
1521
+ if ($this->_dataOption == STATS_DATA_CUMMULATIVE) {
1522
+ foreach ($this->_data as $val=>$freq) {
1523
+ $sdev += $freq * abs($val - $mean);
1524
+ }
1525
+ } else {
1526
+ foreach ($this->_data as $val) {
1527
+ $sdev += abs($val - $mean);
1528
+ }
1529
+ }
1530
+ return $sdev;
1531
+ }/*}}}*/
1532
+
1533
+ /**
1534
+ * Utility function to format a PEAR_Error to be used by calc(),
1535
+ * calcBasic() and calcFull()
1536
+ *
1537
+ * @access private
1538
+ * @param mixed $v value to be formatted
1539
+ * @param boolean $returnErrorObject whether the raw PEAR_Error (when true, default),
1540
+ * or only the error message will be returned (when false)
1541
+ * @return mixed if the value is a PEAR_Error object, and $useErrorObject
1542
+ * is false, then a string with the error message will be returned,
1543
+ * otherwise the value will not be modified and returned as passed.
1544
+ */
1545
+ function __format($v, $useErrorObject=true) {/*{{{*/
1546
+ if (PEAR::isError($v) && $useErrorObject == false) {
1547
+ return $v->getMessage();
1548
+ } else {
1549
+ return $v;
1550
+ }
1551
+ }/*}}}*/
1552
+
1553
+ /**
1554
+ * Utility function to validate the data and modify it
1555
+ * according to the current null handling option
1556
+ *
1557
+ * @access private
1558
+ * @return mixed true on success, a PEAR_Error object otherwise
1559
+ *
1560
+ * @see setData()
1561
+ */
1562
+ function _validate() {/*{{{*/
1563
+ $flag = ($this->_dataOption == STATS_DATA_CUMMULATIVE);
1564
+ foreach ($this->_data as $key=>$value) {
1565
+ $d = ($flag) ? $key : $value;
1566
+ $v = ($flag) ? $value : $key;
1567
+ if (!is_numeric($d)) {
1568
+ switch ($this->_nullOption) {
1569
+ case STATS_IGNORE_NULL :
1570
+ unset($this->_data["$key"]);
1571
+ break;
1572
+ case STATS_USE_NULL_AS_ZERO:
1573
+ if ($flag) {
1574
+ unset($this->_data["$key"]);
1575
+ $this->_data[0] += $v;
1576
+ } else {
1577
+ $this->_data[$key] = 0;
1578
+ }
1579
+ break;
1580
+ case STATS_REJECT_NULL :
1581
+ default:
1582
+ return PEAR::raiseError('data rejected, contains NULL values');
1583
+ break;
1584
+ }
1585
+ }
1586
+ }
1587
+ if ($flag) {
1588
+ ksort($this->_data);
1589
+ $this->_dataExpanded = array();
1590
+ foreach ($this->_data as $val=>$freq) {
1591
+ $this->_dataExpanded = array_pad($this->_dataExpanded, count($this->_dataExpanded) + $freq, $val);
1592
+ }
1593
+ sort($this->_dataExpanded);
1594
+ } else {
1595
+ sort($this->_data);
1596
+ }
1597
+ return true;
1598
+ }/*}}}*/
1599
+
1600
+ }/*}}}*/
1601
+
1602
+ // vim: ts=4:sw=4:et:
1603
+ // vim6: fdl=1: fdm=marker:
1604
+
1605
+ ?>
lib/phpExcel/PHPExcel/Shared/JAMA/examples/benchmark.php ADDED
@@ -0,0 +1,263 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ error_reporting(E_ALL);
4
+
5
+ /**
6
+ * @package JAMA
7
+ */
8
+
9
+ require_once '../Matrix.php';
10
+ require_once 'Stats.php';
11
+
12
+
13
+ /**
14
+ * Example of use of Matrix Class, featuring magic squares.
15
+ */
16
+ class Benchmark {
17
+ public $stat;
18
+
19
+
20
+ /**
21
+ * Simple function to replicate PHP 5 behaviour
22
+ */
23
+ function microtime_float() {
24
+ list($usec, $sec) = explode(" ", microtime());
25
+
26
+ return ((float)$usec + (float)$sec);
27
+ } // function microtime_float()
28
+
29
+
30
+ function displayStats($times = null) {
31
+ $this->stat->setData($times);
32
+ $stats = $this->stat->calcFull();
33
+
34
+ echo '<table style="margin-left:32px;">';
35
+ echo '<tr><td style="text-align:right;"><b>n:</b><td style="text-align:right;">' . $stats['count'] . ' </td></tr>';
36
+ echo '<tr><td style="text-align:right;"><b>Mean:</b><td style="text-align:right;">' . $stats['mean'] . ' </td></tr>';
37
+ echo '<tr><td style="text-align:right;"><b>Min.:</b><td style="text-align:right;">' . $stats['min'] . ' </td></tr>';
38
+ echo '<tr><td style="text-align:right;"><b>Max.:</b><td style="text-align:right;">' . $stats['max'] . ' </td></tr>';
39
+ echo '<tr><td style="text-align:right;"><b>&sigma;:</b><td style="text-align:right;">' . $stats['stdev'] . ' </td></tr>';
40
+ echo '<tr><td style="text-align:right;"><b>Variance:</b><td style="text-align:right;">' . $stats['variance'] . ' </td></tr>';
41
+ echo '<tr><td style="text-align:right;"><b>Range:</b><td style="text-align:right;">' . $stats['range'] . ' </td></tr>';
42
+ echo '</table>';
43
+
44
+ return $stats;
45
+ } // function displayStats()
46
+
47
+
48
+ function runEig($n = 4, $t = 100) {
49
+ $times = array();
50
+
51
+ for ($i = 0; $i < $t; ++$i) {
52
+ $M = Matrix::random($n, $n);
53
+ $start_time = $this->microtime_float();
54
+ $E = new EigenvalueDecomposition($M);
55
+ $stop_time = $this->microtime_float();
56
+ $times[] = $stop_time - $start_time;
57
+ }
58
+
59
+ return $times;
60
+ } // function runEig()
61
+
62
+
63
+ function runLU($n = 4, $t = 100) {
64
+ $times = array();
65
+
66
+ for ($i = 0; $i < $t; ++$i) {
67
+ $M = Matrix::random($n, $n);
68
+ $start_time = $this->microtime_float();
69
+ $E = new LUDecomposition($M);
70
+ $stop_time = $this->microtime_float();
71
+ $times[] = $stop_time - $start_time;
72
+ }
73
+
74
+ return $times;
75
+ } // function runLU()
76
+
77
+
78
+ function runQR($n = 4, $t = 100) {
79
+ $times = array();
80
+
81
+ for ($i = 0; $i < $t; ++$i) {
82
+ $M = Matrix::random($n, $n);
83
+ $start_time = $this->microtime_float();
84
+ $E = new QRDecomposition($M);
85
+ $stop_time = $this->microtime_float();
86
+ $times[] = $stop_time - $start_time;
87
+ }
88
+
89
+ return $times;
90
+ } // function runQR()
91
+
92
+
93
+ function runCholesky($n = 4, $t = 100) {
94
+ $times = array();
95
+
96
+ for ($i = 0; $i < $t; ++$i) {
97
+ $M = Matrix::random($n, $n);
98
+ $start_time = $this->microtime_float();
99
+ $E = new CholeskyDecomposition($M);
100
+ $stop_time = $this->microtime_float();
101
+ $times[] = $stop_time - $start_time;
102
+ }
103
+
104
+ return $times;
105
+ } // function runCholesky()
106
+
107
+
108
+ function runSVD($n = 4, $t = 100) {
109
+ $times = array();
110
+
111
+ for ($i = 0; $i < $t; ++$i) {
112
+ $M = Matrix::random($n, $n);
113
+ $start_time = $this->microtime_float();
114
+ $E = new SingularValueDecomposition($M);
115
+ $stop_time = $this->microtime_float();
116
+ $times[] = $stop_time - $start_time;
117
+ }
118
+
119
+ return $times;
120
+ } // function runSVD()
121
+
122
+
123
+ function run() {
124
+ $n = 8;
125
+ $t = 16;
126
+ $sum = 0;
127
+ echo "<b>Cholesky decomposition: $t random {$n}x{$n} matrices</b><br />";
128
+ $r = $this->displayStats($this->runCholesky($n, $t));
129
+ $sum += $r['mean'] * $n;
130
+
131
+ echo '<hr />';
132
+
133
+ echo "<b>Eigenvalue decomposition: $t random {$n}x{$n} matrices</b><br />";
134
+ $r = $this->displayStats($this->runEig($n, $t));
135
+ $sum += $r['mean'] * $n;
136
+
137
+ echo '<hr />';
138
+
139
+ echo "<b>LU decomposition: $t random {$n}x{$n} matrices</b><br />";
140
+ $r = $this->displayStats($this->runLU($n, $t));
141
+ $sum += $r['mean'] * $n;
142
+
143
+ echo '<hr />';
144
+
145
+ echo "<b>QR decomposition: $t random {$n}x{$n} matrices</b><br />";
146
+ $r = $this->displayStats($this->runQR($n, $t));
147
+ $sum += $r['mean'] * $n;
148
+
149
+ echo '<hr />';
150
+
151
+ echo "<b>Singular Value decomposition: $t random {$n}x{$n} matrices</b><br />";
152
+ $r = $this->displayStats($this->runSVD($n, $t));
153
+ $sum += $r['mean'] * $n;
154
+
155
+ return $sum;
156
+ } // function run()
157
+
158
+
159
+ public function __construct() {
160
+ $this->stat = new Base();
161
+ } // function Benchmark()
162
+
163
+ } // class Benchmark (end MagicSquareExample)
164
+
165
+
166
+ $benchmark = new Benchmark();
167
+
168
+ switch($_REQUEST['decomposition']) {
169
+ case 'cholesky':
170
+ $m = array();
171
+ for ($i = 2; $i <= 8; $i *= 2) {
172
+ $t = 32 / $i;
173
+ echo "<b>Cholesky decomposition: $t random {$i}x{$i} matrices</b><br />";
174
+ $s = $benchmark->displayStats($benchmark->runCholesky($i, $t));
175
+ $m[$i] = $s['mean'];
176
+ echo "<br />";
177
+ }
178
+ echo '<pre>';
179
+ foreach($m as $x => $y) {
180
+ echo "$x\t" . 1000*$y . "\n";
181
+ }
182
+ echo '</pre>';
183
+ break;
184
+ case 'eigenvalue':
185
+ $m = array();
186
+ for ($i = 2; $i <= 8; $i *= 2) {
187
+ $t = 32 / $i;
188
+ echo "<b>Eigenvalue decomposition: $t random {$i}x{$i} matrices</b><br />";
189
+ $s = $benchmark->displayStats($benchmark->runEig($i, $t));
190
+ $m[$i] = $s['mean'];
191
+ echo "<br />";
192
+ }
193
+ echo '<pre>';
194
+ foreach($m as $x => $y) {
195
+ echo "$x\t" . 1000*$y . "\n";
196
+ }
197
+ echo '</pre>';
198
+ break;
199
+ case 'lu':
200
+ $m = array();
201
+ for ($i = 2; $i <= 8; $i *= 2) {
202
+ $t = 32 / $i;
203
+ echo "<b>LU decomposition: $t random {$i}x{$i} matrices</b><br />";
204
+ $s = $benchmark->displayStats($benchmark->runLU($i, $t));
205
+ $m[$i] = $s['mean'];
206
+ echo "<br />";
207
+ }
208
+ echo '<pre>';
209
+ foreach($m as $x => $y) {
210
+ echo "$x\t" . 1000*$y . "\n";
211
+ }
212
+ echo '</pre>';
213
+ break;
214
+ case 'qr':
215
+ $m = array();
216
+ for ($i = 2; $i <= 8; $i *= 2) {
217
+ $t = 32 / $i;
218
+ echo "<b>QR decomposition: $t random {$i}x{$i} matrices</b><br />";
219
+ $s = $benchmark->displayStats($benchmark->runQR($i, $t));
220
+ $m[$i] = $s['mean'];
221
+ echo "<br />";
222
+ }
223
+ echo '<pre>';
224
+ foreach($m as $x => $y) {
225
+ echo "$x\t" . 1000*$y . "\n";
226
+ }
227
+ echo '</pre>';
228
+ break;
229
+ case 'svd':
230
+ $m = array();
231
+ for($i = 2; $i <= 8; $i *= 2) {
232
+ $t = 32 / $i;
233
+ echo "<b>Singular value decomposition: $t random {$i}x{$i} matrices</b><br />";
234
+ $s = $benchmark->displayStats($benchmark->runSVD($i, $t));
235
+ $m[$i] = $s['mean'];
236
+ echo "<br />";
237
+ }
238
+ echo '<pre>';
239
+ foreach($m as $x => $y) {
240
+ echo "$x\t" . 1000*$y . "\n";
241
+ }
242
+ echo '</pre>';
243
+ break;
244
+ case 'all':
245
+ $s = $benchmark->run();
246
+ print("<br /><b>Total<b>: {$s}s<br />");
247
+ break;
248
+ default:
249
+ ?>
250
+ <ul>
251
+ <li><a href="benchmark.php?decomposition=all">Complete Benchmark</a>
252
+ <ul>
253
+ <li><a href="benchmark.php?decomposition=cholesky">Cholesky</a></li>
254
+ <li><a href="benchmark.php?decomposition=eigenvalue">Eigenvalue</a></li>
255
+ <li><a href="benchmark.php?decomposition=lu">LU</a></li>
256
+ <li><a href="benchmark.php?decomposition=qr">QR</a></li>
257
+ <li><a href="benchmark.php?decomposition=svd">Singular Value</a></li>
258
+ </ul>
259
+ </li>
260
+ </ul>
261
+ <?php
262
+ break;
263
+ }
lib/phpExcel/PHPExcel/Shared/JAMA/examples/polyfit.php ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ require_once "../Matrix.php";
3
+ /*
4
+ * @package JAMA
5
+ * @author Michael Bommarito
6
+ * @author Paul Meagher
7
+ * @version 0.1
8
+ *
9
+ * Function to fit an order n polynomial function through
10
+ * a series of x-y data points using least squares.
11
+ *
12
+ * @param $X array x values
13
+ * @param $Y array y values
14
+ * @param $n int order of polynomial to be used for fitting
15
+ * @returns array $coeffs of polynomial coefficients
16
+ * Pre-Conditions: the system is not underdetermined: sizeof($X) > $n+1
17
+ */
18
+ function polyfit($X, $Y, $n) {
19
+ for ($i = 0; $i < sizeof($X); ++$i)
20
+ for ($j = 0; $j <= $n; ++$j)
21
+ $A[$i][$j] = pow($X[$i], $j);
22
+ for ($i=0; $i < sizeof($Y); ++$i)
23
+ $B[$i] = array($Y[$i]);
24
+ $matrixA = new Matrix($A);
25
+ $matrixB = new Matrix($B);
26
+ $C = $matrixA->solve($matrixB);
27
+ return $C->getMatrix(0, $n, 0, 1);
28
+ }
29
+
30
+ function printpoly( $C = null ) {
31
+ for($i = $C->m - 1; $i >= 0; --$i) {
32
+ $r = $C->get($i, 0);
33
+ if ( abs($r) <= pow(10, -9) )
34
+ $r = 0;
35
+ if ($i == $C->m - 1)
36
+ echo $r . "x<sup>$i</sup>";
37
+ else if ($i < $C->m - 1)
38
+ echo " + " . $r . "x<sup>$i</sup>";
39
+ else if ($i == 0)
40
+ echo " + " . $r;
41
+ }
42
+ }
43
+
44
+ $X = array(0,1,2,3,4,5);
45
+ $Y = array(4,3,12,67,228, 579);
46
+ $points = new Matrix(array($X, $Y));
47
+ $points->toHTML();
48
+ printpoly(polyfit($X, $Y, 4));
49
+
50
+ echo '<hr />';
51
+
52
+ $X = array(0,1,2,3,4,5);
53
+ $Y = array(1,2,5,10,17, 26);
54
+ $points = new Matrix(array($X, $Y));
55
+ $points->toHTML();
56
+ printpoly(polyfit($X, $Y, 2));
57
+
58
+ echo '<hr />';
59
+
60
+ $X = array(0,1,2,3,4,5,6);
61
+ $Y = array(-90,-104,-178,-252,-26, 1160, 4446);
62
+ $points = new Matrix(array($X, $Y));
63
+ $points->toHTML();
64
+ printpoly(polyfit($X, $Y, 5));
65
+
66
+ echo '<hr />';
67
+
68
+ $X = array(0,1,2,3,4);
69
+ $Y = array(mt_rand(0, 10), mt_rand(40, 80), mt_rand(240, 400), mt_rand(1800, 2215), mt_rand(8000, 9000));
70
+ $points = new Matrix(array($X, $Y));
71
+ $points->toHTML();
72
+ printpoly(polyfit($X, $Y, 3));
73
+ ?>
lib/phpExcel/PHPExcel/Shared/JAMA/examples/tile.php ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ include "../Matrix.php";
4
+
5
+ /**
6
+ * Tiling of matrix X in [rowWise by colWise] dimension. Tiling
7
+ * creates a larger matrix than the original data X. Example, if
8
+ * X is to be tiled in a [3 x 4] manner, then:
9
+ *
10
+ * / \
11
+ * | X X X X |
12
+ * C = | X X X X |
13
+ * | X X X X |
14
+ * \ /
15
+ *
16
+ * @param X Matrix
17
+ * @param rowWise int
18
+ * @param colWise int
19
+ * @return Matrix
20
+ */
21
+
22
+ function tile(&$X, $rowWise, $colWise){
23
+
24
+ $xArray = $X->getArray();
25
+ print_r($xArray);
26
+
27
+ $countRow = 0;
28
+ $countColumn = 0;
29
+
30
+ $m = $X->getRowDimension();
31
+ $n = $X->getColumnDimension();
32
+
33
+ if( $rowWise<1 || $colWise<1 ){
34
+ die("tile : Array index is out-of-bound.");
35
+ }
36
+
37
+ $newRowDim = $m*$rowWise;
38
+ $newColDim = $n*$colWise;
39
+
40
+ $result = array();
41
+
42
+ for($i=0 ; $i<$newRowDim; ++$i) {
43
+
44
+ $holder = array();
45
+
46
+ for($j=0 ; $j<$newColDim ; ++$j) {
47
+
48
+ $holder[$j] = $xArray[$countRow][$countColumn++];
49
+
50
+ // reset the column-index to zero to avoid reference to out-of-bound index in xArray[][]
51
+
52
+ if($countColumn == $n) { $countColumn = 0; }
53
+
54
+ } // end for
55
+
56
+ ++$countRow;
57
+
58
+ // reset the row-index to zero to avoid reference to out-of-bound index in xArray[][]
59
+
60
+ if($countRow == $m) { $countRow = 0; }
61
+
62
+ $result[$i] = $holder;
63
+
64
+ } // end for
65
+
66
+ return new Matrix($result);
67
+
68
+ }
69
+
70
+
71
+ $X =array(1,2,3,4,5,6,7,8,9);
72
+ $nRow = 3;
73
+ $nCol = 3;
74
+ $tiled_matrix = tile(new Matrix($X), $nRow, $nCol);
75
+ echo "<pre>";
76
+ print_r($tiled_matrix);
77
+ echo "</pre>";
78
+ ?>
lib/phpExcel/PHPExcel/Shared/JAMA/tests/TestMatrix.php ADDED
@@ -0,0 +1,415 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ require_once "../Matrix.php";
4
+
5
+ class TestMatrix {
6
+
7
+ function TestMatrix() {
8
+
9
+ // define test variables
10
+
11
+ $errorCount = 0;
12
+ $warningCount = 0;
13
+ $columnwise = array(1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.);
14
+ $rowwise = array(1.,4.,7.,10.,2.,5.,8.,11.,3.,6.,9.,12.);
15
+ $avals = array(array(1.,4.,7.,10.),array(2.,5.,8.,11.),array(3.,6.,9.,12.));
16
+ $rankdef = $avals;
17
+ $tvals = array(array(1.,2.,3.),array(4.,5.,6.),array(7.,8.,9.),array(10.,11.,12.));
18
+ $subavals = array(array(5.,8.,11.),array(6.,9.,12.));
19
+ $rvals = array(array(1.,4.,7.),array(2.,5.,8.,11.),array(3.,6.,9.,12.));
20
+ $pvals = array(array(1.,1.,1.),array(1.,2.,3.),array(1.,3.,6.));
21
+ $ivals = array(array(1.,0.,0.,0.),array(0.,1.,0.,0.),array(0.,0.,1.,0.));
22
+ $evals = array(array(0.,1.,0.,0.),array(1.,0.,2.e-7,0.),array(0.,-2.e-7,0.,1.),array(0.,0.,1.,0.));
23
+ $square = array(array(166.,188.,210.),array(188.,214.,240.),array(210.,240.,270.));
24
+ $sqSolution = array(array(13.),array(15.));
25
+ $condmat = array(array(1.,3.),array(7.,9.));
26
+ $rows = 3;
27
+ $cols = 4;
28
+ $invalidID = 5; /* should trigger bad shape for construction with val */
29
+ $raggedr = 0; /* (raggedr,raggedc) should be out of bounds in ragged array */
30
+ $raggedc = 4;
31
+ $validID = 3; /* leading dimension of intended test Matrices */
32
+ $nonconformld = 4; /* leading dimension which is valid, but nonconforming */
33
+ $ib = 1; /* index ranges for sub Matrix */
34
+ $ie = 2;
35
+ $jb = 1;
36
+ $je = 3;
37
+ $rowindexset = array(1,2);
38
+ $badrowindexset = array(1,3);
39
+ $columnindexset = array(1,2,3);
40
+ $badcolumnindexset = array(1,2,4);
41
+ $columnsummax = 33.;
42
+ $rowsummax = 30.;
43
+ $sumofdiagonals = 15;
44
+ $sumofsquares = 650;
45
+
46
+ /**
47
+ * Test matrix methods
48
+ */
49
+
50
+ /**
51
+ * Constructors and constructor-like methods:
52
+ *
53
+ * Matrix(double[], int)
54
+ * Matrix(double[][])
55
+ * Matrix(int, int)
56
+ * Matrix(int, int, double)
57
+ * Matrix(int, int, double[][])
58
+ * constructWithCopy(double[][])
59
+ * random(int,int)
60
+ * identity(int)
61
+ */
62
+ echo "<p>Testing constructors and constructor-like methods...</p>";
63
+
64
+ $A = new Matrix($columnwise, 3);
65
+ if($A instanceof Matrix) {
66
+ $this->try_success("Column-packed constructor...");
67
+ } else
68
+ $errorCount = $this->try_failure($errorCount, "Column-packed constructor...", "Unable to construct Matrix");
69
+
70
+ $T = new Matrix($tvals);
71
+ if($T instanceof Matrix)
72
+ $this->try_success("2D array constructor...");
73
+ else
74
+ $errorCount = $this->try_failure($errorCount, "2D array constructor...", "Unable to construct Matrix");
75
+
76
+ $A = new Matrix($columnwise, $validID);
77
+ $B = new Matrix($avals);
78
+ $tmp = $B->get(0,0);
79
+ $avals[0][0] = 0.0;
80
+ $C = $B->minus($A);
81
+ $avals[0][0] = $tmp;
82
+ $B = Matrix::constructWithCopy($avals);
83
+ $tmp = $B->get(0,0);
84
+ $avals[0][0] = 0.0;
85
+ /** check that constructWithCopy behaves properly **/
86
+ if ( ( $tmp - $B->get(0,0) ) != 0.0 )
87
+ $errorCount = $this->try_failure($errorCount,"constructWithCopy... ","copy not effected... data visible outside");
88
+ else
89
+ $this->try_success("constructWithCopy... ","");
90
+
91
+ $I = new Matrix($ivals);
92
+ if ( $this->checkMatrices($I,Matrix::identity(3,4)) )
93
+ $this->try_success("identity... ","");
94
+ else
95
+ $errorCount = $this->try_failure($errorCount,"identity... ","identity Matrix not successfully created");
96
+
97
+ /**
98
+ * Access Methods:
99
+ *
100
+ * getColumnDimension()
101
+ * getRowDimension()
102
+ * getArray()
103
+ * getArrayCopy()
104
+ * getColumnPackedCopy()
105
+ * getRowPackedCopy()
106
+ * get(int,int)
107
+ * getMatrix(int,int,int,int)
108
+ * getMatrix(int,int,int[])
109
+ * getMatrix(int[],int,int)
110
+ * getMatrix(int[],int[])
111
+ * set(int,int,double)
112
+ * setMatrix(int,int,int,int,Matrix)
113
+ * setMatrix(int,int,int[],Matrix)
114
+ * setMatrix(int[],int,int,Matrix)
115
+ * setMatrix(int[],int[],Matrix)
116
+ */
117
+ print "<p>Testing access methods...</p>";
118
+
119
+ $B = new Matrix($avals);
120
+ if($B->getRowDimension() == $rows)
121
+ $this->try_success("getRowDimension...");
122
+ else
123
+ $errorCount = $this->try_failure($errorCount, "getRowDimension...");
124
+
125
+ if($B->getColumnDimension() == $cols)
126
+ $this->try_success("getColumnDimension...");
127
+ else
128
+ $errorCount = $this->try_failure($errorCount, "getColumnDimension...");
129
+
130
+ $barray = $B->getArray();
131
+ if($this->checkArrays($barray, $avals))
132
+ $this->try_success("getArray...");
133
+ else
134
+ $errorCount = $this->try_failure($errorCount, "getArray...");
135
+
136
+ $bpacked = $B->getColumnPackedCopy();
137
+ if($this->checkArrays($bpacked, $columnwise))
138
+ $this->try_success("getColumnPackedCopy...");
139
+ else
140
+ $errorCount = $this->try_failure($errorCount, "getColumnPackedCopy...");
141
+
142
+ $bpacked = $B->getRowPackedCopy();
143
+ if($this->checkArrays($bpacked, $rowwise))
144
+ $this->try_success("getRowPackedCopy...");
145
+ else
146
+ $errorCount = $this->try_failure($errorCount, "getRowPackedCopy...");
147
+
148
+ /**
149
+ * Array-like methods:
150
+ * minus
151
+ * minusEquals
152
+ * plus
153
+ * plusEquals
154
+ * arrayLeftDivide
155
+ * arrayLeftDivideEquals
156
+ * arrayRightDivide
157
+ * arrayRightDivideEquals
158
+ * arrayTimes
159
+ * arrayTimesEquals
160
+ * uminus
161
+ */
162
+ print "<p>Testing array-like methods...</p>";
163
+
164
+ /**
165
+ * I/O methods:
166
+ * read
167
+ * print
168
+ * serializable:
169
+ * writeObject
170
+ * readObject
171
+ */
172
+ print "<p>Testing I/O methods...</p>";
173
+
174
+ /**
175
+ * Test linear algebra methods
176
+ */
177
+ echo "<p>Testing linear algebra methods...<p>";
178
+
179
+ $A = new Matrix($columnwise, 3);
180
+ if( $this->checkMatrices($A->transpose(), $T) )
181
+ $this->try_success("Transpose check...");
182
+ else
183
+ $errorCount = $this->try_failure($errorCount, "Transpose check...", "Matrices are not equal");
184
+
185
+ if($this->checkScalars($A->norm1(), $columnsummax))
186
+ $this->try_success("Maximum column sum...");
187
+ else
188
+ $errorCount = $this->try_failure($errorCount, "Maximum column sum...", "Incorrect: " . $A->norm1() . " != " . $columnsummax);
189
+
190
+ if($this->checkScalars($A->normInf(), $rowsummax))
191
+ $this->try_success("Maximum row sum...");
192
+ else
193
+ $errorCount = $this->try_failure($errorCount, "Maximum row sum...", "Incorrect: " . $A->normInf() . " != " . $rowsummax );
194
+
195
+ if($this->checkScalars($A->normF(), sqrt($sumofsquares)))
196
+ $this->try_success("Frobenius norm...");
197
+ else
198
+ $errorCount = $this->try_failure($errorCount, "Frobenius norm...", "Incorrect:" . $A->normF() . " != " . sqrt($sumofsquares));
199
+
200
+ if($this->checkScalars($A->trace(), $sumofdiagonals))
201
+ $this->try_success("Matrix trace...");
202
+ else
203
+ $errorCount = $this->try_failure($errorCount, "Matrix trace...", "Incorrect: " . $A->trace() . " != " . $sumofdiagonals);
204
+
205
+ $B = $A->getMatrix(0, $A->getRowDimension(), 0, $A->getRowDimension());
206
+ if( $B->det() == 0 )
207
+ $this->try_success("Matrix determinant...");
208
+ else
209
+ $errorCount = $this->try_failure($errorCount, "Matrix determinant...", "Incorrect: " . $B->det() . " != " . 0);
210
+
211
+ $A = new Matrix($columnwise,3);
212
+ $SQ = new Matrix($square);
213
+ if ($this->checkMatrices($SQ, $A->times($A->transpose())))
214
+ $this->try_success("times(Matrix)...");
215
+ else {
216
+ $errorCount = $this->try_failure($errorCount, "times(Matrix)...", "Unable to multiply matrices");
217
+ $SQ->toHTML();
218
+ $AT->toHTML();
219
+ }
220
+
221
+ $A = new Matrix($columnwise, 4);
222
+
223
+ $QR = $A->qr();
224
+ $R = $QR->getR();
225
+ $Q = $QR->getQ();
226
+ if($this->checkMatrices($A, $Q->times($R)))
227
+ $this->try_success("QRDecomposition...","");
228
+ else
229
+ $errorCount = $this->try_failure($errorCount,"QRDecomposition...","incorrect qr decomposition calculation");
230
+
231
+ $A = new Matrix($columnwise, 4);
232
+ $SVD = $A->svd();
233
+ $U = $SVD->getU();
234
+ $S = $SVD->getS();
235
+ $V = $SVD->getV();
236
+ if ($this->checkMatrices($A, $U->times($S->times($V->transpose()))))
237
+ $this->try_success("SingularValueDecomposition...","");
238
+ else
239
+ $errorCount = $this->try_failure($errorCount,"SingularValueDecomposition...","incorrect singular value decomposition calculation");
240
+
241
+ $n = $A->getColumnDimension();
242
+ $A = $A->getMatrix(0,$n-1,0,$n-1);
243
+ $A->set(0,0,0.);
244
+
245
+ $LU = $A->lu();
246
+ $L = $LU->getL();
247
+ if ( $this->checkMatrices($A->getMatrix($LU->getPivot(),0,$n-1), $L->times($LU->getU())) )
248
+ $this->try_success("LUDecomposition...","");
249
+ else
250
+ $errorCount = $this->try_failure($errorCount,"LUDecomposition...","incorrect LU decomposition calculation");
251
+
252
+ $X = $A->inverse();
253
+ if ( $this->checkMatrices($A->times($X),Matrix::identity(3,3)) )
254
+ $this->try_success("inverse()...","");
255
+ else
256
+ $errorCount = $this->try_failure($errorCount, "inverse()...","incorrect inverse calculation");
257
+
258
+ $DEF = new Matrix($rankdef);
259
+ if($this->checkScalars($DEF->rank(), min($DEF->getRowDimension(), $DEF->getColumnDimension())-1))
260
+ $this->try_success("Rank...");
261
+ else
262
+ $this->try_failure("Rank...", "incorrect rank calculation");
263
+
264
+ $B = new Matrix($condmat);
265
+ $SVD = $B->svd();
266
+ $singularvalues = $SVD->getSingularValues();
267
+ if($this->checkScalars($B->cond(), $singularvalues[0]/$singularvalues[min($B->getRowDimension(), $B->getColumnDimension())-1]))
268
+ $this->try_success("Condition number...");
269
+ else
270
+ $this->try_failure("Condition number...", "incorrect condition number calculation");
271
+
272
+ $SUB = new Matrix($subavals);
273
+ $O = new Matrix($SUB->getRowDimension(),1,1.0);
274
+ $SOL = new Matrix($sqSolution);
275
+ $SQ = $SUB->getMatrix(0,$SUB->getRowDimension()-1,0,$SUB->getRowDimension()-1);
276
+ if ( $this->checkMatrices($SQ->solve($SOL),$O) )
277
+ $this->try_success("solve()...","");
278
+ else
279
+ $errorCount = $this->try_failure($errorCount,"solve()...","incorrect lu solve calculation");
280
+
281
+ $A = new Matrix($pvals);
282
+ $Chol = $A->chol();
283
+ $L = $Chol->getL();
284
+ if ( $this->checkMatrices($A, $L->times($L->transpose())) )
285
+ $this->try_success("CholeskyDecomposition...","");
286
+ else
287
+ $errorCount = $this->try_failure($errorCount,"CholeskyDecomposition...","incorrect Cholesky decomposition calculation");
288
+
289
+ $X = $Chol->solve(Matrix::identity(3,3));
290
+ if ( $this->checkMatrices($A->times($X), Matrix::identity(3,3)) )
291
+ $this->try_success("CholeskyDecomposition solve()...","");
292
+ else
293
+ $errorCount = $this->try_failure($errorCount,"CholeskyDecomposition solve()...","incorrect Choleskydecomposition solve calculation");
294
+
295
+ $Eig = $A->eig();
296
+ $D = $Eig->getD();
297
+ $V = $Eig->getV();
298
+ if( $this->checkMatrices($A->times($V),$V->times($D)) )
299
+ $this->try_success("EigenvalueDecomposition (symmetric)...","");
300
+ else
301
+ $errorCount = $this->try_failure($errorCount,"EigenvalueDecomposition (symmetric)...","incorrect symmetric Eigenvalue decomposition calculation");
302
+
303
+ $A = new Matrix($evals);
304
+ $Eig = $A->eig();
305
+ $D = $Eig->getD();
306
+ $V = $Eig->getV();
307
+ if ( $this->checkMatrices($A->times($V),$V->times($D)) )
308
+ $this->try_success("EigenvalueDecomposition (nonsymmetric)...","");
309
+ else
310
+ $errorCount = $this->try_failure($errorCount,"EigenvalueDecomposition (nonsymmetric)...","incorrect nonsymmetric Eigenvalue decomposition calculation");
311
+
312
+ print("<b>{$errorCount} total errors</b>.");
313
+ }
314
+
315
+ /**
316
+ * Print appropriate messages for successful outcome try
317
+ * @param string $s
318
+ * @param string $e
319
+ */
320
+ function try_success($s, $e = "") {
321
+ print "> ". $s ."success<br />";
322
+ if ($e != "")
323
+ print "> Message: ". $e ."<br />";
324
+ }
325
+
326
+ /**
327
+ * Print appropriate messages for unsuccessful outcome try
328
+ * @param int $count
329
+ * @param string $s
330
+ * @param string $e
331
+ * @return int incremented counter
332
+ */
333
+ function try_failure($count, $s, $e="") {
334
+ print "> ". $s ."*** failure ***<br />> Message: ". $e ."<br />";
335
+ return ++$count;
336
+ }
337
+
338
+ /**
339
+ * Print appropriate messages for unsuccessful outcome try
340
+ * @param int $count
341
+ * @param string $s
342
+ * @param string $e
343
+ * @return int incremented counter
344
+ */
345
+ function try_warning($count, $s, $e="") {
346
+ print "> ". $s ."*** warning ***<br />> Message: ". $e ."<br />";
347
+ return ++$count;
348
+ }
349
+
350
+ /**
351
+ * Check magnitude of difference of "scalars".
352
+ * @param float $x
353
+ * @param float $y
354
+ */
355
+ function checkScalars($x, $y) {
356
+ $eps = pow(2.0,-52.0);
357
+ if ($x == 0 & abs($y) < 10*$eps) return;
358
+ if ($y == 0 & abs($x) < 10*$eps) return;
359
+ if (abs($x-$y) > 10 * $eps * max(abs($x),abs($y)))
360
+ return false;
361
+ else
362
+ return true;
363
+ }
364
+
365
+ /**
366
+ * Check norm of difference of "vectors".
367
+ * @param float $x[]
368
+ * @param float $y[]
369
+ */
370
+ function checkVectors($x, $y) {
371
+ $nx = count($x);
372
+ $ny = count($y);
373
+ if ($nx == $ny)
374
+ for($i=0; $i < $nx; ++$i)
375
+ $this->checkScalars($x[$i],$y[$i]);
376
+ else
377
+ die("Attempt to compare vectors of different lengths");
378
+ }
379
+
380
+ /**
381
+ * Check norm of difference of "arrays".
382
+ * @param float $x[][]
383
+ * @param float $y[][]
384
+ */
385
+ function checkArrays($x, $y) {
386
+ $A = new Matrix($x);
387
+ $B = new Matrix($y);
388
+ return $this->checkMatrices($A,$B);
389
+ }
390
+
391
+ /**
392
+ * Check norm of difference of "matrices".
393
+ * @param matrix $X
394
+ * @param matrix $Y
395
+ */
396
+ function checkMatrices($X = null, $Y = null) {
397
+ if( $X == null || $Y == null )
398
+ return false;
399
+
400
+ $eps = pow(2.0,-52.0);
401
+ if ($X->norm1() == 0. & $Y->norm1() < 10*$eps) return true;
402
+ if ($Y->norm1() == 0. & $X->norm1() < 10*$eps) return true;
403
+
404
+ $A = $X->minus($Y);
405
+
406
+ if ($A->norm1() > 1000 * $eps * max($X->norm1(),$Y->norm1()))
407
+ die("The norm of (X-Y) is too large: ".$A->norm1());
408
+ else
409
+ return true;
410
+ }
411
+
412
+ }
413
+
414
+ $test = new TestMatrix;
415
+ ?>
lib/phpExcel/PHPExcel/Shared/JAMA/utils/Error.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/JAMA/utils/Maths.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/OLE.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/OLE/ChainedBlockStream.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/OLE/PPS.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/OLE/PPS/File.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/OLE/PPS/Root.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/OLERead.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/PCLZip/gnu-lgpl.txt CHANGED
@@ -1,504 +1,504 @@
1
- GNU LESSER GENERAL PUBLIC LICENSE
2
- Version 2.1, February 1999
3
-
4
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
5
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
6
- Everyone is permitted to copy and distribute verbatim copies
7
- of this license document, but changing it is not allowed.
8
-
9
- [This is the first released version of the Lesser GPL. It also counts
10
- as the successor of the GNU Library Public License, version 2, hence
11
- the version number 2.1.]
12
-
13
- Preamble
14
-
15
- The licenses for most software are designed to take away your
16
- freedom to share and change it. By contrast, the GNU General Public
17
- Licenses are intended to guarantee your freedom to share and change
18
- free software--to make sure the software is free for all its users.
19
-
20
- This license, the Lesser General Public License, applies to some
21
- specially designated software packages--typically libraries--of the
22
- Free Software Foundation and other authors who decide to use it. You
23
- can use it too, but we suggest you first think carefully about whether
24
- this license or the ordinary General Public License is the better
25
- strategy to use in any particular case, based on the explanations below.
26
-
27
- When we speak of free software, we are referring to freedom of use,
28
- not price. Our General Public Licenses are designed to make sure that
29
- you have the freedom to distribute copies of free software (and charge
30
- for this service if you wish); that you receive source code or can get
31
- it if you want it; that you can change the software and use pieces of
32
- it in new free programs; and that you are informed that you can do
33
- these things.
34
-
35
- To protect your rights, we need to make restrictions that forbid
36
- distributors to deny you these rights or to ask you to surrender these
37
- rights. These restrictions translate to certain responsibilities for
38
- you if you distribute copies of the library or if you modify it.
39
-
40
- For example, if you distribute copies of the library, whether gratis
41
- or for a fee, you must give the recipients all the rights that we gave
42
- you. You must make sure that they, too, receive or can get the source
43
- code. If you link other code with the library, you must provide
44
- complete object files to the recipients, so that they can relink them
45
- with the library after making changes to the library and recompiling
46
- it. And you must show them these terms so they know their rights.
47
-
48
- We protect your rights with a two-step method: (1) we copyright the
49
- library, and (2) we offer you this license, which gives you legal
50
- permission to copy, distribute and/or modify the library.
51
-
52
- To protect each distributor, we want to make it very clear that
53
- there is no warranty for the free library. Also, if the library is
54
- modified by someone else and passed on, the recipients should know
55
- that what they have is not the original version, so that the original
56
- author's reputation will not be affected by problems that might be
57
- introduced by others.
58
-
59
- Finally, software patents pose a constant threat to the existence of
60
- any free program. We wish to make sure that a company cannot
61
- effectively restrict the users of a free program by obtaining a
62
- restrictive license from a patent holder. Therefore, we insist that
63
- any patent license obtained for a version of the library must be
64
- consistent with the full freedom of use specified in this license.
65
-
66
- Most GNU software, including some libraries, is covered by the
67
- ordinary GNU General Public License. This license, the GNU Lesser
68
- General Public License, applies to certain designated libraries, and
69
- is quite different from the ordinary General Public License. We use
70
- this license for certain libraries in order to permit linking those
71
- libraries into non-free programs.
72
-
73
- When a program is linked with a library, whether statically or using
74
- a shared library, the combination of the two is legally speaking a
75
- combined work, a derivative of the original library. The ordinary
76
- General Public License therefore permits such linking only if the
77
- entire combination fits its criteria of freedom. The Lesser General
78
- Public License permits more lax criteria for linking other code with
79
- the library.
80
-
81
- We call this license the "Lesser" General Public License because it
82
- does Less to protect the user's freedom than the ordinary General
83
- Public License. It also provides other free software developers Less
84
- of an advantage over competing non-free programs. These disadvantages
85
- are the reason we use the ordinary General Public License for many
86
- libraries. However, the Lesser license provides advantages in certain
87
- special circumstances.
88
-
89
- For example, on rare occasions, there may be a special need to
90
- encourage the widest possible use of a certain library, so that it becomes
91
- a de-facto standard. To achieve this, non-free programs must be
92
- allowed to use the library. A more frequent case is that a free
93
- library does the same job as widely used non-free libraries. In this
94
- case, there is little to gain by limiting the free library to free
95
- software only, so we use the Lesser General Public License.
96
-
97
- In other cases, permission to use a particular library in non-free
98
- programs enables a greater number of people to use a large body of
99
- free software. For example, permission to use the GNU C Library in
100
- non-free programs enables many more people to use the whole GNU
101
- operating system, as well as its variant, the GNU/Linux operating
102
- system.
103
-
104
- Although the Lesser General Public License is Less protective of the
105
- users' freedom, it does ensure that the user of a program that is
106
- linked with the Library has the freedom and the wherewithal to run
107
- that program using a modified version of the Library.
108
-
109
- The precise terms and conditions for copying, distribution and
110
- modification follow. Pay close attention to the difference between a
111
- "work based on the library" and a "work that uses the library". The
112
- former contains code derived from the library, whereas the latter must
113
- be combined with the library in order to run.
114
-
115
- GNU LESSER GENERAL PUBLIC LICENSE
116
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
117
-
118
- 0. This License Agreement applies to any software library or other
119
- program which contains a notice placed by the copyright holder or
120
- other authorized party saying it may be distributed under the terms of
121
- this Lesser General Public License (also called "this License").
122
- Each licensee is addressed as "you".
123
-
124
- A "library" means a collection of software functions and/or data
125
- prepared so as to be conveniently linked with application programs
126
- (which use some of those functions and data) to form executables.
127
-
128
- The "Library", below, refers to any such software library or work
129
- which has been distributed under these terms. A "work based on the
130
- Library" means either the Library or any derivative work under
131
- copyright law: that is to say, a work containing the Library or a
132
- portion of it, either verbatim or with modifications and/or translated
133
- straightforwardly into another language. (Hereinafter, translation is
134
- included without limitation in the term "modification".)
135
-
136
- "Source code" for a work means the preferred form of the work for
137
- making modifications to it. For a library, complete source code means
138
- all the source code for all modules it contains, plus any associated
139
- interface definition files, plus the scripts used to control compilation
140
- and installation of the library.
141
-
142
- Activities other than copying, distribution and modification are not
143
- covered by this License; they are outside its scope. The act of
144
- running a program using the Library is not restricted, and output from
145
- such a program is covered only if its contents constitute a work based
146
- on the Library (independent of the use of the Library in a tool for
147
- writing it). Whether that is true depends on what the Library does
148
- and what the program that uses the Library does.
149
-
150
- 1. You may copy and distribute verbatim copies of the Library's
151
- complete source code as you receive it, in any medium, provided that
152
- you conspicuously and appropriately publish on each copy an
153
- appropriate copyright notice and disclaimer of warranty; keep intact
154
- all the notices that refer to this License and to the absence of any
155
- warranty; and distribute a copy of this License along with the
156
- Library.
157
-
158
- You may charge a fee for the physical act of transferring a copy,
159
- and you may at your option offer warranty protection in exchange for a
160
- fee.
161
-
162
- 2. You may modify your copy or copies of the Library or any portion
163
- of it, thus forming a work based on the Library, and copy and
164
- distribute such modifications or work under the terms of Section 1
165
- above, provided that you also meet all of these conditions:
166
-
167
- a) The modified work must itself be a software library.
168
-
169
- b) You must cause the files modified to carry prominent notices
170
- stating that you changed the files and the date of any change.
171
-
172
- c) You must cause the whole of the work to be licensed at no
173
- charge to all third parties under the terms of this License.
174
-
175
- d) If a facility in the modified Library refers to a function or a
176
- table of data to be supplied by an application program that uses
177
- the facility, other than as an argument passed when the facility
178
- is invoked, then you must make a good faith effort to ensure that,
179
- in the event an application does not supply such function or
180
- table, the facility still operates, and performs whatever part of
181
- its purpose remains meaningful.
182
-
183
- (For example, a function in a library to compute square roots has
184
- a purpose that is entirely well-defined independent of the
185
- application. Therefore, Subsection 2d requires that any
186
- application-supplied function or table used by this function must
187
- be optional: if the application does not supply it, the square
188
- root function must still compute square roots.)
189
-
190
- These requirements apply to the modified work as a whole. If
191
- identifiable sections of that work are not derived from the Library,
192
- and can be reasonably considered independent and separate works in
193
- themselves, then this License, and its terms, do not apply to those
194
- sections when you distribute them as separate works. But when you
195
- distribute the same sections as part of a whole which is a work based
196
- on the Library, the distribution of the whole must be on the terms of
197
- this License, whose permissions for other licensees extend to the
198
- entire whole, and thus to each and every part regardless of who wrote
199
- it.
200
-
201
- Thus, it is not the intent of this section to claim rights or contest
202
- your rights to work written entirely by you; rather, the intent is to
203
- exercise the right to control the distribution of derivative or
204
- collective works based on the Library.
205
-
206
- In addition, mere aggregation of another work not based on the Library
207
- with the Library (or with a work based on the Library) on a volume of
208
- a storage or distribution medium does not bring the other work under
209
- the scope of this License.
210
-
211
- 3. You may opt to apply the terms of the ordinary GNU General Public
212
- License instead of this License to a given copy of the Library. To do
213
- this, you must alter all the notices that refer to this License, so
214
- that they refer to the ordinary GNU General Public License, version 2,
215
- instead of to this License. (If a newer version than version 2 of the
216
- ordinary GNU General Public License has appeared, then you can specify
217
- that version instead if you wish.) Do not make any other change in
218
- these notices.
219
-
220
- Once this change is made in a given copy, it is irreversible for
221
- that copy, so the ordinary GNU General Public License applies to all
222
- subsequent copies and derivative works made from that copy.
223
-
224
- This option is useful when you wish to copy part of the code of
225
- the Library into a program that is not a library.
226
-
227
- 4. You may copy and distribute the Library (or a portion or
228
- derivative of it, under Section 2) in object code or executable form
229
- under the terms of Sections 1 and 2 above provided that you accompany
230
- it with the complete corresponding machine-readable source code, which
231
- must be distributed under the terms of Sections 1 and 2 above on a
232
- medium customarily used for software interchange.
233
-
234
- If distribution of object code is made by offering access to copy
235
- from a designated place, then offering equivalent access to copy the
236
- source code from the same place satisfies the requirement to
237
- distribute the source code, even though third parties are not
238
- compelled to copy the source along with the object code.
239
-
240
- 5. A program that contains no derivative of any portion of the
241
- Library, but is designed to work with the Library by being compiled or
242
- linked with it, is called a "work that uses the Library". Such a
243
- work, in isolation, is not a derivative work of the Library, and
244
- therefore falls outside the scope of this License.
245
-
246
- However, linking a "work that uses the Library" with the Library
247
- creates an executable that is a derivative of the Library (because it
248
- contains portions of the Library), rather than a "work that uses the
249
- library". The executable is therefore covered by this License.
250
- Section 6 states terms for distribution of such executables.
251
-
252
- When a "work that uses the Library" uses material from a header file
253
- that is part of the Library, the object code for the work may be a
254
- derivative work of the Library even though the source code is not.
255
- Whether this is true is especially significant if the work can be
256
- linked without the Library, or if the work is itself a library. The
257
- threshold for this to be true is not precisely defined by law.
258
-
259
- If such an object file uses only numerical parameters, data
260
- structure layouts and accessors, and small macros and small inline
261
- functions (ten lines or less in length), then the use of the object
262
- file is unrestricted, regardless of whether it is legally a derivative
263
- work. (Executables containing this object code plus portions of the
264
- Library will still fall under Section 6.)
265
-
266
- Otherwise, if the work is a derivative of the Library, you may
267
- distribute the object code for the work under the terms of Section 6.
268
- Any executables containing that work also fall under Section 6,
269
- whether or not they are linked directly with the Library itself.
270
-
271
- 6. As an exception to the Sections above, you may also combine or
272
- link a "work that uses the Library" with the Library to produce a
273
- work containing portions of the Library, and distribute that work
274
- under terms of your choice, provided that the terms permit
275
- modification of the work for the customer's own use and reverse
276
- engineering for debugging such modifications.
277
-
278
- You must give prominent notice with each copy of the work that the
279
- Library is used in it and that the Library and its use are covered by
280
- this License. You must supply a copy of this License. If the work
281
- during execution displays copyright notices, you must include the
282
- copyright notice for the Library among them, as well as a reference
283
- directing the user to the copy of this License. Also, you must do one
284
- of these things:
285
-
286
- a) Accompany the work with the complete corresponding
287
- machine-readable source code for the Library including whatever
288
- changes were used in the work (which must be distributed under
289
- Sections 1 and 2 above); and, if the work is an executable linked
290
- with the Library, with the complete machine-readable "work that
291
- uses the Library", as object code and/or source code, so that the
292
- user can modify the Library and then relink to produce a modified
293
- executable containing the modified Library. (It is understood
294
- that the user who changes the contents of definitions files in the
295
- Library will not necessarily be able to recompile the application
296
- to use the modified definitions.)
297
-
298
- b) Use a suitable shared library mechanism for linking with the
299
- Library. A suitable mechanism is one that (1) uses at run time a
300
- copy of the library already present on the user's computer system,
301
- rather than copying library functions into the executable, and (2)
302
- will operate properly with a modified version of the library, if
303
- the user installs one, as long as the modified version is
304
- interface-compatible with the version that the work was made with.
305
-
306
- c) Accompany the work with a written offer, valid for at
307
- least three years, to give the same user the materials
308
- specified in Subsection 6a, above, for a charge no more
309
- than the cost of performing this distribution.
310
-
311
- d) If distribution of the work is made by offering access to copy
312
- from a designated place, offer equivalent access to copy the above
313
- specified materials from the same place.
314
-
315
- e) Verify that the user has already received a copy of these
316
- materials or that you have already sent this user a copy.
317
-
318
- For an executable, the required form of the "work that uses the
319
- Library" must include any data and utility programs needed for
320
- reproducing the executable from it. However, as a special exception,
321
- the materials to be distributed need not include anything that is
322
- normally distributed (in either source or binary form) with the major
323
- components (compiler, kernel, and so on) of the operating system on
324
- which the executable runs, unless that component itself accompanies
325
- the executable.
326
-
327
- It may happen that this requirement contradicts the license
328
- restrictions of other proprietary libraries that do not normally
329
- accompany the operating system. Such a contradiction means you cannot
330
- use both them and the Library together in an executable that you
331
- distribute.
332
-
333
- 7. You may place library facilities that are a work based on the
334
- Library side-by-side in a single library together with other library
335
- facilities not covered by this License, and distribute such a combined
336
- library, provided that the separate distribution of the work based on
337
- the Library and of the other library facilities is otherwise
338
- permitted, and provided that you do these two things:
339
-
340
- a) Accompany the combined library with a copy of the same work
341
- based on the Library, uncombined with any other library
342
- facilities. This must be distributed under the terms of the
343
- Sections above.
344
-
345
- b) Give prominent notice with the combined library of the fact
346
- that part of it is a work based on the Library, and explaining
347
- where to find the accompanying uncombined form of the same work.
348
-
349
- 8. You may not copy, modify, sublicense, link with, or distribute
350
- the Library except as expressly provided under this License. Any
351
- attempt otherwise to copy, modify, sublicense, link with, or
352
- distribute the Library is void, and will automatically terminate your
353
- rights under this License. However, parties who have received copies,
354
- or rights, from you under this License will not have their licenses
355
- terminated so long as such parties remain in full compliance.
356
-
357
- 9. You are not required to accept this License, since you have not
358
- signed it. However, nothing else grants you permission to modify or
359
- distribute the Library or its derivative works. These actions are
360
- prohibited by law if you do not accept this License. Therefore, by
361
- modifying or distributing the Library (or any work based on the
362
- Library), you indicate your acceptance of this License to do so, and
363
- all its terms and conditions for copying, distributing or modifying
364
- the Library or works based on it.
365
-
366
- 10. Each time you redistribute the Library (or any work based on the
367
- Library), the recipient automatically receives a license from the
368
- original licensor to copy, distribute, link with or modify the Library
369
- subject to these terms and conditions. You may not impose any further
370
- restrictions on the recipients' exercise of the rights granted herein.
371
- You are not responsible for enforcing compliance by third parties with
372
- this License.
373
-
374
- 11. If, as a consequence of a court judgment or allegation of patent
375
- infringement or for any other reason (not limited to patent issues),
376
- conditions are imposed on you (whether by court order, agreement or
377
- otherwise) that contradict the conditions of this License, they do not
378
- excuse you from the conditions of this License. If you cannot
379
- distribute so as to satisfy simultaneously your obligations under this
380
- License and any other pertinent obligations, then as a consequence you
381
- may not distribute the Library at all. For example, if a patent
382
- license would not permit royalty-free redistribution of the Library by
383
- all those who receive copies directly or indirectly through you, then
384
- the only way you could satisfy both it and this License would be to
385
- refrain entirely from distribution of the Library.
386
-
387
- If any portion of this section is held invalid or unenforceable under any
388
- particular circumstance, the balance of the section is intended to apply,
389
- and the section as a whole is intended to apply in other circumstances.
390
-
391
- It is not the purpose of this section to induce you to infringe any
392
- patents or other property right claims or to contest validity of any
393
- such claims; this section has the sole purpose of protecting the
394
- integrity of the free software distribution system which is
395
- implemented by public license practices. Many people have made
396
- generous contributions to the wide range of software distributed
397
- through that system in reliance on consistent application of that
398
- system; it is up to the author/donor to decide if he or she is willing
399
- to distribute software through any other system and a licensee cannot
400
- impose that choice.
401
-
402
- This section is intended to make thoroughly clear what is believed to
403
- be a consequence of the rest of this License.
404
-
405
- 12. If the distribution and/or use of the Library is restricted in
406
- certain countries either by patents or by copyrighted interfaces, the
407
- original copyright holder who places the Library under this License may add
408
- an explicit geographical distribution limitation excluding those countries,
409
- so that distribution is permitted only in or among countries not thus
410
- excluded. In such case, this License incorporates the limitation as if
411
- written in the body of this License.
412
-
413
- 13. The Free Software Foundation may publish revised and/or new
414
- versions of the Lesser General Public License from time to time.
415
- Such new versions will be similar in spirit to the present version,
416
- but may differ in detail to address new problems or concerns.
417
-
418
- Each version is given a distinguishing version number. If the Library
419
- specifies a version number of this License which applies to it and
420
- "any later version", you have the option of following the terms and
421
- conditions either of that version or of any later version published by
422
- the Free Software Foundation. If the Library does not specify a
423
- license version number, you may choose any version ever published by
424
- the Free Software Foundation.
425
-
426
- 14. If you wish to incorporate parts of the Library into other free
427
- programs whose distribution conditions are incompatible with these,
428
- write to the author to ask for permission. For software which is
429
- copyrighted by the Free Software Foundation, write to the Free
430
- Software Foundation; we sometimes make exceptions for this. Our
431
- decision will be guided by the two goals of preserving the free status
432
- of all derivatives of our free software and of promoting the sharing
433
- and reuse of software generally.
434
-
435
- NO WARRANTY
436
-
437
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
438
- WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
439
- EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
440
- OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
441
- KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
442
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
443
- PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
444
- LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
445
- THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
446
-
447
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
448
- WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
449
- AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
450
- FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
451
- CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
452
- LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
453
- RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
454
- FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
455
- SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
456
- DAMAGES.
457
-
458
- END OF TERMS AND CONDITIONS
459
-
460
- How to Apply These Terms to Your New Libraries
461
-
462
- If you develop a new library, and you want it to be of the greatest
463
- possible use to the public, we recommend making it free software that
464
- everyone can redistribute and change. You can do so by permitting
465
- redistribution under these terms (or, alternatively, under the terms of the
466
- ordinary General Public License).
467
-
468
- To apply these terms, attach the following notices to the library. It is
469
- safest to attach them to the start of each source file to most effectively
470
- convey the exclusion of warranty; and each file should have at least the
471
- "copyright" line and a pointer to where the full notice is found.
472
-
473
- <one line to give the library's name and a brief idea of what it does.>
474
- Copyright (C) <year> <name of author>
475
-
476
- This library is free software; you can redistribute it and/or
477
- modify it under the terms of the GNU Lesser General Public
478
- License as published by the Free Software Foundation; either
479
- version 2.1 of the License, or (at your option) any later version.
480
-
481
- This library is distributed in the hope that it will be useful,
482
- but WITHOUT ANY WARRANTY; without even the implied warranty of
483
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
484
- Lesser General Public License for more details.
485
-
486
- You should have received a copy of the GNU Lesser General Public
487
- License along with this library; if not, write to the Free Software
488
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
489
-
490
- Also add information on how to contact you by electronic and paper mail.
491
-
492
- You should also get your employer (if you work as a programmer) or your
493
- school, if any, to sign a "copyright disclaimer" for the library, if
494
- necessary. Here is a sample; alter the names:
495
-
496
- Yoyodyne, Inc., hereby disclaims all copyright interest in the
497
- library `Frob' (a library for tweaking knobs) written by James Random Hacker.
498
-
499
- <signature of Ty Coon>, 1 April 1990
500
- Ty Coon, President of Vice
501
-
502
- That's all there is to it!
503
-
504
-
1
+ GNU LESSER GENERAL PUBLIC LICENSE
2
+ Version 2.1, February 1999
3
+
4
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
5
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
6
+ Everyone is permitted to copy and distribute verbatim copies
7
+ of this license document, but changing it is not allowed.
8
+
9
+ [This is the first released version of the Lesser GPL. It also counts
10
+ as the successor of the GNU Library Public License, version 2, hence
11
+ the version number 2.1.]
12
+
13
+ Preamble
14
+
15
+ The licenses for most software are designed to take away your
16
+ freedom to share and change it. By contrast, the GNU General Public
17
+ Licenses are intended to guarantee your freedom to share and change
18
+ free software--to make sure the software is free for all its users.
19
+
20
+ This license, the Lesser General Public License, applies to some
21
+ specially designated software packages--typically libraries--of the
22
+ Free Software Foundation and other authors who decide to use it. You
23
+ can use it too, but we suggest you first think carefully about whether
24
+ this license or the ordinary General Public License is the better
25
+ strategy to use in any particular case, based on the explanations below.
26
+
27
+ When we speak of free software, we are referring to freedom of use,
28
+ not price. Our General Public Licenses are designed to make sure that
29
+ you have the freedom to distribute copies of free software (and charge
30
+ for this service if you wish); that you receive source code or can get
31
+ it if you want it; that you can change the software and use pieces of
32
+ it in new free programs; and that you are informed that you can do
33
+ these things.
34
+
35
+ To protect your rights, we need to make restrictions that forbid
36
+ distributors to deny you these rights or to ask you to surrender these
37
+ rights. These restrictions translate to certain responsibilities for
38
+ you if you distribute copies of the library or if you modify it.
39
+
40
+ For example, if you distribute copies of the library, whether gratis
41
+ or for a fee, you must give the recipients all the rights that we gave
42
+ you. You must make sure that they, too, receive or can get the source
43
+ code. If you link other code with the library, you must provide
44
+ complete object files to the recipients, so that they can relink them
45
+ with the library after making changes to the library and recompiling
46
+ it. And you must show them these terms so they know their rights.
47
+
48
+ We protect your rights with a two-step method: (1) we copyright the
49
+ library, and (2) we offer you this license, which gives you legal
50
+ permission to copy, distribute and/or modify the library.
51
+
52
+ To protect each distributor, we want to make it very clear that
53
+ there is no warranty for the free library. Also, if the library is
54
+ modified by someone else and passed on, the recipients should know
55
+ that what they have is not the original version, so that the original
56
+ author's reputation will not be affected by problems that might be
57
+ introduced by others.
58
+
59
+ Finally, software patents pose a constant threat to the existence of
60
+ any free program. We wish to make sure that a company cannot
61
+ effectively restrict the users of a free program by obtaining a
62
+ restrictive license from a patent holder. Therefore, we insist that
63
+ any patent license obtained for a version of the library must be
64
+ consistent with the full freedom of use specified in this license.
65
+
66
+ Most GNU software, including some libraries, is covered by the
67
+ ordinary GNU General Public License. This license, the GNU Lesser
68
+ General Public License, applies to certain designated libraries, and
69
+ is quite different from the ordinary General Public License. We use
70
+ this license for certain libraries in order to permit linking those
71
+ libraries into non-free programs.
72
+
73
+ When a program is linked with a library, whether statically or using
74
+ a shared library, the combination of the two is legally speaking a
75
+ combined work, a derivative of the original library. The ordinary
76
+ General Public License therefore permits such linking only if the
77
+ entire combination fits its criteria of freedom. The Lesser General
78
+ Public License permits more lax criteria for linking other code with
79
+ the library.
80
+
81
+ We call this license the "Lesser" General Public License because it
82
+ does Less to protect the user's freedom than the ordinary General
83
+ Public License. It also provides other free software developers Less
84
+ of an advantage over competing non-free programs. These disadvantages
85
+ are the reason we use the ordinary General Public License for many
86
+ libraries. However, the Lesser license provides advantages in certain
87
+ special circumstances.
88
+
89
+ For example, on rare occasions, there may be a special need to
90
+ encourage the widest possible use of a certain library, so that it becomes
91
+ a de-facto standard. To achieve this, non-free programs must be
92
+ allowed to use the library. A more frequent case is that a free
93
+ library does the same job as widely used non-free libraries. In this
94
+ case, there is little to gain by limiting the free library to free
95
+ software only, so we use the Lesser General Public License.
96
+
97
+ In other cases, permission to use a particular library in non-free
98
+ programs enables a greater number of people to use a large body of
99
+ free software. For example, permission to use the GNU C Library in
100
+ non-free programs enables many more people to use the whole GNU
101
+ operating system, as well as its variant, the GNU/Linux operating
102
+ system.
103
+
104
+ Although the Lesser General Public License is Less protective of the
105
+ users' freedom, it does ensure that the user of a program that is
106
+ linked with the Library has the freedom and the wherewithal to run
107
+ that program using a modified version of the Library.
108
+
109
+ The precise terms and conditions for copying, distribution and
110
+ modification follow. Pay close attention to the difference between a
111
+ "work based on the library" and a "work that uses the library". The
112
+ former contains code derived from the library, whereas the latter must
113
+ be combined with the library in order to run.
114
+
115
+ GNU LESSER GENERAL PUBLIC LICENSE
116
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
117
+
118
+ 0. This License Agreement applies to any software library or other
119
+ program which contains a notice placed by the copyright holder or
120
+ other authorized party saying it may be distributed under the terms of
121
+ this Lesser General Public License (also called "this License").
122
+ Each licensee is addressed as "you".
123
+
124
+ A "library" means a collection of software functions and/or data
125
+ prepared so as to be conveniently linked with application programs
126
+ (which use some of those functions and data) to form executables.
127
+
128
+ The "Library", below, refers to any such software library or work
129
+ which has been distributed under these terms. A "work based on the
130
+ Library" means either the Library or any derivative work under
131
+ copyright law: that is to say, a work containing the Library or a
132
+ portion of it, either verbatim or with modifications and/or translated
133
+ straightforwardly into another language. (Hereinafter, translation is
134
+ included without limitation in the term "modification".)
135
+
136
+ "Source code" for a work means the preferred form of the work for
137
+ making modifications to it. For a library, complete source code means
138
+ all the source code for all modules it contains, plus any associated
139
+ interface definition files, plus the scripts used to control compilation
140
+ and installation of the library.
141
+
142
+ Activities other than copying, distribution and modification are not
143
+ covered by this License; they are outside its scope. The act of
144
+ running a program using the Library is not restricted, and output from
145
+ such a program is covered only if its contents constitute a work based
146
+ on the Library (independent of the use of the Library in a tool for
147
+ writing it). Whether that is true depends on what the Library does
148
+ and what the program that uses the Library does.
149
+
150
+ 1. You may copy and distribute verbatim copies of the Library's
151
+ complete source code as you receive it, in any medium, provided that
152
+ you conspicuously and appropriately publish on each copy an
153
+ appropriate copyright notice and disclaimer of warranty; keep intact
154
+ all the notices that refer to this License and to the absence of any
155
+ warranty; and distribute a copy of this License along with the
156
+ Library.
157
+
158
+ You may charge a fee for the physical act of transferring a copy,
159
+ and you may at your option offer warranty protection in exchange for a
160
+ fee.
161
+
162
+ 2. You may modify your copy or copies of the Library or any portion
163
+ of it, thus forming a work based on the Library, and copy and
164
+ distribute such modifications or work under the terms of Section 1
165
+ above, provided that you also meet all of these conditions:
166
+
167
+ a) The modified work must itself be a software library.
168
+
169
+ b) You must cause the files modified to carry prominent notices
170
+ stating that you changed the files and the date of any change.
171
+
172
+ c) You must cause the whole of the work to be licensed at no
173
+ charge to all third parties under the terms of this License.
174
+
175
+ d) If a facility in the modified Library refers to a function or a
176
+ table of data to be supplied by an application program that uses
177
+ the facility, other than as an argument passed when the facility
178
+ is invoked, then you must make a good faith effort to ensure that,
179
+ in the event an application does not supply such function or
180
+ table, the facility still operates, and performs whatever part of
181
+ its purpose remains meaningful.
182
+
183
+ (For example, a function in a library to compute square roots has
184
+ a purpose that is entirely well-defined independent of the
185
+ application. Therefore, Subsection 2d requires that any
186
+ application-supplied function or table used by this function must
187
+ be optional: if the application does not supply it, the square
188
+ root function must still compute square roots.)
189
+
190
+ These requirements apply to the modified work as a whole. If
191
+ identifiable sections of that work are not derived from the Library,
192
+ and can be reasonably considered independent and separate works in
193
+ themselves, then this License, and its terms, do not apply to those
194
+ sections when you distribute them as separate works. But when you
195
+ distribute the same sections as part of a whole which is a work based
196
+ on the Library, the distribution of the whole must be on the terms of
197
+ this License, whose permissions for other licensees extend to the
198
+ entire whole, and thus to each and every part regardless of who wrote
199
+ it.
200
+
201
+ Thus, it is not the intent of this section to claim rights or contest
202
+ your rights to work written entirely by you; rather, the intent is to
203
+ exercise the right to control the distribution of derivative or
204
+ collective works based on the Library.
205
+
206
+ In addition, mere aggregation of another work not based on the Library
207
+ with the Library (or with a work based on the Library) on a volume of
208
+ a storage or distribution medium does not bring the other work under
209
+ the scope of this License.
210
+
211
+ 3. You may opt to apply the terms of the ordinary GNU General Public
212
+ License instead of this License to a given copy of the Library. To do
213
+ this, you must alter all the notices that refer to this License, so
214
+ that they refer to the ordinary GNU General Public License, version 2,
215
+ instead of to this License. (If a newer version than version 2 of the
216
+ ordinary GNU General Public License has appeared, then you can specify
217
+ that version instead if you wish.) Do not make any other change in
218
+ these notices.
219
+
220
+ Once this change is made in a given copy, it is irreversible for
221
+ that copy, so the ordinary GNU General Public License applies to all
222
+ subsequent copies and derivative works made from that copy.
223
+
224
+ This option is useful when you wish to copy part of the code of
225
+ the Library into a program that is not a library.
226
+
227
+ 4. You may copy and distribute the Library (or a portion or
228
+ derivative of it, under Section 2) in object code or executable form
229
+ under the terms of Sections 1 and 2 above provided that you accompany
230
+ it with the complete corresponding machine-readable source code, which
231
+ must be distributed under the terms of Sections 1 and 2 above on a
232
+ medium customarily used for software interchange.
233
+
234
+ If distribution of object code is made by offering access to copy
235
+ from a designated place, then offering equivalent access to copy the
236
+ source code from the same place satisfies the requirement to
237
+ distribute the source code, even though third parties are not
238
+ compelled to copy the source along with the object code.
239
+
240
+ 5. A program that contains no derivative of any portion of the
241
+ Library, but is designed to work with the Library by being compiled or
242
+ linked with it, is called a "work that uses the Library". Such a
243
+ work, in isolation, is not a derivative work of the Library, and
244
+ therefore falls outside the scope of this License.
245
+
246
+ However, linking a "work that uses the Library" with the Library
247
+ creates an executable that is a derivative of the Library (because it
248
+ contains portions of the Library), rather than a "work that uses the
249
+ library". The executable is therefore covered by this License.
250
+ Section 6 states terms for distribution of such executables.
251
+
252
+ When a "work that uses the Library" uses material from a header file
253
+ that is part of the Library, the object code for the work may be a
254
+ derivative work of the Library even though the source code is not.
255
+ Whether this is true is especially significant if the work can be
256
+ linked without the Library, or if the work is itself a library. The
257
+ threshold for this to be true is not precisely defined by law.
258
+
259
+ If such an object file uses only numerical parameters, data
260
+ structure layouts and accessors, and small macros and small inline
261
+ functions (ten lines or less in length), then the use of the object
262
+ file is unrestricted, regardless of whether it is legally a derivative
263
+ work. (Executables containing this object code plus portions of the
264
+ Library will still fall under Section 6.)
265
+
266
+ Otherwise, if the work is a derivative of the Library, you may
267
+ distribute the object code for the work under the terms of Section 6.
268
+ Any executables containing that work also fall under Section 6,
269
+ whether or not they are linked directly with the Library itself.
270
+
271
+ 6. As an exception to the Sections above, you may also combine or
272
+ link a "work that uses the Library" with the Library to produce a
273
+ work containing portions of the Library, and distribute that work
274
+ under terms of your choice, provided that the terms permit
275
+ modification of the work for the customer's own use and reverse
276
+ engineering for debugging such modifications.
277
+
278
+ You must give prominent notice with each copy of the work that the
279
+ Library is used in it and that the Library and its use are covered by
280
+ this License. You must supply a copy of this License. If the work
281
+ during execution displays copyright notices, you must include the
282
+ copyright notice for the Library among them, as well as a reference
283
+ directing the user to the copy of this License. Also, you must do one
284
+ of these things:
285
+
286
+ a) Accompany the work with the complete corresponding
287
+ machine-readable source code for the Library including whatever
288
+ changes were used in the work (which must be distributed under
289
+ Sections 1 and 2 above); and, if the work is an executable linked
290
+ with the Library, with the complete machine-readable "work that
291
+ uses the Library", as object code and/or source code, so that the
292
+ user can modify the Library and then relink to produce a modified
293
+ executable containing the modified Library. (It is understood
294
+ that the user who changes the contents of definitions files in the
295
+ Library will not necessarily be able to recompile the application
296
+ to use the modified definitions.)
297
+
298
+ b) Use a suitable shared library mechanism for linking with the
299
+ Library. A suitable mechanism is one that (1) uses at run time a
300
+ copy of the library already present on the user's computer system,
301
+ rather than copying library functions into the executable, and (2)
302
+ will operate properly with a modified version of the library, if
303
+ the user installs one, as long as the modified version is
304
+ interface-compatible with the version that the work was made with.
305
+
306
+ c) Accompany the work with a written offer, valid for at
307
+ least three years, to give the same user the materials
308
+ specified in Subsection 6a, above, for a charge no more
309
+ than the cost of performing this distribution.
310
+
311
+ d) If distribution of the work is made by offering access to copy
312
+ from a designated place, offer equivalent access to copy the above
313
+ specified materials from the same place.
314
+
315
+ e) Verify that the user has already received a copy of these
316
+ materials or that you have already sent this user a copy.
317
+
318
+ For an executable, the required form of the "work that uses the
319
+ Library" must include any data and utility programs needed for
320
+ reproducing the executable from it. However, as a special exception,
321
+ the materials to be distributed need not include anything that is
322
+ normally distributed (in either source or binary form) with the major
323
+ components (compiler, kernel, and so on) of the operating system on
324
+ which the executable runs, unless that component itself accompanies
325
+ the executable.
326
+
327
+ It may happen that this requirement contradicts the license
328
+ restrictions of other proprietary libraries that do not normally
329
+ accompany the operating system. Such a contradiction means you cannot
330
+ use both them and the Library together in an executable that you
331
+ distribute.
332
+
333
+ 7. You may place library facilities that are a work based on the
334
+ Library side-by-side in a single library together with other library
335
+ facilities not covered by this License, and distribute such a combined
336
+ library, provided that the separate distribution of the work based on
337
+ the Library and of the other library facilities is otherwise
338
+ permitted, and provided that you do these two things:
339
+
340
+ a) Accompany the combined library with a copy of the same work
341
+ based on the Library, uncombined with any other library
342
+ facilities. This must be distributed under the terms of the
343
+ Sections above.
344
+
345
+ b) Give prominent notice with the combined library of the fact
346
+ that part of it is a work based on the Library, and explaining
347
+ where to find the accompanying uncombined form of the same work.
348
+
349
+ 8. You may not copy, modify, sublicense, link with, or distribute
350
+ the Library except as expressly provided under this License. Any
351
+ attempt otherwise to copy, modify, sublicense, link with, or
352
+ distribute the Library is void, and will automatically terminate your
353
+ rights under this License. However, parties who have received copies,
354
+ or rights, from you under this License will not have their licenses
355
+ terminated so long as such parties remain in full compliance.
356
+
357
+ 9. You are not required to accept this License, since you have not
358
+ signed it. However, nothing else grants you permission to modify or
359
+ distribute the Library or its derivative works. These actions are
360
+ prohibited by law if you do not accept this License. Therefore, by
361
+ modifying or distributing the Library (or any work based on the
362
+ Library), you indicate your acceptance of this License to do so, and
363
+ all its terms and conditions for copying, distributing or modifying
364
+ the Library or works based on it.
365
+
366
+ 10. Each time you redistribute the Library (or any work based on the
367
+ Library), the recipient automatically receives a license from the
368
+ original licensor to copy, distribute, link with or modify the Library
369
+ subject to these terms and conditions. You may not impose any further
370
+ restrictions on the recipients' exercise of the rights granted herein.
371
+ You are not responsible for enforcing compliance by third parties with
372
+ this License.
373
+
374
+ 11. If, as a consequence of a court judgment or allegation of patent
375
+ infringement or for any other reason (not limited to patent issues),
376
+ conditions are imposed on you (whether by court order, agreement or
377
+ otherwise) that contradict the conditions of this License, they do not
378
+ excuse you from the conditions of this License. If you cannot
379
+ distribute so as to satisfy simultaneously your obligations under this
380
+ License and any other pertinent obligations, then as a consequence you
381
+ may not distribute the Library at all. For example, if a patent
382
+ license would not permit royalty-free redistribution of the Library by
383
+ all those who receive copies directly or indirectly through you, then
384
+ the only way you could satisfy both it and this License would be to
385
+ refrain entirely from distribution of the Library.
386
+
387
+ If any portion of this section is held invalid or unenforceable under any
388
+ particular circumstance, the balance of the section is intended to apply,
389
+ and the section as a whole is intended to apply in other circumstances.
390
+
391
+ It is not the purpose of this section to induce you to infringe any
392
+ patents or other property right claims or to contest validity of any
393
+ such claims; this section has the sole purpose of protecting the
394
+ integrity of the free software distribution system which is
395
+ implemented by public license practices. Many people have made
396
+ generous contributions to the wide range of software distributed
397
+ through that system in reliance on consistent application of that
398
+ system; it is up to the author/donor to decide if he or she is willing
399
+ to distribute software through any other system and a licensee cannot
400
+ impose that choice.
401
+
402
+ This section is intended to make thoroughly clear what is believed to
403
+ be a consequence of the rest of this License.
404
+
405
+ 12. If the distribution and/or use of the Library is restricted in
406
+ certain countries either by patents or by copyrighted interfaces, the
407
+ original copyright holder who places the Library under this License may add
408
+ an explicit geographical distribution limitation excluding those countries,
409
+ so that distribution is permitted only in or among countries not thus
410
+ excluded. In such case, this License incorporates the limitation as if
411
+ written in the body of this License.
412
+
413
+ 13. The Free Software Foundation may publish revised and/or new
414
+ versions of the Lesser General Public License from time to time.
415
+ Such new versions will be similar in spirit to the present version,
416
+ but may differ in detail to address new problems or concerns.
417
+
418
+ Each version is given a distinguishing version number. If the Library
419
+ specifies a version number of this License which applies to it and
420
+ "any later version", you have the option of following the terms and
421
+ conditions either of that version or of any later version published by
422
+ the Free Software Foundation. If the Library does not specify a
423
+ license version number, you may choose any version ever published by
424
+ the Free Software Foundation.
425
+
426
+ 14. If you wish to incorporate parts of the Library into other free
427
+ programs whose distribution conditions are incompatible with these,
428
+ write to the author to ask for permission. For software which is
429
+ copyrighted by the Free Software Foundation, write to the Free
430
+ Software Foundation; we sometimes make exceptions for this. Our
431
+ decision will be guided by the two goals of preserving the free status
432
+ of all derivatives of our free software and of promoting the sharing
433
+ and reuse of software generally.
434
+
435
+ NO WARRANTY
436
+
437
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
438
+ WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
439
+ EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
440
+ OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
441
+ KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
442
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
443
+ PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
444
+ LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
445
+ THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
446
+
447
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
448
+ WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
449
+ AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
450
+ FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
451
+ CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
452
+ LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
453
+ RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
454
+ FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
455
+ SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
456
+ DAMAGES.
457
+
458
+ END OF TERMS AND CONDITIONS
459
+
460
+ How to Apply These Terms to Your New Libraries
461
+
462
+ If you develop a new library, and you want it to be of the greatest
463
+ possible use to the public, we recommend making it free software that
464
+ everyone can redistribute and change. You can do so by permitting
465
+ redistribution under these terms (or, alternatively, under the terms of the
466
+ ordinary General Public License).
467
+
468
+ To apply these terms, attach the following notices to the library. It is
469
+ safest to attach them to the start of each source file to most effectively
470
+ convey the exclusion of warranty; and each file should have at least the
471
+ "copyright" line and a pointer to where the full notice is found.
472
+
473
+ <one line to give the library's name and a brief idea of what it does.>
474
+ Copyright (C) <year> <name of author>
475
+
476
+ This library is free software; you can redistribute it and/or
477
+ modify it under the terms of the GNU Lesser General Public
478
+ License as published by the Free Software Foundation; either
479
+ version 2.1 of the License, or (at your option) any later version.
480
+
481
+ This library is distributed in the hope that it will be useful,
482
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
483
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
484
+ Lesser General Public License for more details.
485
+
486
+ You should have received a copy of the GNU Lesser General Public
487
+ License along with this library; if not, write to the Free Software
488
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
489
+
490
+ Also add information on how to contact you by electronic and paper mail.
491
+
492
+ You should also get your employer (if you work as a programmer) or your
493
+ school, if any, to sign a "copyright disclaimer" for the library, if
494
+ necessary. Here is a sample; alter the names:
495
+
496
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
497
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
498
+
499
+ <signature of Ty Coon>, 1 April 1990
500
+ Ty Coon, President of Vice
501
+
502
+ That's all there is to it!
503
+
504
+
lib/phpExcel/PHPExcel/Shared/PCLZip/pclzip.lib.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/PCLZip/readme.txt CHANGED
@@ -1,421 +1,421 @@
1
- // --------------------------------------------------------------------------------
2
- // PclZip 2.8.2 - readme.txt
3
- // --------------------------------------------------------------------------------
4
- // License GNU/LGPL - August 2009
5
- // Vincent Blavet - vincent@phpconcept.net
6
- // http://www.phpconcept.net
7
- // --------------------------------------------------------------------------------
8
- // $Id: readme.txt,v 1.60 2009/09/30 20:35:21 vblavet Exp $
9
- // --------------------------------------------------------------------------------
10
-
11
-
12
-
13
- 0 - Sommaire
14
- ============
15
- 1 - Introduction
16
- 2 - What's new
17
- 3 - Corrected bugs
18
- 4 - Known bugs or limitations
19
- 5 - License
20
- 6 - Warning
21
- 7 - Documentation
22
- 8 - Author
23
- 9 - Contribute
24
-
25
- 1 - Introduction
26
- ================
27
-
28
- PclZip is a library that allow you to manage a Zip archive.
29
-
30
- Full documentation about PclZip can be found here : http://www.phpconcept.net/pclzip
31
-
32
- 2 - What's new
33
- ==============
34
-
35
- Version 2.8.2 :
36
- - PCLZIP_CB_PRE_EXTRACT and PCLZIP_CB_POST_EXTRACT are now supported with
37
- extraction as a string (PCLZIP_OPT_EXTRACT_AS_STRING). The string
38
- can also be modified in the post-extract call back.
39
- **Bugs correction :
40
- - PCLZIP_OPT_REMOVE_ALL_PATH was not working correctly
41
- - Remove use of eval() and do direct call to callback functions
42
- - Correct support of 64bits systems (Thanks to WordPress team)
43
-
44
- Version 2.8.1 :
45
- - Move option PCLZIP_OPT_BY_EREG to PCLZIP_OPT_BY_PREG because ereg() is
46
- deprecated in PHP 5.3. When using option PCLZIP_OPT_BY_EREG, PclZip will
47
- automatically replace it by PCLZIP_OPT_BY_PREG.
48
-
49
- Version 2.8 :
50
- - Improve extraction of zip archive for large files by using temporary files
51
- This feature is working like the one defined in r2.7.
52
- Options are renamed : PCLZIP_OPT_TEMP_FILE_ON, PCLZIP_OPT_TEMP_FILE_OFF,
53
- PCLZIP_OPT_TEMP_FILE_THRESHOLD
54
- - Add a ratio constant PCLZIP_TEMPORARY_FILE_RATIO to configure the auto
55
- sense of temporary file use.
56
- - Bug correction : Reduce filepath in returned file list to remove ennoying
57
- './/' preambule in file path.
58
-
59
- Version 2.7 :
60
- - Improve creation of zip archive for large files :
61
- PclZip will now autosense the configured memory and use temporary files
62
- when large file is suspected.
63
- This feature can also ne triggered by manual options in create() and add()
64
- methods. 'PCLZIP_OPT_ADD_TEMP_FILE_ON' force the use of temporary files,
65
- 'PCLZIP_OPT_ADD_TEMP_FILE_OFF' disable the autosense technic,
66
- 'PCLZIP_OPT_ADD_TEMP_FILE_THRESHOLD' allow for configuration of a size
67
- threshold to use temporary files.
68
- Using "temporary files" rather than "memory" might take more time, but
69
- might give the ability to zip very large files :
70
- Tested on my win laptop with a 88Mo file :
71
- Zip "in-memory" : 18sec (max_execution_time=30, memory_limit=180Mo)
72
- Zip "tmporary-files" : 23sec (max_execution_time=30, memory_limit=30Mo)
73
- - Replace use of mktime() by time() to limit the E_STRICT error messages.
74
- - Bug correction : When adding files with full windows path (drive letter)
75
- PclZip is now working. Before, if the drive letter is not the default
76
- path, PclZip was not able to add the file.
77
-
78
- Version 2.6 :
79
- - Code optimisation
80
- - New attributes PCLZIP_ATT_FILE_COMMENT gives the ability to
81
- add a comment for a specific file. (Don't really know if this is usefull)
82
- - New attribute PCLZIP_ATT_FILE_CONTENT gives the ability to add a string
83
- as a file.
84
- - New attribute PCLZIP_ATT_FILE_MTIME modify the timestamp associated with
85
- a file.
86
- - Correct a bug. Files archived with a timestamp with 0h0m0s were extracted
87
- with current time
88
- - Add CRC value in the informations returned back for each file after an
89
- action.
90
- - Add missing closedir() statement.
91
- - When adding a folder, and removing the path of this folder, files were
92
- incorrectly added with a '/' at the beginning. Which means files are
93
- related to root in unix systems. Corrected.
94
- - Add conditional if before constant definition. This will allow users
95
- to redefine constants without changing the file, and then improve
96
- upgrade of pclzip code for new versions.
97
-
98
- Version 2.5 :
99
- - Introduce the ability to add file/folder with individual properties (file descriptor).
100
- This gives for example the ability to change the filename of a zipped file.
101
- . Able to add files individually
102
- . Able to change full name
103
- . Able to change short name
104
- . Compatible with global options
105
- - New attributes : PCLZIP_ATT_FILE_NAME, PCLZIP_ATT_FILE_NEW_SHORT_NAME, PCLZIP_ATT_FILE_NEW_FULL_NAME
106
- - New error code : PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE
107
- - Add a security control feature. PclZip can extract any file in any folder
108
- of a system. People may use this to upload a zip file and try to override
109
- a system file. The PCLZIP_OPT_EXTRACT_DIR_RESTRICTION will give the
110
- ability to forgive any directory transversal behavior.
111
- - New PCLZIP_OPT_EXTRACT_DIR_RESTRICTION : check extraction path
112
- - New error code : PCLZIP_ERR_DIRECTORY_RESTRICTION
113
- - Modification in PclZipUtilPathInclusion() : dir and path beginning with ./ will be prepend
114
- by current path (getcwd())
115
-
116
- Version 2.4 :
117
- - Code improvment : try to speed up the code by removing unusefull call to pack()
118
- - Correct bug in delete() : delete() should be called with no argument. This was not
119
- the case in 2.3. This is corrected in 2.4.
120
- - Correct a bug in path_inclusion function. When the path has several '../../', the
121
- result was bad.
122
- - Add a check for magic_quotes_runtime configuration. If enabled, PclZip will
123
- disable it while working and det it back to its original value.
124
- This resolve a lots of bad formated archive errors.
125
- - Bug correction : PclZip now correctly unzip file in some specific situation,
126
- when compressed content has same size as uncompressed content.
127
- - Bug correction : When selecting option 'PCLZIP_OPT_REMOVE_ALL_PATH',
128
- directories are not any more created.
129
- - Code improvment : correct unclosed opendir(), better handling of . and .. in
130
- loops.
131
-
132
-
133
- Version 2.3 :
134
- - Correct a bug with PHP5 : affecting the value 0xFE49FFE0 to a variable does not
135
- give the same result in PHP4 and PHP5 ....
136
-
137
- Version 2.2 :
138
- - Try development of PCLZIP_OPT_CRYPT .....
139
- However this becomes to a stop. To crypt/decrypt I need to multiply 2 long integers,
140
- the result (greater than a long) is not supported by PHP. Even the use of bcmath
141
- functions does not help. I did not find yet a solution ...;
142
- - Add missing '/' at end of directory entries
143
- - Check is a file is encrypted or not. Returns status 'unsupported_encryption' and/or
144
- error code PCLZIP_ERR_UNSUPPORTED_ENCRYPTION.
145
- - Corrected : Bad "version need to extract" field in local file header
146
- - Add private method privCheckFileHeaders() in order to check local and central
147
- file headers. PclZip is now supporting purpose bit flag bit 3. Purpose bit flag bit 3 gives
148
- the ability to have a local file header without size, compressed size and crc filled.
149
- - Add a generic status 'error' for file status
150
- - Add control of compression type. PclZip only support deflate compression method.
151
- Before v2.2, PclZip does not check the compression method used in an archive while
152
- extracting. With v2.2 PclZip returns a new error status for a file using an unsupported
153
- compression method. New status is "unsupported_compression". New error code is
154
- PCLZIP_ERR_UNSUPPORTED_COMPRESSION.
155
- - Add optional attribute PCLZIP_OPT_STOP_ON_ERROR. This will stop the extract of files
156
- when errors like 'a folder with same name exists' or 'a newer file exists' or
157
- 'a write protected file' exists, rather than set a status for the concerning file
158
- and resume the extract of the zip.
159
- - Add optional attribute PCLZIP_OPT_REPLACE_NEWER. This will force, during an extract' the
160
- replacement of the file, even if a newer version of the file exists.
161
- Note that today if a file with the same name already exists but is older it will be
162
- replaced by the extracted one.
163
- - Improve PclZipUtilOption()
164
- - Support of zip archive with trailing bytes. Before 2.2, PclZip checks that the central
165
- directory structure is the last data in the archive. Crypt encryption/decryption of
166
- zip archive put trailing 0 bytes after decryption. PclZip is now supporting this.
167
-
168
- Version 2.1 :
169
- - Add the ability to abort the extraction by using a user callback function.
170
- The user can now return the value '2' in its callback which indicates to stop the
171
- extraction. For a pre call-back extract is stopped before the extration of the current
172
- file. For a post call back, the extraction is stopped after.
173
- - Add the ability to extract a file (or several files) directly in the standard output.
174
- This is done by the new parameter PCLZIP_OPT_EXTRACT_IN_OUTPUT with method extract().
175
- - Add support for parameters PCLZIP_OPT_COMMENT, PCLZIP_OPT_ADD_COMMENT,
176
- PCLZIP_OPT_PREPEND_COMMENT. This will create, replace, add, or prepend comments
177
- in the zip archive.
178
- - When merging two archives, the comments are not any more lost, but merged, with a
179
- blank space separator.
180
- - Corrected bug : Files are not deleted when all files are asked to be deleted.
181
- - Corrected bug : Folders with name '0' made PclZip to abort the create or add feature.
182
-
183
-
184
- Version 2.0 :
185
- ***** Warning : Some new features may break the backward compatibility for your scripts.
186
- Please carefully read the readme file.
187
- - Add the ability to delete by Index, name and regular expression. This feature is
188
- performed by the method delete(), which uses the optional parameters
189
- PCLZIP_OPT_BY_INDEX, PCLZIP_OPT_BY_NAME, PCLZIP_OPT_BY_EREG or PCLZIP_OPT_BY_PREG.
190
- - Add the ability to extract by regular expression. To extract by regexp you must use the method
191
- extract(), with the option PCLZIP_OPT_BY_EREG or PCLZIP_OPT_BY_PREG
192
- (depending if you want to use ereg() or preg_match() syntax) followed by the
193
- regular expression pattern.
194
- - Add the ability to extract by index, directly with the extract() method. This is a
195
- code improvment of the extractByIndex() method.
196
- - Add the ability to extract by name. To extract by name you must use the method
197
- extract(), with the option PCLZIP_OPT_BY_NAME followed by the filename to
198
- extract or an array of filenames to extract. To extract all a folder, use the folder
199
- name rather than the filename with a '/' at the end.
200
- - Add the ability to add files without compression. This is done with a new attribute
201
- which is PCLZIP_OPT_NO_COMPRESSION.
202
- - Add the attribute PCLZIP_OPT_EXTRACT_AS_STRING, which allow to extract a file directly
203
- in a string without using any file (or temporary file).
204
- - Add constant PCLZIP_SEPARATOR for static configuration of filename separators in a single string.
205
- The default separator is now a comma (,) and not any more a blank space.
206
- THIS BREAK THE BACKWARD COMPATIBILITY : Please check if this may have an impact with
207
- your script.
208
- - Improve algorythm performance by removing the use of temporary files when adding or
209
- extracting files in an archive.
210
- - Add (correct) detection of empty filename zipping. This can occurs when the removed
211
- path is the same
212
- as a zipped dir. The dir is not zipped (['status'] = filtered), only its content.
213
- - Add better support for windows paths (thanks for help from manus@manusfreedom.com).
214
- - Corrected bug : When the archive file already exists with size=0, the add() method
215
- fails. Corrected in 2.0.
216
- - Remove the use of OS_WINDOWS constant. Use php_uname() function rather.
217
- - Control the order of index ranges in extract by index feature.
218
- - Change the internal management of folders (better handling of internal flag).
219
-
220
-
221
- Version 1.3 :
222
- - Removing the double include check. This is now done by include_once() and require_once()
223
- PHP directives.
224
- - Changing the error handling mecanism : Remove the use of an external error library.
225
- The former PclError...() functions are replaced by internal equivalent methods.
226
- By changing the environment variable PCLZIP_ERROR_EXTERNAL you can still use the former library.
227
- Introducing the use of constants for error codes rather than integer values. This will help
228
- in futur improvment.
229
- Introduction of error handling functions like errorCode(), errorName() and errorInfo().
230
- - Remove the deprecated use of calling function with arguments passed by reference.
231
- - Add the calling of extract(), extractByIndex(), create() and add() functions
232
- with variable options rather than fixed arguments.
233
- - Add the ability to remove all the file path while extracting or adding,
234
- without any need to specify the path to remove.
235
- This is available for extract(), extractByIndex(), create() and add() functionS by using
236
- the new variable options parameters :
237
- - PCLZIP_OPT_REMOVE_ALL_PATH : by indicating this option while calling the fct.
238
- - Ability to change the mode of a file after the extraction (chmod()).
239
- This is available for extract() and extractByIndex() functionS by using
240
- the new variable options parameters.
241
- - PCLZIP_OPT_SET_CHMOD : by setting the value of this option.
242
- - Ability to definition call-back options. These call-back will be called during the adding,
243
- or the extracting of file (extract(), extractByIndex(), create() and add() functions) :
244
- - PCLZIP_CB_PRE_EXTRACT : will be called before each extraction of a file. The user
245
- can trigerred the change the filename of the extracted file. The user can triggered the
246
- skip of the extraction. This is adding a 'skipped' status in the file list result value.
247
- - PCLZIP_CB_POST_EXTRACT : will be called after each extraction of a file.
248
- Nothing can be triggered from that point.
249
- - PCLZIP_CB_PRE_ADD : will be called before each add of a file. The user
250
- can trigerred the change the stored filename of the added file. The user can triggered the
251
- skip of the add. This is adding a 'skipped' status in the file list result value.
252
- - PCLZIP_CB_POST_ADD : will be called after each add of a file.
253
- Nothing can be triggered from that point.
254
- - Two status are added in the file list returned as function result : skipped & filename_too_long
255
- 'skipped' is used when a call-back function ask for skipping the file.
256
- 'filename_too_long' is used while adding a file with a too long filename to archive (the file is
257
- not added)
258
- - Adding the function PclZipUtilPathInclusion(), that check the inclusion of a path into
259
- a directory.
260
- - Add a check of the presence of the archive file before some actions (like list, ...)
261
- - Add the initialisation of field "index" in header array. This means that by
262
- default index will be -1 when not explicitly set by the methods.
263
-
264
- Version 1.2 :
265
- - Adding a duplicate function.
266
- - Adding a merge function. The merge function is a "quick merge" function,
267
- it just append the content of an archive at the end of the first one. There
268
- is no check for duplicate files or more recent files.
269
- - Improve the search of the central directory end.
270
-
271
- Version 1.1.2 :
272
-
273
- - Changing the license of PclZip. PclZip is now released under the GNU / LGPL license
274
- (see License section).
275
- - Adding the optional support of a static temporary directory. You will need to configure
276
- the constant PCLZIP_TEMPORARY_DIR if you want to use this feature.
277
- - Improving the rename() function. In some cases rename() does not work (different
278
- Filesystems), so it will be replaced by a copy() + unlink() functions.
279
-
280
- Version 1.1.1 :
281
-
282
- - Maintenance release, no new feature.
283
-
284
- Version 1.1 :
285
-
286
- - New method Add() : adding files in the archive
287
- - New method ExtractByIndex() : partial extract of the archive, files are identified by
288
- their index in the archive
289
- - New method DeleteByIndex() : delete some files/folder entries from the archive,
290
- files are identified by their index in the archive.
291
- - Adding a test of the zlib extension presence. If not present abort the script.
292
-
293
- Version 1.0.1 :
294
-
295
- - No new feature
296
-
297
-
298
- 3 - Corrected bugs
299
- ==================
300
-
301
- Corrected in Version 2.0 :
302
- - Corrected : During an extraction, if a call-back fucntion is used and try to skip
303
- a file, all the extraction process is stopped.
304
-
305
- Corrected in Version 1.3 :
306
- - Corrected : Support of static synopsis for method extract() is broken.
307
- - Corrected : invalid size of archive content field (0xFF) should be (0xFFFF).
308
- - Corrected : When an extract is done with a remove_path parameter, the entry for
309
- the directory with exactly the same path is not skipped/filtered.
310
- - Corrected : extractByIndex() and deleteByIndex() were not managing index in the
311
- right way. For example indexes '1,3-5,11' will only extract files 1 and 11. This
312
- is due to a sort of the index resulting table that puts 11 before 3-5 (sort on
313
- string and not interger). The sort is temporarilly removed, this means that
314
- you must provide a sorted list of index ranges.
315
-
316
- Corrected in Version 1.2 :
317
-
318
- - Nothing.
319
-
320
- Corrected in Version 1.1.2 :
321
-
322
- - Corrected : Winzip is unable to delete or add new files in a PclZip created archives.
323
-
324
- Corrected in Version 1.1.1 :
325
-
326
- - Corrected : When archived file is not compressed (0% compression), the
327
- extract method fails.
328
-
329
- Corrected in Version 1.1 :
330
-
331
- - Corrected : Adding a complete tree of folder may result in a bad archive
332
- creation.
333
-
334
- Corrected in Version 1.0.1 :
335
-
336
- - Corrected : Error while compressing files greater than PCLZIP_READ_BLOCK_SIZE (default=1024).
337
-
338
-
339
- 4 - Known bugs or limitations
340
- =============================
341
-
342
- Please publish bugs reports in SourceForge :
343
- http://sourceforge.net/tracker/?group_id=40254&atid=427564
344
-
345
- In Version 2.x :
346
- - PclZip does only support file uncompressed or compressed with deflate (compression method 8)
347
- - PclZip does not support password protected zip archive
348
- - Some concern were seen when changing mtime of a file while archiving.
349
- Seems to be linked to Daylight Saving Time (PclTest_changing_mtime).
350
-
351
- In Version 1.2 :
352
-
353
- - merge() methods does not check for duplicate files or last date of modifications.
354
-
355
- In Version 1.1 :
356
-
357
- - Limitation : Using 'extract' fields in the file header in the zip archive is not supported.
358
- - WinZip is unable to delete a single file in a PclZip created archive. It is also unable to
359
- add a file in a PclZip created archive. (Corrected in v.1.2)
360
-
361
- In Version 1.0.1 :
362
-
363
- - Adding a complete tree of folder may result in a bad archive
364
- creation. (Corrected in V.1.1).
365
- - Path given to methods must be in the unix format (/) and not the Windows format (\).
366
- Workaround : Use only / directory separators.
367
- - PclZip is using temporary files that are sometime the name of the file with a .tmp or .gz
368
- added suffix. Files with these names may already exist and may be overwritten.
369
- Workaround : none.
370
- - PclZip does not check if the zlib extension is present. If it is absent, the zip
371
- file is not created and the lib abort without warning.
372
- Workaround : enable the zlib extension on the php install
373
-
374
- In Version 1.0 :
375
-
376
- - Error while compressing files greater than PCLZIP_READ_BLOCK_SIZE (default=1024).
377
- (Corrected in v.1.0.1)
378
- - Limitation : Multi-disk zip archive are not supported.
379
-
380
-
381
- 5 - License
382
- ===========
383
-
384
- Since version 1.1.2, PclZip Library is released under GNU/LGPL license.
385
- This library is free, so you can use it at no cost.
386
-
387
- HOWEVER, if you release a script, an application, a library or any kind of
388
- code using PclZip library (or a part of it), YOU MUST :
389
- - Indicate in the documentation (or a readme file), that your work
390
- uses PclZip Library, and make a reference to the author and the web site
391
- http://www.phpconcept.net
392
- - Gives the ability to the final user to update the PclZip libary.
393
-
394
- I will also appreciate that you send me a mail (vincent@phpconcept.net), just to
395
- be aware that someone is using PclZip.
396
-
397
- For more information about GNU/LGPL license : http://www.gnu.org
398
-
399
- 6 - Warning
400
- =================
401
-
402
- This library and the associated files are non commercial, non professional work.
403
- It should not have unexpected results. However if any damage is caused by this software
404
- the author can not be responsible.
405
- The use of this software is at the risk of the user.
406
-
407
- 7 - Documentation
408
- =================
409
- PclZip User Manuel is available in English on PhpConcept : http://www.phpconcept.net/pclzip/man/en/index.php
410
- A Russian translation was done by Feskov Kuzma : http://php.russofile.ru/ru/authors/unsort/zip/
411
-
412
- 8 - Author
413
- ==========
414
-
415
- This software was written by Vincent Blavet (vincent@phpconcept.net) on its leasure time.
416
-
417
- 9 - Contribute
418
- ==============
419
- If you want to contribute to the development of PclZip, please contact vincent@phpconcept.net.
420
- If you can help in financing PhpConcept hosting service, please go to
421
- http://www.phpconcept.net/soutien.php
1
+ // --------------------------------------------------------------------------------
2
+ // PclZip 2.8.2 - readme.txt
3
+ // --------------------------------------------------------------------------------
4
+ // License GNU/LGPL - August 2009
5
+ // Vincent Blavet - vincent@phpconcept.net
6
+ // http://www.phpconcept.net
7
+ // --------------------------------------------------------------------------------
8
+ // $Id: readme.txt,v 1.60 2009/09/30 20:35:21 vblavet Exp $
9
+ // --------------------------------------------------------------------------------
10
+
11
+
12
+
13
+ 0 - Sommaire
14
+ ============
15
+ 1 - Introduction
16
+ 2 - What's new
17
+ 3 - Corrected bugs
18
+ 4 - Known bugs or limitations
19
+ 5 - License
20
+ 6 - Warning
21
+ 7 - Documentation
22
+ 8 - Author
23
+ 9 - Contribute
24
+
25
+ 1 - Introduction
26
+ ================
27
+
28
+ PclZip is a library that allow you to manage a Zip archive.
29
+
30
+ Full documentation about PclZip can be found here : http://www.phpconcept.net/pclzip
31
+
32
+ 2 - What's new
33
+ ==============
34
+
35
+ Version 2.8.2 :
36
+ - PCLZIP_CB_PRE_EXTRACT and PCLZIP_CB_POST_EXTRACT are now supported with
37
+ extraction as a string (PCLZIP_OPT_EXTRACT_AS_STRING). The string
38
+ can also be modified in the post-extract call back.
39
+ **Bugs correction :
40
+ - PCLZIP_OPT_REMOVE_ALL_PATH was not working correctly
41
+ - Remove use of eval() and do direct call to callback functions
42
+ - Correct support of 64bits systems (Thanks to WordPress team)
43
+
44
+ Version 2.8.1 :
45
+ - Move option PCLZIP_OPT_BY_EREG to PCLZIP_OPT_BY_PREG because ereg() is
46
+ deprecated in PHP 5.3. When using option PCLZIP_OPT_BY_EREG, PclZip will
47
+ automatically replace it by PCLZIP_OPT_BY_PREG.
48
+
49
+ Version 2.8 :
50
+ - Improve extraction of zip archive for large files by using temporary files
51
+ This feature is working like the one defined in r2.7.
52
+ Options are renamed : PCLZIP_OPT_TEMP_FILE_ON, PCLZIP_OPT_TEMP_FILE_OFF,
53
+ PCLZIP_OPT_TEMP_FILE_THRESHOLD
54
+ - Add a ratio constant PCLZIP_TEMPORARY_FILE_RATIO to configure the auto
55
+ sense of temporary file use.
56
+ - Bug correction : Reduce filepath in returned file list to remove ennoying
57
+ './/' preambule in file path.
58
+
59
+ Version 2.7 :
60
+ - Improve creation of zip archive for large files :
61
+ PclZip will now autosense the configured memory and use temporary files
62
+ when large file is suspected.
63
+ This feature can also ne triggered by manual options in create() and add()
64
+ methods. 'PCLZIP_OPT_ADD_TEMP_FILE_ON' force the use of temporary files,
65
+ 'PCLZIP_OPT_ADD_TEMP_FILE_OFF' disable the autosense technic,
66
+ 'PCLZIP_OPT_ADD_TEMP_FILE_THRESHOLD' allow for configuration of a size
67
+ threshold to use temporary files.
68
+ Using "temporary files" rather than "memory" might take more time, but
69
+ might give the ability to zip very large files :
70
+ Tested on my win laptop with a 88Mo file :
71
+ Zip "in-memory" : 18sec (max_execution_time=30, memory_limit=180Mo)
72
+ Zip "tmporary-files" : 23sec (max_execution_time=30, memory_limit=30Mo)
73
+ - Replace use of mktime() by time() to limit the E_STRICT error messages.
74
+ - Bug correction : When adding files with full windows path (drive letter)
75
+ PclZip is now working. Before, if the drive letter is not the default
76
+ path, PclZip was not able to add the file.
77
+
78
+ Version 2.6 :
79
+ - Code optimisation
80
+ - New attributes PCLZIP_ATT_FILE_COMMENT gives the ability to
81
+ add a comment for a specific file. (Don't really know if this is usefull)
82
+ - New attribute PCLZIP_ATT_FILE_CONTENT gives the ability to add a string
83
+ as a file.
84
+ - New attribute PCLZIP_ATT_FILE_MTIME modify the timestamp associated with
85
+ a file.
86
+ - Correct a bug. Files archived with a timestamp with 0h0m0s were extracted
87
+ with current time
88
+ - Add CRC value in the informations returned back for each file after an
89
+ action.
90
+ - Add missing closedir() statement.
91
+ - When adding a folder, and removing the path of this folder, files were
92
+ incorrectly added with a '/' at the beginning. Which means files are
93
+ related to root in unix systems. Corrected.
94
+ - Add conditional if before constant definition. This will allow users
95
+ to redefine constants without changing the file, and then improve
96
+ upgrade of pclzip code for new versions.
97
+
98
+ Version 2.5 :
99
+ - Introduce the ability to add file/folder with individual properties (file descriptor).
100
+ This gives for example the ability to change the filename of a zipped file.
101
+ . Able to add files individually
102
+ . Able to change full name
103
+ . Able to change short name
104
+ . Compatible with global options
105
+ - New attributes : PCLZIP_ATT_FILE_NAME, PCLZIP_ATT_FILE_NEW_SHORT_NAME, PCLZIP_ATT_FILE_NEW_FULL_NAME
106
+ - New error code : PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE
107
+ - Add a security control feature. PclZip can extract any file in any folder
108
+ of a system. People may use this to upload a zip file and try to override
109
+ a system file. The PCLZIP_OPT_EXTRACT_DIR_RESTRICTION will give the
110
+ ability to forgive any directory transversal behavior.
111
+ - New PCLZIP_OPT_EXTRACT_DIR_RESTRICTION : check extraction path
112
+ - New error code : PCLZIP_ERR_DIRECTORY_RESTRICTION
113
+ - Modification in PclZipUtilPathInclusion() : dir and path beginning with ./ will be prepend
114
+ by current path (getcwd())
115
+
116
+ Version 2.4 :
117
+ - Code improvment : try to speed up the code by removing unusefull call to pack()
118
+ - Correct bug in delete() : delete() should be called with no argument. This was not
119
+ the case in 2.3. This is corrected in 2.4.
120
+ - Correct a bug in path_inclusion function. When the path has several '../../', the
121
+ result was bad.
122
+ - Add a check for magic_quotes_runtime configuration. If enabled, PclZip will
123
+ disable it while working and det it back to its original value.
124
+ This resolve a lots of bad formated archive errors.
125
+ - Bug correction : PclZip now correctly unzip file in some specific situation,
126
+ when compressed content has same size as uncompressed content.
127
+ - Bug correction : When selecting option 'PCLZIP_OPT_REMOVE_ALL_PATH',
128
+ directories are not any more created.
129
+ - Code improvment : correct unclosed opendir(), better handling of . and .. in
130
+ loops.
131
+
132
+
133
+ Version 2.3 :
134
+ - Correct a bug with PHP5 : affecting the value 0xFE49FFE0 to a variable does not
135
+ give the same result in PHP4 and PHP5 ....
136
+
137
+ Version 2.2 :
138
+ - Try development of PCLZIP_OPT_CRYPT .....
139
+ However this becomes to a stop. To crypt/decrypt I need to multiply 2 long integers,
140
+ the result (greater than a long) is not supported by PHP. Even the use of bcmath
141
+ functions does not help. I did not find yet a solution ...;
142
+ - Add missing '/' at end of directory entries
143
+ - Check is a file is encrypted or not. Returns status 'unsupported_encryption' and/or
144
+ error code PCLZIP_ERR_UNSUPPORTED_ENCRYPTION.
145
+ - Corrected : Bad "version need to extract" field in local file header
146
+ - Add private method privCheckFileHeaders() in order to check local and central
147
+ file headers. PclZip is now supporting purpose bit flag bit 3. Purpose bit flag bit 3 gives
148
+ the ability to have a local file header without size, compressed size and crc filled.
149
+ - Add a generic status 'error' for file status
150
+ - Add control of compression type. PclZip only support deflate compression method.
151
+ Before v2.2, PclZip does not check the compression method used in an archive while
152
+ extracting. With v2.2 PclZip returns a new error status for a file using an unsupported
153
+ compression method. New status is "unsupported_compression". New error code is
154
+ PCLZIP_ERR_UNSUPPORTED_COMPRESSION.
155
+ - Add optional attribute PCLZIP_OPT_STOP_ON_ERROR. This will stop the extract of files
156
+ when errors like 'a folder with same name exists' or 'a newer file exists' or
157
+ 'a write protected file' exists, rather than set a status for the concerning file
158
+ and resume the extract of the zip.
159
+ - Add optional attribute PCLZIP_OPT_REPLACE_NEWER. This will force, during an extract' the
160
+ replacement of the file, even if a newer version of the file exists.
161
+ Note that today if a file with the same name already exists but is older it will be
162
+ replaced by the extracted one.
163
+ - Improve PclZipUtilOption()
164
+ - Support of zip archive with trailing bytes. Before 2.2, PclZip checks that the central
165
+ directory structure is the last data in the archive. Crypt encryption/decryption of
166
+ zip archive put trailing 0 bytes after decryption. PclZip is now supporting this.
167
+
168
+ Version 2.1 :
169
+ - Add the ability to abort the extraction by using a user callback function.
170
+ The user can now return the value '2' in its callback which indicates to stop the
171
+ extraction. For a pre call-back extract is stopped before the extration of the current
172
+ file. For a post call back, the extraction is stopped after.
173
+ - Add the ability to extract a file (or several files) directly in the standard output.
174
+ This is done by the new parameter PCLZIP_OPT_EXTRACT_IN_OUTPUT with method extract().
175
+ - Add support for parameters PCLZIP_OPT_COMMENT, PCLZIP_OPT_ADD_COMMENT,
176
+ PCLZIP_OPT_PREPEND_COMMENT. This will create, replace, add, or prepend comments
177
+ in the zip archive.
178
+ - When merging two archives, the comments are not any more lost, but merged, with a
179
+ blank space separator.
180
+ - Corrected bug : Files are not deleted when all files are asked to be deleted.
181
+ - Corrected bug : Folders with name '0' made PclZip to abort the create or add feature.
182
+
183
+
184
+ Version 2.0 :
185
+ ***** Warning : Some new features may break the backward compatibility for your scripts.
186
+ Please carefully read the readme file.
187
+ - Add the ability to delete by Index, name and regular expression. This feature is
188
+ performed by the method delete(), which uses the optional parameters
189
+ PCLZIP_OPT_BY_INDEX, PCLZIP_OPT_BY_NAME, PCLZIP_OPT_BY_EREG or PCLZIP_OPT_BY_PREG.
190
+ - Add the ability to extract by regular expression. To extract by regexp you must use the method
191
+ extract(), with the option PCLZIP_OPT_BY_EREG or PCLZIP_OPT_BY_PREG
192
+ (depending if you want to use ereg() or preg_match() syntax) followed by the
193
+ regular expression pattern.
194
+ - Add the ability to extract by index, directly with the extract() method. This is a
195
+ code improvment of the extractByIndex() method.
196
+ - Add the ability to extract by name. To extract by name you must use the method
197
+ extract(), with the option PCLZIP_OPT_BY_NAME followed by the filename to
198
+ extract or an array of filenames to extract. To extract all a folder, use the folder
199
+ name rather than the filename with a '/' at the end.
200
+ - Add the ability to add files without compression. This is done with a new attribute
201
+ which is PCLZIP_OPT_NO_COMPRESSION.
202
+ - Add the attribute PCLZIP_OPT_EXTRACT_AS_STRING, which allow to extract a file directly
203
+ in a string without using any file (or temporary file).
204
+ - Add constant PCLZIP_SEPARATOR for static configuration of filename separators in a single string.
205
+ The default separator is now a comma (,) and not any more a blank space.
206
+ THIS BREAK THE BACKWARD COMPATIBILITY : Please check if this may have an impact with
207
+ your script.
208
+ - Improve algorythm performance by removing the use of temporary files when adding or
209
+ extracting files in an archive.
210
+ - Add (correct) detection of empty filename zipping. This can occurs when the removed
211
+ path is the same
212
+ as a zipped dir. The dir is not zipped (['status'] = filtered), only its content.
213
+ - Add better support for windows paths (thanks for help from manus@manusfreedom.com).
214
+ - Corrected bug : When the archive file already exists with size=0, the add() method
215
+ fails. Corrected in 2.0.
216
+ - Remove the use of OS_WINDOWS constant. Use php_uname() function rather.
217
+ - Control the order of index ranges in extract by index feature.
218
+ - Change the internal management of folders (better handling of internal flag).
219
+
220
+
221
+ Version 1.3 :
222
+ - Removing the double include check. This is now done by include_once() and require_once()
223
+ PHP directives.
224
+ - Changing the error handling mecanism : Remove the use of an external error library.
225
+ The former PclError...() functions are replaced by internal equivalent methods.
226
+ By changing the environment variable PCLZIP_ERROR_EXTERNAL you can still use the former library.
227
+ Introducing the use of constants for error codes rather than integer values. This will help
228
+ in futur improvment.
229
+ Introduction of error handling functions like errorCode(), errorName() and errorInfo().
230
+ - Remove the deprecated use of calling function with arguments passed by reference.
231
+ - Add the calling of extract(), extractByIndex(), create() and add() functions
232
+ with variable options rather than fixed arguments.
233
+ - Add the ability to remove all the file path while extracting or adding,
234
+ without any need to specify the path to remove.
235
+ This is available for extract(), extractByIndex(), create() and add() functionS by using
236
+ the new variable options parameters :
237
+ - PCLZIP_OPT_REMOVE_ALL_PATH : by indicating this option while calling the fct.
238
+ - Ability to change the mode of a file after the extraction (chmod()).
239
+ This is available for extract() and extractByIndex() functionS by using
240
+ the new variable options parameters.
241
+ - PCLZIP_OPT_SET_CHMOD : by setting the value of this option.
242
+ - Ability to definition call-back options. These call-back will be called during the adding,
243
+ or the extracting of file (extract(), extractByIndex(), create() and add() functions) :
244
+ - PCLZIP_CB_PRE_EXTRACT : will be called before each extraction of a file. The user
245
+ can trigerred the change the filename of the extracted file. The user can triggered the
246
+ skip of the extraction. This is adding a 'skipped' status in the file list result value.
247
+ - PCLZIP_CB_POST_EXTRACT : will be called after each extraction of a file.
248
+ Nothing can be triggered from that point.
249
+ - PCLZIP_CB_PRE_ADD : will be called before each add of a file. The user
250
+ can trigerred the change the stored filename of the added file. The user can triggered the
251
+ skip of the add. This is adding a 'skipped' status in the file list result value.
252
+ - PCLZIP_CB_POST_ADD : will be called after each add of a file.
253
+ Nothing can be triggered from that point.
254
+ - Two status are added in the file list returned as function result : skipped & filename_too_long
255
+ 'skipped' is used when a call-back function ask for skipping the file.
256
+ 'filename_too_long' is used while adding a file with a too long filename to archive (the file is
257
+ not added)
258
+ - Adding the function PclZipUtilPathInclusion(), that check the inclusion of a path into
259
+ a directory.
260
+ - Add a check of the presence of the archive file before some actions (like list, ...)
261
+ - Add the initialisation of field "index" in header array. This means that by
262
+ default index will be -1 when not explicitly set by the methods.
263
+
264
+ Version 1.2 :
265
+ - Adding a duplicate function.
266
+ - Adding a merge function. The merge function is a "quick merge" function,
267
+ it just append the content of an archive at the end of the first one. There
268
+ is no check for duplicate files or more recent files.
269
+ - Improve the search of the central directory end.
270
+
271
+ Version 1.1.2 :
272
+
273
+ - Changing the license of PclZip. PclZip is now released under the GNU / LGPL license
274
+ (see License section).
275
+ - Adding the optional support of a static temporary directory. You will need to configure
276
+ the constant PCLZIP_TEMPORARY_DIR if you want to use this feature.
277
+ - Improving the rename() function. In some cases rename() does not work (different
278
+ Filesystems), so it will be replaced by a copy() + unlink() functions.
279
+
280
+ Version 1.1.1 :
281
+
282
+ - Maintenance release, no new feature.
283
+
284
+ Version 1.1 :
285
+
286
+ - New method Add() : adding files in the archive
287
+ - New method ExtractByIndex() : partial extract of the archive, files are identified by
288
+ their index in the archive
289
+ - New method DeleteByIndex() : delete some files/folder entries from the archive,
290
+ files are identified by their index in the archive.
291
+ - Adding a test of the zlib extension presence. If not present abort the script.
292
+
293
+ Version 1.0.1 :
294
+
295
+ - No new feature
296
+
297
+
298
+ 3 - Corrected bugs
299
+ ==================
300
+
301
+ Corrected in Version 2.0 :
302
+ - Corrected : During an extraction, if a call-back fucntion is used and try to skip
303
+ a file, all the extraction process is stopped.
304
+
305
+ Corrected in Version 1.3 :
306
+ - Corrected : Support of static synopsis for method extract() is broken.
307
+ - Corrected : invalid size of archive content field (0xFF) should be (0xFFFF).
308
+ - Corrected : When an extract is done with a remove_path parameter, the entry for
309
+ the directory with exactly the same path is not skipped/filtered.
310
+ - Corrected : extractByIndex() and deleteByIndex() were not managing index in the
311
+ right way. For example indexes '1,3-5,11' will only extract files 1 and 11. This
312
+ is due to a sort of the index resulting table that puts 11 before 3-5 (sort on
313
+ string and not interger). The sort is temporarilly removed, this means that
314
+ you must provide a sorted list of index ranges.
315
+
316
+ Corrected in Version 1.2 :
317
+
318
+ - Nothing.
319
+
320
+ Corrected in Version 1.1.2 :
321
+
322
+ - Corrected : Winzip is unable to delete or add new files in a PclZip created archives.
323
+
324
+ Corrected in Version 1.1.1 :
325
+
326
+ - Corrected : When archived file is not compressed (0% compression), the
327
+ extract method fails.
328
+
329
+ Corrected in Version 1.1 :
330
+
331
+ - Corrected : Adding a complete tree of folder may result in a bad archive
332
+ creation.
333
+
334
+ Corrected in Version 1.0.1 :
335
+
336
+ - Corrected : Error while compressing files greater than PCLZIP_READ_BLOCK_SIZE (default=1024).
337
+
338
+
339
+ 4 - Known bugs or limitations
340
+ =============================
341
+
342
+ Please publish bugs reports in SourceForge :
343
+ http://sourceforge.net/tracker/?group_id=40254&atid=427564
344
+
345
+ In Version 2.x :
346
+ - PclZip does only support file uncompressed or compressed with deflate (compression method 8)
347
+ - PclZip does not support password protected zip archive
348
+ - Some concern were seen when changing mtime of a file while archiving.
349
+ Seems to be linked to Daylight Saving Time (PclTest_changing_mtime).
350
+
351
+ In Version 1.2 :
352
+
353
+ - merge() methods does not check for duplicate files or last date of modifications.
354
+
355
+ In Version 1.1 :
356
+
357
+ - Limitation : Using 'extract' fields in the file header in the zip archive is not supported.
358
+ - WinZip is unable to delete a single file in a PclZip created archive. It is also unable to
359
+ add a file in a PclZip created archive. (Corrected in v.1.2)
360
+
361
+ In Version 1.0.1 :
362
+
363
+ - Adding a complete tree of folder may result in a bad archive
364
+ creation. (Corrected in V.1.1).
365
+ - Path given to methods must be in the unix format (/) and not the Windows format (\).
366
+ Workaround : Use only / directory separators.
367
+ - PclZip is using temporary files that are sometime the name of the file with a .tmp or .gz
368
+ added suffix. Files with these names may already exist and may be overwritten.
369
+ Workaround : none.
370
+ - PclZip does not check if the zlib extension is present. If it is absent, the zip
371
+ file is not created and the lib abort without warning.
372
+ Workaround : enable the zlib extension on the php install
373
+
374
+ In Version 1.0 :
375
+
376
+ - Error while compressing files greater than PCLZIP_READ_BLOCK_SIZE (default=1024).
377
+ (Corrected in v.1.0.1)
378
+ - Limitation : Multi-disk zip archive are not supported.
379
+
380
+
381
+ 5 - License
382
+ ===========
383
+
384
+ Since version 1.1.2, PclZip Library is released under GNU/LGPL license.
385
+ This library is free, so you can use it at no cost.
386
+
387
+ HOWEVER, if you release a script, an application, a library or any kind of
388
+ code using PclZip library (or a part of it), YOU MUST :
389
+ - Indicate in the documentation (or a readme file), that your work
390
+ uses PclZip Library, and make a reference to the author and the web site
391
+ http://www.phpconcept.net
392
+ - Gives the ability to the final user to update the PclZip libary.
393
+
394
+ I will also appreciate that you send me a mail (vincent@phpconcept.net), just to
395
+ be aware that someone is using PclZip.
396
+
397
+ For more information about GNU/LGPL license : http://www.gnu.org
398
+
399
+ 6 - Warning
400
+ =================
401
+
402
+ This library and the associated files are non commercial, non professional work.
403
+ It should not have unexpected results. However if any damage is caused by this software
404
+ the author can not be responsible.
405
+ The use of this software is at the risk of the user.
406
+
407
+ 7 - Documentation
408
+ =================
409
+ PclZip User Manuel is available in English on PhpConcept : http://www.phpconcept.net/pclzip/man/en/index.php
410
+ A Russian translation was done by Feskov Kuzma : http://php.russofile.ru/ru/authors/unsort/zip/
411
+
412
+ 8 - Author
413
+ ==========
414
+
415
+ This software was written by Vincent Blavet (vincent@phpconcept.net) on its leasure time.
416
+
417
+ 9 - Contribute
418
+ ==============
419
+ If you want to contribute to the development of PclZip, please contact vincent@phpconcept.net.
420
+ If you can help in financing PhpConcept hosting service, please go to
421
+ http://www.phpconcept.net/soutien.php
lib/phpExcel/PHPExcel/Shared/PasswordHasher.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/String.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/TimeZone.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/XMLWriter.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/ZipArchive.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/ZipStreamWrapper.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/trend/bestFitClass.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/trend/exponentialBestFitClass.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/trend/linearBestFitClass.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/trend/logarithmicBestFitClass.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/trend/polynomialBestFitClass.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/trend/powerBestFitClass.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Shared/trend/trendClass.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Style.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Style/Alignment.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Style/Border.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Style/Borders.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Style/Color.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Style/Conditional.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Style/Fill.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Style/Font.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Style/NumberFormat.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Style/Protection.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Style/Supervisor.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Worksheet.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Worksheet/AutoFilter.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Worksheet/AutoFilter/Column.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Worksheet/AutoFilter/Column/Rule.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Worksheet/BaseDrawing.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Worksheet/CellIterator.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Worksheet/Column.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Worksheet/ColumnCellIterator.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Worksheet/ColumnDimension.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Worksheet/ColumnIterator.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Worksheet/Dimension.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Worksheet/Drawing.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Worksheet/Drawing/Shadow.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Worksheet/HeaderFooter.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Worksheet/HeaderFooterDrawing.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Worksheet/MemoryDrawing.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Worksheet/PageMargins.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Worksheet/PageSetup.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Worksheet/Protection.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Worksheet/Row.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Worksheet/RowCellIterator.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Worksheet/RowDimension.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Worksheet/RowIterator.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Worksheet/SheetView.php CHANGED
File without changes
lib/phpExcel/PHPExcel/WorksheetIterator.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/Abstract.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/CSV.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/Excel2007.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/Excel2007/Chart.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/Excel2007/Comments.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/Excel2007/ContentTypes.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/Excel2007/DocProps.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/Excel2007/Drawing.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/Excel2007/Rels.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/Excel2007/RelsRibbon.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/Excel2007/RelsVBA.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/Excel2007/StringTable.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/Excel2007/Style.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/Excel2007/Theme.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/Excel2007/Workbook.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/Excel2007/Worksheet.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/Excel2007/WriterPart.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/Excel5.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/Excel5/BIFFwriter.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/Excel5/Escher.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/Excel5/Font.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/Excel5/Parser.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/Excel5/Workbook.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/Excel5/Worksheet.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/Excel5/Xf.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/Exception.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/HTML.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/IWriter.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/OpenDocument.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/OpenDocument/Cell/Comment.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/OpenDocument/Content.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/OpenDocument/Meta.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/OpenDocument/MetaInf.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/OpenDocument/Mimetype.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/OpenDocument/Settings.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/OpenDocument/Styles.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/OpenDocument/Thumbnails.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/OpenDocument/WriterPart.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/PDF.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/PDF/Core.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/PDF/DomPDF.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/PDF/mPDF.php CHANGED
File without changes
lib/phpExcel/PHPExcel/Writer/PDF/tcPDF.php CHANGED
File without changes
lib/phpExcel/PHPExcel/locale/bg/config CHANGED
File without changes
lib/phpExcel/PHPExcel/locale/cs/config CHANGED
File without changes
lib/phpExcel/PHPExcel/locale/cs/functions CHANGED
File without changes
lib/phpExcel/PHPExcel/locale/da/config CHANGED
File without changes
lib/phpExcel/PHPExcel/locale/da/functions CHANGED
File without changes
lib/phpExcel/PHPExcel/locale/de/config CHANGED
File without changes
lib/phpExcel/PHPExcel/locale/de/functions CHANGED
File without changes
lib/phpExcel/PHPExcel/locale/en/uk/config CHANGED
File without changes
lib/phpExcel/PHPExcel/locale/es/config CHANGED
File without changes
lib/phpExcel/PHPExcel/locale/es/functions CHANGED
File without changes
lib/phpExcel/PHPExcel/locale/fi/config CHANGED
File without changes
lib/phpExcel/PHPExcel/locale/fi/functions CHANGED
File without changes
lib/phpExcel/PHPExcel/locale/fr/config CHANGED
File without changes
lib/phpExcel/PHPExcel/locale/fr/functions CHANGED
File without changes
lib/phpExcel/PHPExcel/locale/hu/config CHANGED
File without changes
lib/phpExcel/PHPExcel/locale/hu/functions CHANGED
File without changes
lib/phpExcel/PHPExcel/locale/it/config CHANGED
File without changes
lib/phpExcel/PHPExcel/locale/it/functions CHANGED
File without changes
lib/phpExcel/PHPExcel/locale/nl/config CHANGED
File without changes
lib/phpExcel/PHPExcel/locale/nl/functions CHANGED
File without changes
lib/phpExcel/PHPExcel/locale/no/config CHANGED
File without changes
lib/phpExcel/PHPExcel/locale/no/functions CHANGED
File without changes
lib/phpExcel/PHPExcel/locale/pl/config CHANGED
File without changes
lib/phpExcel/PHPExcel/locale/pl/functions CHANGED
File without changes
lib/phpExcel/PHPExcel/locale/pt/br/config CHANGED
File without changes
lib/phpExcel/PHPExcel/locale/pt/br/functions CHANGED
@@ -1,408 +1,408 @@
1
- ##
2
- ## Add-in and Automation functions Funções Suplemento e Automação
3
- ##
4
- GETPIVOTDATA = INFODADOSTABELADINÂMICA ## Retorna os dados armazenados em um relatório de tabela dinâmica
5
-
6
-
7
- ##
8
- ## Cube functions Funções de Cubo
9
- ##
10
- CUBEKPIMEMBER = MEMBROKPICUBO ## Retorna o nome de um KPI (indicador de desempenho-chave), uma propriedade e uma medida e exibe o nome e a propriedade na célula. Um KPI é uma medida quantificável, como o lucro bruto mensal ou a rotatividade trimestral dos funcionários, usada para monitorar o desempenho de uma organização.
11
- CUBEMEMBER = MEMBROCUBO ## Retorna um membro ou tupla em uma hierarquia de cubo. Use para validar se o membro ou tupla existe no cubo.
12
- CUBEMEMBERPROPERTY = PROPRIEDADEMEMBROCUBO ## Retorna o valor da propriedade de um membro no cubo. Usada para validar a existência do nome do membro no cubo e para retornar a propriedade especificada para esse membro.
13
- CUBERANKEDMEMBER = MEMBROCLASSIFICADOCUBO ## Retorna o enésimo membro, ou o membro ordenado, em um conjunto. Use para retornar um ou mais elementos em um conjunto, assim como o melhor vendedor ou os dez melhores alunos.
14
- CUBESET = CONJUNTOCUBO ## Define um conjunto calculado de membros ou tuplas enviando uma expressão do conjunto para o cubo no servidor, que cria o conjunto e o retorna para o Microsoft Office Excel.
15
- CUBESETCOUNT = CONTAGEMCONJUNTOCUBO ## Retorna o número de itens em um conjunto.
16
- CUBEVALUE = VALORCUBO ## Retorna um valor agregado de um cubo.
17
-
18
-
19
- ##
20
- ## Database functions Funções de banco de dados
21
- ##
22
- DAVERAGE = BDMÉDIA ## Retorna a média das entradas selecionadas de um banco de dados
23
- DCOUNT = BDCONTAR ## Conta as células que contêm números em um banco de dados
24
- DCOUNTA = BDCONTARA ## Conta células não vazias em um banco de dados
25
- DGET = BDEXTRAIR ## Extrai de um banco de dados um único registro que corresponde a um critério específico
26
- DMAX = BDMÁX ## Retorna o valor máximo de entradas selecionadas de um banco de dados
27
- DMIN = BDMÍN ## Retorna o valor mínimo de entradas selecionadas de um banco de dados
28
- DPRODUCT = BDMULTIPL ## Multiplica os valores em um campo específico de registros que correspondem ao critério em um banco de dados
29
- DSTDEV = BDEST ## Estima o desvio padrão com base em uma amostra de entradas selecionadas de um banco de dados
30
- DSTDEVP = BDDESVPA ## Calcula o desvio padrão com base na população inteira de entradas selecionadas de um banco de dados
31
- DSUM = BDSOMA ## Adiciona os números à coluna de campos de registros do banco de dados que correspondem ao critério
32
- DVAR = BDVAREST ## Estima a variância com base em uma amostra de entradas selecionadas de um banco de dados
33
- DVARP = BDVARP ## Calcula a variância com base na população inteira de entradas selecionadas de um banco de dados
34
-
35
-
36
- ##
37
- ## Date and time functions Funções de data e hora
38
- ##
39
- DATE = DATA ## Retorna o número de série de uma data específica
40
- DATEVALUE = DATA.VALOR ## Converte uma data na forma de texto para um número de série
41
- DAY = DIA ## Converte um número de série em um dia do mês
42
- DAYS360 = DIAS360 ## Calcula o número de dias entre duas datas com base em um ano de 360 dias
43
- EDATE = DATAM ## Retorna o número de série da data que é o número indicado de meses antes ou depois da data inicial
44
- EOMONTH = FIMMÊS ## Retorna o número de série do último dia do mês antes ou depois de um número especificado de meses
45
- HOUR = HORA ## Converte um número de série em uma hora
46
- MINUTE = MINUTO ## Converte um número de série em um minuto
47
- MONTH = MÊS ## Converte um número de série em um mês
48
- NETWORKDAYS = DIATRABALHOTOTAL ## Retorna o número de dias úteis inteiros entre duas datas
49
- NOW = AGORA ## Retorna o número de série seqüencial da data e hora atuais
50
- SECOND = SEGUNDO ## Converte um número de série em um segundo
51
- TIME = HORA ## Retorna o número de série de uma hora específica
52
- TIMEVALUE = VALOR.TEMPO ## Converte um horário na forma de texto para um número de série
53
- TODAY = HOJE ## Retorna o número de série da data de hoje
54
- WEEKDAY = DIA.DA.SEMANA ## Converte um número de série em um dia da semana
55
- WEEKNUM = NÚMSEMANA ## Converte um número de série em um número que representa onde a semana cai numericamente em um ano
56
- WORKDAY = DIATRABALHO ## Retorna o número de série da data antes ou depois de um número específico de dias úteis
57
- YEAR = ANO ## Converte um número de série em um ano
58
- YEARFRAC = FRAÇÃOANO ## Retorna a fração do ano que representa o número de dias entre data_inicial e data_final
59
-
60
-
61
- ##
62
- ## Engineering functions Funções de engenharia
63
- ##
64
- BESSELI = BESSELI ## Retorna a função de Bessel In(x) modificada
65
- BESSELJ = BESSELJ ## Retorna a função de Bessel Jn(x)
66
- BESSELK = BESSELK ## Retorna a função de Bessel Kn(x) modificada
67
- BESSELY = BESSELY ## Retorna a função de Bessel Yn(x)
68
- BIN2DEC = BIN2DEC ## Converte um número binário em decimal
69
- BIN2HEX = BIN2HEX ## Converte um número binário em hexadecimal
70
- BIN2OCT = BIN2OCT ## Converte um número binário em octal
71
- COMPLEX = COMPLEX ## Converte coeficientes reais e imaginários e um número complexo
72
- CONVERT = CONVERTER ## Converte um número de um sistema de medida para outro
73
- DEC2BIN = DECABIN ## Converte um número decimal em binário
74
- DEC2HEX = DECAHEX ## Converte um número decimal em hexadecimal
75
- DEC2OCT = DECAOCT ## Converte um número decimal em octal
76
- DELTA = DELTA ## Testa se dois valores são iguais
77
- ERF = FUNERRO ## Retorna a função de erro
78
- ERFC = FUNERROCOMPL ## Retorna a função de erro complementar
79
- GESTEP = DEGRAU ## Testa se um número é maior do que um valor limite
80
- HEX2BIN = HEXABIN ## Converte um número hexadecimal em binário
81
- HEX2DEC = HEXADEC ## Converte um número hexadecimal em decimal
82
- HEX2OCT = HEXAOCT ## Converte um número hexadecimal em octal
83
- IMABS = IMABS ## Retorna o valor absoluto (módulo) de um número complexo
84
- IMAGINARY = IMAGINÁRIO ## Retorna o coeficiente imaginário de um número complexo
85
- IMARGUMENT = IMARG ## Retorna o argumento teta, um ângulo expresso em radianos
86
- IMCONJUGATE = IMCONJ ## Retorna o conjugado complexo de um número complexo
87
- IMCOS = IMCOS ## Retorna o cosseno de um número complexo
88
- IMDIV = IMDIV ## Retorna o quociente de dois números complexos
89
- IMEXP = IMEXP ## Retorna o exponencial de um número complexo
90
- IMLN = IMLN ## Retorna o logaritmo natural de um número complexo
91
- IMLOG10 = IMLOG10 ## Retorna o logaritmo de base 10 de um número complexo
92
- IMLOG2 = IMLOG2 ## Retorna o logaritmo de base 2 de um número complexo
93
- IMPOWER = IMPOT ## Retorna um número complexo elevado a uma potência inteira
94
- IMPRODUCT = IMPROD ## Retorna o produto de números complexos
95
- IMREAL = IMREAL ## Retorna o coeficiente real de um número complexo
96
- IMSIN = IMSENO ## Retorna o seno de um número complexo
97
- IMSQRT = IMRAIZ ## Retorna a raiz quadrada de um número complexo
98
- IMSUB = IMSUBTR ## Retorna a diferença entre dois números complexos
99
- IMSUM = IMSOMA ## Retorna a soma de números complexos
100
- OCT2BIN = OCTABIN ## Converte um número octal em binário
101
- OCT2DEC = OCTADEC ## Converte um número octal em decimal
102
- OCT2HEX = OCTAHEX ## Converte um número octal em hexadecimal
103
-
104
-
105
- ##
106
- ## Financial functions Funções financeiras
107
- ##
108
- ACCRINT = JUROSACUM ## Retorna a taxa de juros acumulados de um título que paga uma taxa periódica de juros
109
- ACCRINTM = JUROSACUMV ## Retorna os juros acumulados de um título que paga juros no vencimento
110
- AMORDEGRC = AMORDEGRC ## Retorna a depreciação para cada período contábil usando o coeficiente de depreciação
111
- AMORLINC = AMORLINC ## Retorna a depreciação para cada período contábil
112
- COUPDAYBS = CUPDIASINLIQ ## Retorna o número de dias do início do período de cupom até a data de liquidação
113
- COUPDAYS = CUPDIAS ## Retorna o número de dias no período de cupom que contém a data de quitação
114
- COUPDAYSNC = CUPDIASPRÓX ## Retorna o número de dias da data de liquidação até a data do próximo cupom
115
- COUPNCD = CUPDATAPRÓX ## Retorna a próxima data de cupom após a data de quitação
116
- COUPNUM = CUPNÚM ## Retorna o número de cupons pagáveis entre as datas de quitação e vencimento
117
- COUPPCD = CUPDATAANT ## Retorna a data de cupom anterior à data de quitação
118
- CUMIPMT = PGTOJURACUM ## Retorna os juros acumulados pagos entre dois períodos
119
- CUMPRINC = PGTOCAPACUM ## Retorna o capital acumulado pago sobre um empréstimo entre dois períodos
120
- DB = BD ## Retorna a depreciação de um ativo para um período especificado, usando o método de balanço de declínio fixo
121
- DDB = BDD ## Retorna a depreciação de um ativo com relação a um período especificado usando o método de saldos decrescentes duplos ou qualquer outro método especificado por você
122
- DISC = DESC ## Retorna a taxa de desconto de um título
123
- DOLLARDE = MOEDADEC ## Converte um preço em formato de moeda, na forma fracionária, em um preço na forma decimal
124
- DOLLARFR = MOEDAFRA ## Converte um preço, apresentado na forma decimal, em um preço apresentado na forma fracionária
125
- DURATION = DURAÇÃO ## Retorna a duração anual de um título com pagamentos de juros periódicos
126
- EFFECT = EFETIVA ## Retorna a taxa de juros anual efetiva
127
- FV = VF ## Retorna o valor futuro de um investimento
128
- FVSCHEDULE = VFPLANO ## Retorna o valor futuro de um capital inicial após a aplicação de uma série de taxas de juros compostas
129
- INTRATE = TAXAJUROS ## Retorna a taxa de juros de um título totalmente investido
130
- IPMT = IPGTO ## Retorna o pagamento de juros para um investimento em um determinado período
131
- IRR = TIR ## Retorna a taxa interna de retorno de uma série de fluxos de caixa
132
- ISPMT = ÉPGTO ## Calcula os juros pagos durante um período específico de um investimento
133
- MDURATION = MDURAÇÃO ## Retorna a duração de Macauley modificada para um título com um valor de paridade equivalente a R$ 100
134
- MIRR = MTIR ## Calcula a taxa interna de retorno em que fluxos de caixa positivos e negativos são financiados com diferentes taxas
135
- NOMINAL = NOMINAL ## Retorna a taxa de juros nominal anual
136
- NPER = NPER ## Retorna o número de períodos de um investimento
137
- NPV = VPL ## Retorna o valor líquido atual de um investimento com base em uma série de fluxos de caixa periódicos e em uma taxa de desconto
138
- ODDFPRICE = PREÇOPRIMINC ## Retorna o preço por R$ 100 de valor nominal de um título com um primeiro período indefinido
139
- ODDFYIELD = LUCROPRIMINC ## Retorna o rendimento de um título com um primeiro período indefinido
140
- ODDLPRICE = PREÇOÚLTINC ## Retorna o preço por R$ 100 de valor nominal de um título com um último período de cupom indefinido
141
- ODDLYIELD = LUCROÚLTINC ## Retorna o rendimento de um título com um último período indefinido
142
- PMT = PGTO ## Retorna o pagamento periódico de uma anuidade
143
- PPMT = PPGTO ## Retorna o pagamento de capital para determinado período de investimento
144
- PRICE = PREÇO ## Retorna a preço por R$ 100,00 de valor nominal de um título que paga juros periódicos
145
- PRICEDISC = PREÇODESC ## Retorna o preço por R$ 100,00 de valor nominal de um título descontado
146
- PRICEMAT = PREÇOVENC ## Retorna o preço por R$ 100,00 de valor nominal de um título que paga juros no vencimento
147
- PV = VP ## Retorna o valor presente de um investimento
148
- RATE = TAXA ## Retorna a taxa de juros por período de uma anuidade
149
- RECEIVED = RECEBER ## Retorna a quantia recebida no vencimento de um título totalmente investido
150
- SLN = DPD ## Retorna a depreciação em linha reta de um ativo durante um período
151
- SYD = SDA ## Retorna a depreciação dos dígitos da soma dos anos de um ativo para um período especificado
152
- TBILLEQ = OTN ## Retorna o rendimento de um título equivalente a uma obrigação do Tesouro
153
- TBILLPRICE = OTNVALOR ## Retorna o preço por R$ 100,00 de valor nominal de uma obrigação do Tesouro
154
- TBILLYIELD = OTNLUCRO ## Retorna o rendimento de uma obrigação do Tesouro
155
- VDB = BDV ## Retorna a depreciação de um ativo para um período especificado ou parcial usando um método de balanço declinante
156
- XIRR = XTIR ## Fornece a taxa interna de retorno para um programa de fluxos de caixa que não é necessariamente periódico
157
- XNPV = XVPL ## Retorna o valor presente líquido de um programa de fluxos de caixa que não é necessariamente periódico
158
- YIELD = LUCRO ## Retorna o lucro de um título que paga juros periódicos
159
- YIELDDISC = LUCRODESC ## Retorna o rendimento anual de um título descontado. Por exemplo, uma obrigação do Tesouro
160
- YIELDMAT = LUCROVENC ## Retorna o lucro anual de um título que paga juros no vencimento
161
-
162
-
163
- ##
164
- ## Information functions Funções de informação
165
- ##
166
- CELL = CÉL ## Retorna informações sobre formatação, localização ou conteúdo de uma célula
167
- ERROR.TYPE = TIPO.ERRO ## Retorna um número correspondente a um tipo de erro
168
- INFO = INFORMAÇÃO ## Retorna informações sobre o ambiente operacional atual
169
- ISBLANK = ÉCÉL.VAZIA ## Retorna VERDADEIRO se o valor for vazio
170
- ISERR = ÉERRO ## Retorna VERDADEIRO se o valor for um valor de erro diferente de #N/D
171
- ISERROR = ÉERROS ## Retorna VERDADEIRO se o valor for um valor de erro
172
- ISEVEN = ÉPAR ## Retorna VERDADEIRO se o número for par
173
- ISLOGICAL = ÉLÓGICO ## Retorna VERDADEIRO se o valor for um valor lógico
174
- ISNA = É.NÃO.DISP ## Retorna VERDADEIRO se o valor for o valor de erro #N/D
175
- ISNONTEXT = É.NÃO.TEXTO ## Retorna VERDADEIRO se o valor for diferente de texto
176
- ISNUMBER = ÉNÚM ## Retorna VERDADEIRO se o valor for um número
177
- ISODD = ÉIMPAR ## Retorna VERDADEIRO se o número for ímpar
178
- ISREF = ÉREF ## Retorna VERDADEIRO se o valor for uma referência
179
- ISTEXT = ÉTEXTO ## Retorna VERDADEIRO se o valor for texto
180
- N = N ## Retorna um valor convertido em um número
181
- NA = NÃO.DISP ## Retorna o valor de erro #N/D
182
- TYPE = TIPO ## Retorna um número indicando o tipo de dados de um valor
183
-
184
-
185
- ##
186
- ## Logical functions Funções lógicas
187
- ##
188
- AND = E ## Retorna VERDADEIRO se todos os seus argumentos forem VERDADEIROS
189
- FALSE = FALSO ## Retorna o valor lógico FALSO
190
- IF = SE ## Especifica um teste lógico a ser executado
191
- IFERROR = SEERRO ## Retornará um valor que você especifica se uma fórmula for avaliada para um erro; do contrário, retornará o resultado da fórmula
192
- NOT = NÃO ## Inverte o valor lógico do argumento
193
- OR = OU ## Retorna VERDADEIRO se um dos argumentos for VERDADEIRO
194
- TRUE = VERDADEIRO ## Retorna o valor lógico VERDADEIRO
195
-
196
-
197
- ##
198
- ## Lookup and reference functions Funções de pesquisa e referência
199
- ##
200
- ADDRESS = ENDEREÇO ## Retorna uma referência como texto para uma única célula em uma planilha
201
- AREAS = ÁREAS ## Retorna o número de áreas em uma referência
202
- CHOOSE = ESCOLHER ## Escolhe um valor a partir de uma lista de valores
203
- COLUMN = COL ## Retorna o número da coluna de uma referência
204
- COLUMNS = COLS ## Retorna o número de colunas em uma referência
205
- HLOOKUP = PROCH ## Procura na linha superior de uma matriz e retorna o valor da célula especificada
206
- HYPERLINK = HYPERLINK ## Cria um atalho ou salto que abre um documento armazenado em um servidor de rede, uma intranet ou na Internet
207
- INDEX = ÍNDICE ## Usa um índice para escolher um valor de uma referência ou matriz
208
- INDIRECT = INDIRETO ## Retorna uma referência indicada por um valor de texto
209
- LOOKUP = PROC ## Procura valores em um vetor ou em uma matriz
210
- MATCH = CORRESP ## Procura valores em uma referência ou em uma matriz
211
- OFFSET = DESLOC ## Retorna um deslocamento de referência com base em uma determinada referência
212
- ROW = LIN ## Retorna o número da linha de uma referência
213
- ROWS = LINS ## Retorna o número de linhas em uma referência
214
- RTD = RTD ## Recupera dados em tempo real de um programa que ofereça suporte a automação COM (automação: uma forma de trabalhar com objetos de um aplicativo a partir de outro aplicativo ou ferramenta de desenvolvimento. Chamada inicialmente de automação OLE, a automação é um padrão industrial e um recurso do modelo de objeto componente (COM).)
215
- TRANSPOSE = TRANSPOR ## Retorna a transposição de uma matriz
216
- VLOOKUP = PROCV ## Procura na primeira coluna de uma matriz e move ao longo da linha para retornar o valor de uma célula
217
-
218
-
219
- ##
220
- ## Math and trigonometry functions Funções matemáticas e trigonométricas
221
- ##
222
- ABS = ABS ## Retorna o valor absoluto de um número
223
- ACOS = ACOS ## Retorna o arco cosseno de um número
224
- ACOSH = ACOSH ## Retorna o cosseno hiperbólico inverso de um número
225
- ASIN = ASEN ## Retorna o arco seno de um número
226
- ASINH = ASENH ## Retorna o seno hiperbólico inverso de um número
227
- ATAN = ATAN ## Retorna o arco tangente de um número
228
- ATAN2 = ATAN2 ## Retorna o arco tangente das coordenadas x e y especificadas
229
- ATANH = ATANH ## Retorna a tangente hiperbólica inversa de um número
230
- CEILING = TETO ## Arredonda um número para o inteiro mais próximo ou para o múltiplo mais próximo de significância
231
- COMBIN = COMBIN ## Retorna o número de combinações de um determinado número de objetos
232
- COS = COS ## Retorna o cosseno de um número
233
- COSH = COSH ## Retorna o cosseno hiperbólico de um número
234
- DEGREES = GRAUS ## Converte radianos em graus
235
- EVEN = PAR ## Arredonda um número para cima até o inteiro par mais próximo
236
- EXP = EXP ## Retorna e elevado à potência de um número especificado
237
- FACT = FATORIAL ## Retorna o fatorial de um número
238
- FACTDOUBLE = FATDUPLO ## Retorna o fatorial duplo de um número
239
- FLOOR = ARREDMULTB ## Arredonda um número para baixo até zero
240
- GCD = MDC ## Retorna o máximo divisor comum
241
- INT = INT ## Arredonda um número para baixo até o número inteiro mais próximo
242
- LCM = MMC ## Retorna o mínimo múltiplo comum
243
- LN = LN ## Retorna o logaritmo natural de um número
244
- LOG = LOG ## Retorna o logaritmo de um número de uma base especificada
245
- LOG10 = LOG10 ## Retorna o logaritmo de base 10 de um número
246
- MDETERM = MATRIZ.DETERM ## Retorna o determinante de uma matriz de uma variável do tipo matriz
247
- MINVERSE = MATRIZ.INVERSO ## Retorna a matriz inversa de uma matriz
248
- MMULT = MATRIZ.MULT ## Retorna o produto de duas matrizes
249
- MOD = RESTO ## Retorna o resto da divisão
250
- MROUND = MARRED ## Retorna um número arredondado ao múltiplo desejado
251
- MULTINOMIAL = MULTINOMIAL ## Retorna o multinomial de um conjunto de números
252
- ODD = ÍMPAR ## Arredonda um número para cima até o inteiro ímpar mais próximo
253
- PI = PI ## Retorna o valor de Pi
254
- POWER = POTÊNCIA ## Fornece o resultado de um número elevado a uma potência
255
- PRODUCT = MULT ## Multiplica seus argumentos
256
- QUOTIENT = QUOCIENTE ## Retorna a parte inteira de uma divisão
257
- RADIANS = RADIANOS ## Converte graus em radianos
258
- RAND = ALEATÓRIO ## Retorna um número aleatório entre 0 e 1
259
- RANDBETWEEN = ALEATÓRIOENTRE ## Retorna um número aleatório entre os números especificados
260
- ROMAN = ROMANO ## Converte um algarismo arábico em romano, como texto
261
- ROUND = ARRED ## Arredonda um número até uma quantidade especificada de dígitos
262
- ROUNDDOWN = ARREDONDAR.PARA.BAIXO ## Arredonda um número para baixo até zero
263
- ROUNDUP = ARREDONDAR.PARA.CIMA ## Arredonda um número para cima, afastando-o de zero
264
- SERIESSUM = SOMASEQÜÊNCIA ## Retorna a soma de uma série polinomial baseada na fórmula
265
- SIGN = SINAL ## Retorna o sinal de um número
266
- SIN = SEN ## Retorna o seno de um ângulo dado
267
- SINH = SENH ## Retorna o seno hiperbólico de um número
268
- SQRT = RAIZ ## Retorna uma raiz quadrada positiva
269
- SQRTPI = RAIZPI ## Retorna a raiz quadrada de (núm* pi)
270
- SUBTOTAL = SUBTOTAL ## Retorna um subtotal em uma lista ou em um banco de dados
271
- SUM = SOMA ## Soma seus argumentos
272
- SUMIF = SOMASE ## Adiciona as células especificadas por um determinado critério
273
- SUMIFS = SOMASE ## Adiciona as células em um intervalo que atende a vários critérios
274
- SUMPRODUCT = SOMARPRODUTO ## Retorna a soma dos produtos de componentes correspondentes de matrizes
275
- SUMSQ = SOMAQUAD ## Retorna a soma dos quadrados dos argumentos
276
- SUMX2MY2 = SOMAX2DY2 ## Retorna a soma da diferença dos quadrados dos valores correspondentes em duas matrizes
277
- SUMX2PY2 = SOMAX2SY2 ## Retorna a soma da soma dos quadrados dos valores correspondentes em duas matrizes
278
- SUMXMY2 = SOMAXMY2 ## Retorna a soma dos quadrados das diferenças dos valores correspondentes em duas matrizes
279
- TAN = TAN ## Retorna a tangente de um número
280
- TANH = TANH ## Retorna a tangente hiperbólica de um número
281
- TRUNC = TRUNCAR ## Trunca um número para um inteiro
282
-
283
-
284
- ##
285
- ## Statistical functions Funções estatísticas
286
- ##
287
- AVEDEV = DESV.MÉDIO ## Retorna a média aritmética dos desvios médios dos pontos de dados a partir de sua média
288
- AVERAGE = MÉDIA ## Retorna a média dos argumentos
289
- AVERAGEA = MÉDIAA ## Retorna a média dos argumentos, inclusive números, texto e valores lógicos
290
- AVERAGEIF = MÉDIASE ## Retorna a média (média aritmética) de todas as células em um intervalo que atendem a um determinado critério
291
- AVERAGEIFS = MÉDIASES ## Retorna a média (média aritmética) de todas as células que atendem a múltiplos critérios.
292
- BETADIST = DISTBETA ## Retorna a função de distribuição cumulativa beta
293
- BETAINV = BETA.ACUM.INV ## Retorna o inverso da função de distribuição cumulativa para uma distribuição beta especificada
294
- BINOMDIST = DISTRBINOM ## Retorna a probabilidade de distribuição binomial do termo individual
295
- CHIDIST = DIST.QUI ## Retorna a probabilidade unicaudal da distribuição qui-quadrada
296
- CHIINV = INV.QUI ## Retorna o inverso da probabilidade uni-caudal da distribuição qui-quadrada
297
- CHITEST = TESTE.QUI ## Retorna o teste para independência
298
- CONFIDENCE = INT.CONFIANÇA ## Retorna o intervalo de confiança para uma média da população
299
- CORREL = CORREL ## Retorna o coeficiente de correlação entre dois conjuntos de dados
300
- COUNT = CONT.NÚM ## Calcula quantos números há na lista de argumentos
301
- COUNTA = CONT.VALORES ## Calcula quantos valores há na lista de argumentos
302
- COUNTBLANK = CONTAR.VAZIO ## Conta o número de células vazias no intervalo especificado
303
- COUNTIF = CONT.SE ## Calcula o número de células não vazias em um intervalo que corresponde a determinados critérios
304
- COUNTIFS = CONT.SES ## Conta o número de células dentro de um intervalo que atende a múltiplos critérios
305
- COVAR = COVAR ## Retorna a covariância, a média dos produtos dos desvios pares
306
- CRITBINOM = CRIT.BINOM ## Retorna o menor valor para o qual a distribuição binomial cumulativa é menor ou igual ao valor padrão
307
- DEVSQ = DESVQ ## Retorna a soma dos quadrados dos desvios
308
- EXPONDIST = DISTEXPON ## Retorna a distribuição exponencial
309
- FDIST = DISTF ## Retorna a distribuição de probabilidade F
310
- FINV = INVF ## Retorna o inverso da distribuição de probabilidades F
311
- FISHER = FISHER ## Retorna a transformação Fisher
312
- FISHERINV = FISHERINV ## Retorna o inverso da transformação Fisher
313
- FORECAST = PREVISÃO ## Retorna um valor ao longo de uma linha reta
314
- FREQUENCY = FREQÜÊNCIA ## Retorna uma distribuição de freqüência como uma matriz vertical
315
- FTEST = TESTEF ## Retorna o resultado de um teste F
316
- GAMMADIST = DISTGAMA ## Retorna a distribuição gama
317
- GAMMAINV = INVGAMA ## Retorna o inverso da distribuição cumulativa gama
318
- GAMMALN = LNGAMA ## Retorna o logaritmo natural da função gama, G(x)
319
- GEOMEAN = MÉDIA.GEOMÉTRICA ## Retorna a média geométrica
320
- GROWTH = CRESCIMENTO ## Retorna valores ao longo de uma tendência exponencial
321
- HARMEAN = MÉDIA.HARMÔNICA ## Retorna a média harmônica
322
- HYPGEOMDIST = DIST.HIPERGEOM ## Retorna a distribuição hipergeométrica
323
- INTERCEPT = INTERCEPÇÃO ## Retorna a intercepção da linha de regressão linear
324
- KURT = CURT ## Retorna a curtose de um conjunto de dados
325
- LARGE = MAIOR ## Retorna o maior valor k-ésimo de um conjunto de dados
326
- LINEST = PROJ.LIN ## Retorna os parâmetros de uma tendência linear
327
- LOGEST = PROJ.LOG ## Retorna os parâmetros de uma tendência exponencial
328
- LOGINV = INVLOG ## Retorna o inverso da distribuição lognormal
329
- LOGNORMDIST = DIST.LOGNORMAL ## Retorna a distribuição lognormal cumulativa
330
- MAX = MÁXIMO ## Retorna o valor máximo em uma lista de argumentos
331
- MAXA = MÁXIMOA ## Retorna o maior valor em uma lista de argumentos, inclusive números, texto e valores lógicos
332
- MEDIAN = MED ## Retorna a mediana dos números indicados
333
- MIN = MÍNIMO ## Retorna o valor mínimo em uma lista de argumentos
334
- MINA = MÍNIMOA ## Retorna o menor valor em uma lista de argumentos, inclusive números, texto e valores lógicos
335
- MODE = MODO ## Retorna o valor mais comum em um conjunto de dados
336
- NEGBINOMDIST = DIST.BIN.NEG ## Retorna a distribuição binomial negativa
337
- NORMDIST = DIST.NORM ## Retorna a distribuição cumulativa normal
338
- NORMINV = INV.NORM ## Retorna o inverso da distribuição cumulativa normal
339
- NORMSDIST = DIST.NORMP ## Retorna a distribuição cumulativa normal padrão
340
- NORMSINV = INV.NORMP ## Retorna o inverso da distribuição cumulativa normal padrão
341
- PEARSON = PEARSON ## Retorna o coeficiente de correlação do momento do produto Pearson
342
- PERCENTILE = PERCENTIL ## Retorna o k-ésimo percentil de valores em um intervalo
343
- PERCENTRANK = ORDEM.PORCENTUAL ## Retorna a ordem percentual de um valor em um conjunto de dados
344
- PERMUT = PERMUT ## Retorna o número de permutações de um determinado número de objetos
345
- POISSON = POISSON ## Retorna a distribuição Poisson
346
- PROB = PROB ## Retorna a probabilidade de valores em um intervalo estarem entre dois limites
347
- QUARTILE = QUARTIL ## Retorna o quartil do conjunto de dados
348
- RANK = ORDEM ## Retorna a posição de um número em uma lista de números
349
- RSQ = RQUAD ## Retorna o quadrado do coeficiente de correlação do momento do produto de Pearson
350
- SKEW = DISTORÇÃO ## Retorna a distorção de uma distribuição
351
- SLOPE = INCLINAÇÃO ## Retorna a inclinação da linha de regressão linear
352
- SMALL = MENOR ## Retorna o menor valor k-ésimo do conjunto de dados
353
- STANDARDIZE = PADRONIZAR ## Retorna um valor normalizado
354
- STDEV = DESVPAD ## Estima o desvio padrão com base em uma amostra
355
- STDEVA = DESVPADA ## Estima o desvio padrão com base em uma amostra, inclusive números, texto e valores lógicos
356
- STDEVP = DESVPADP ## Calcula o desvio padrão com base na população total
357
- STDEVPA = DESVPADPA ## Calcula o desvio padrão com base na população total, inclusive números, texto e valores lógicos
358
- STEYX = EPADYX ## Retorna o erro padrão do valor-y previsto para cada x da regressão
359
- TDIST = DISTT ## Retorna a distribuição t de Student
360
- TINV = INVT ## Retorna o inverso da distribuição t de Student
361
- TREND = TENDÊNCIA ## Retorna valores ao longo de uma tendência linear
362
- TRIMMEAN = MÉDIA.INTERNA ## Retorna a média do interior de um conjunto de dados
363
- TTEST = TESTET ## Retorna a probabilidade associada ao teste t de Student
364
- VAR = VAR ## Estima a variância com base em uma amostra
365
- VARA = VARA ## Estima a variância com base em uma amostra, inclusive números, texto e valores lógicos
366
- VARP = VARP ## Calcula a variância com base na população inteira
367
- VARPA = VARPA ## Calcula a variância com base na população total, inclusive números, texto e valores lógicos
368
- WEIBULL = WEIBULL ## Retorna a distribuição Weibull
369
- ZTEST = TESTEZ ## Retorna o valor de probabilidade uni-caudal de um teste-z
370
-
371
-
372
- ##
373
- ## Text functions Funções de texto
374
- ##
375
- ASC = ASC ## Altera letras do inglês ou katakana de largura total (bytes duplos) dentro de uma seqüência de caracteres para caracteres de meia largura (byte único)
376
- BAHTTEXT = BAHTTEXT ## Converte um número em um texto, usando o formato de moeda ß (baht)
377
- CHAR = CARACT ## Retorna o caractere especificado pelo número de código
378
- CLEAN = TIRAR ## Remove todos os caracteres do texto que não podem ser impressos
379
- CODE = CÓDIGO ## Retorna um código numérico para o primeiro caractere de uma seqüência de caracteres de texto
380
- CONCATENATE = CONCATENAR ## Agrupa vários itens de texto em um único item de texto
381
- DOLLAR = MOEDA ## Converte um número em texto, usando o formato de moeda $ (dólar)
382
- EXACT = EXATO ## Verifica se dois valores de texto são idênticos
383
- FIND = PROCURAR ## Procura um valor de texto dentro de outro (diferencia maiúsculas de minúsculas)
384
- FINDB = PROCURARB ## Procura um valor de texto dentro de outro (diferencia maiúsculas de minúsculas)
385
- FIXED = DEF.NÚM.DEC ## Formata um número como texto com um número fixo de decimais
386
- JIS = JIS ## Altera letras do inglês ou katakana de meia largura (byte único) dentro de uma seqüência de caracteres para caracteres de largura total (bytes duplos)
387
- LEFT = ESQUERDA ## Retorna os caracteres mais à esquerda de um valor de texto
388
- LEFTB = ESQUERDAB ## Retorna os caracteres mais à esquerda de um valor de texto
389
- LEN = NÚM.CARACT ## Retorna o número de caracteres em uma seqüência de texto
390
- LENB = NÚM.CARACTB ## Retorna o número de caracteres em uma seqüência de texto
391
- LOWER = MINÚSCULA ## Converte texto para minúsculas
392
- MID = EXT.TEXTO ## Retorna um número específico de caracteres de uma seqüência de texto começando na posição especificada
393
- MIDB = EXT.TEXTOB ## Retorna um número específico de caracteres de uma seqüência de texto começando na posição especificada
394
- PHONETIC = FONÉTICA ## Extrai os caracteres fonéticos (furigana) de uma seqüência de caracteres de texto
395
- PROPER = PRI.MAIÚSCULA ## Coloca a primeira letra de cada palavra em maiúscula em um valor de texto
396
- REPLACE = MUDAR ## Muda os caracteres dentro do texto
397
- REPLACEB = MUDARB ## Muda os caracteres dentro do texto
398
- REPT = REPT ## Repete o texto um determinado número de vezes
399
- RIGHT = DIREITA ## Retorna os caracteres mais à direita de um valor de texto
400
- RIGHTB = DIREITAB ## Retorna os caracteres mais à direita de um valor de texto
401
- SEARCH = LOCALIZAR ## Localiza um valor de texto dentro de outro (não diferencia maiúsculas de minúsculas)
402
- SEARCHB = LOCALIZARB ## Localiza um valor de texto dentro de outro (não diferencia maiúsculas de minúsculas)
403
- SUBSTITUTE = SUBSTITUIR ## Substitui um novo texto por um texto antigo em uma seqüência de texto
404
- T = T ## Converte os argumentos em texto
405
- TEXT = TEXTO ## Formata um número e o converte em texto
406
- TRIM = ARRUMAR ## Remove espaços do texto
407
- UPPER = MAIÚSCULA ## Converte o texto em maiúsculas
408
- VALUE = VALOR ## Converte um argumento de texto em um número
1
+ ##
2
+ ## Add-in and Automation functions Funções Suplemento e Automação
3
+ ##
4
+ GETPIVOTDATA = INFODADOSTABELADINÂMICA ## Retorna os dados armazenados em um relatório de tabela dinâmica
5
+
6
+
7
+ ##
8
+ ## Cube functions Funções de Cubo
9
+ ##
10
+ CUBEKPIMEMBER = MEMBROKPICUBO ## Retorna o nome de um KPI (indicador de desempenho-chave), uma propriedade e uma medida e exibe o nome e a propriedade na célula. Um KPI é uma medida quantificável, como o lucro bruto mensal ou a rotatividade trimestral dos funcionários, usada para monitorar o desempenho de uma organização.
11
+ CUBEMEMBER = MEMBROCUBO ## Retorna um membro ou tupla em uma hierarquia de cubo. Use para validar se o membro ou tupla existe no cubo.
12
+ CUBEMEMBERPROPERTY = PROPRIEDADEMEMBROCUBO ## Retorna o valor da propriedade de um membro no cubo. Usada para validar a existência do nome do membro no cubo e para retornar a propriedade especificada para esse membro.
13
+ CUBERANKEDMEMBER = MEMBROCLASSIFICADOCUBO ## Retorna o enésimo membro, ou o membro ordenado, em um conjunto. Use para retornar um ou mais elementos em um conjunto, assim como o melhor vendedor ou os dez melhores alunos.
14
+ CUBESET = CONJUNTOCUBO ## Define um conjunto calculado de membros ou tuplas enviando uma expressão do conjunto para o cubo no servidor, que cria o conjunto e o retorna para o Microsoft Office Excel.
15
+ CUBESETCOUNT = CONTAGEMCONJUNTOCUBO ## Retorna o número de itens em um conjunto.
16
+ CUBEVALUE = VALORCUBO ## Retorna um valor agregado de um cubo.
17
+
18
+
19
+ ##
20
+ ## Database functions Funções de banco de dados
21
+ ##
22
+ DAVERAGE = BDMÉDIA ## Retorna a média das entradas selecionadas de um banco de dados
23
+ DCOUNT = BDCONTAR ## Conta as células que contêm números em um banco de dados
24
+ DCOUNTA = BDCONTARA ## Conta células não vazias em um banco de dados
25
+ DGET = BDEXTRAIR ## Extrai de um banco de dados um único registro que corresponde a um critério específico
26
+ DMAX = BDMÁX ## Retorna o valor máximo de entradas selecionadas de um banco de dados
27
+ DMIN = BDMÍN ## Retorna o valor mínimo de entradas selecionadas de um banco de dados
28
+ DPRODUCT = BDMULTIPL ## Multiplica os valores em um campo específico de registros que correspondem ao critério em um banco de dados
29
+ DSTDEV = BDEST ## Estima o desvio padrão com base em uma amostra de entradas selecionadas de um banco de dados
30
+ DSTDEVP = BDDESVPA ## Calcula o desvio padrão com base na população inteira de entradas selecionadas de um banco de dados
31
+ DSUM = BDSOMA ## Adiciona os números à coluna de campos de registros do banco de dados que correspondem ao critério
32
+ DVAR = BDVAREST ## Estima a variância com base em uma amostra de entradas selecionadas de um banco de dados
33
+ DVARP = BDVARP ## Calcula a variância com base na população inteira de entradas selecionadas de um banco de dados
34
+
35
+
36
+ ##
37
+ ## Date and time functions Funções de data e hora
38
+ ##
39
+ DATE = DATA ## Retorna o número de série de uma data específica
40
+ DATEVALUE = DATA.VALOR ## Converte uma data na forma de texto para um número de série
41
+ DAY = DIA ## Converte um número de série em um dia do mês
42
+ DAYS360 = DIAS360 ## Calcula o número de dias entre duas datas com base em um ano de 360 dias
43
+ EDATE = DATAM ## Retorna o número de série da data que é o número indicado de meses antes ou depois da data inicial
44
+ EOMONTH = FIMMÊS ## Retorna o número de série do último dia do mês antes ou depois de um número especificado de meses
45
+ HOUR = HORA ## Converte um número de série em uma hora
46
+ MINUTE = MINUTO ## Converte um número de série em um minuto
47
+ MONTH = MÊS ## Converte um número de série em um mês
48
+ NETWORKDAYS = DIATRABALHOTOTAL ## Retorna o número de dias úteis inteiros entre duas datas
49
+ NOW = AGORA ## Retorna o número de série seqüencial da data e hora atuais
50
+ SECOND = SEGUNDO ## Converte um número de série em um segundo
51
+ TIME = HORA ## Retorna o número de série de uma hora específica
52
+ TIMEVALUE = VALOR.TEMPO ## Converte um horário na forma de texto para um número de série
53
+ TODAY = HOJE ## Retorna o número de série da data de hoje
54
+ WEEKDAY = DIA.DA.SEMANA ## Converte um número de série em um dia da semana
55
+ WEEKNUM = NÚMSEMANA ## Converte um número de série em um número que representa onde a semana cai numericamente em um ano
56
+ WORKDAY = DIATRABALHO ## Retorna o número de série da data antes ou depois de um número específico de dias úteis
57
+ YEAR = ANO ## Converte um número de série em um ano
58
+ YEARFRAC = FRAÇÃOANO ## Retorna a fração do ano que representa o número de dias entre data_inicial e data_final
59
+
60
+
61
+ ##
62
+ ## Engineering functions Funções de engenharia
63
+ ##
64
+ BESSELI = BESSELI ## Retorna a função de Bessel In(x) modificada
65
+ BESSELJ = BESSELJ ## Retorna a função de Bessel Jn(x)
66
+ BESSELK = BESSELK ## Retorna a função de Bessel Kn(x) modificada
67
+ BESSELY = BESSELY ## Retorna a função de Bessel Yn(x)
68
+ BIN2DEC = BIN2DEC ## Converte um número binário em decimal
69
+ BIN2HEX = BIN2HEX ## Converte um número binário em hexadecimal
70
+ BIN2OCT = BIN2OCT ## Converte um número binário em octal
71
+ COMPLEX = COMPLEX ## Converte coeficientes reais e imaginários e um número complexo
72
+ CONVERT = CONVERTER ## Converte um número de um sistema de medida para outro
73
+ DEC2BIN = DECABIN ## Converte um número decimal em binário
74
+ DEC2HEX = DECAHEX ## Converte um número decimal em hexadecimal
75
+ DEC2OCT = DECAOCT ## Converte um número decimal em octal
76
+ DELTA = DELTA ## Testa se dois valores são iguais
77
+ ERF = FUNERRO ## Retorna a função de erro
78
+ ERFC = FUNERROCOMPL ## Retorna a função de erro complementar
79
+ GESTEP = DEGRAU ## Testa se um número é maior do que um valor limite
80
+ HEX2BIN = HEXABIN ## Converte um número hexadecimal em binário
81
+ HEX2DEC = HEXADEC ## Converte um número hexadecimal em decimal
82
+ HEX2OCT = HEXAOCT ## Converte um número hexadecimal em octal
83
+ IMABS = IMABS ## Retorna o valor absoluto (módulo) de um número complexo
84
+ IMAGINARY = IMAGINÁRIO ## Retorna o coeficiente imaginário de um número complexo
85
+ IMARGUMENT = IMARG ## Retorna o argumento teta, um ângulo expresso em radianos
86
+ IMCONJUGATE = IMCONJ ## Retorna o conjugado complexo de um número complexo
87
+ IMCOS = IMCOS ## Retorna o cosseno de um número complexo
88
+ IMDIV = IMDIV ## Retorna o quociente de dois números complexos
89
+ IMEXP = IMEXP ## Retorna o exponencial de um número complexo
90
+ IMLN = IMLN ## Retorna o logaritmo natural de um número complexo
91
+ IMLOG10 = IMLOG10 ## Retorna o logaritmo de base 10 de um número complexo
92
+ IMLOG2 = IMLOG2 ## Retorna o logaritmo de base 2 de um número complexo
93
+ IMPOWER = IMPOT ## Retorna um número complexo elevado a uma potência inteira
94
+ IMPRODUCT = IMPROD ## Retorna o produto de números complexos
95
+ IMREAL = IMREAL ## Retorna o coeficiente real de um número complexo
96
+ IMSIN = IMSENO ## Retorna o seno de um número complexo
97
+ IMSQRT = IMRAIZ ## Retorna a raiz quadrada de um número complexo
98
+ IMSUB = IMSUBTR ## Retorna a diferença entre dois números complexos
99
+ IMSUM = IMSOMA ## Retorna a soma de números complexos
100
+ OCT2BIN = OCTABIN ## Converte um número octal em binário
101
+ OCT2DEC = OCTADEC ## Converte um número octal em decimal
102
+ OCT2HEX = OCTAHEX ## Converte um número octal em hexadecimal
103
+
104
+
105
+ ##
106
+ ## Financial functions Funções financeiras
107
+ ##
108
+ ACCRINT = JUROSACUM ## Retorna a taxa de juros acumulados de um título que paga uma taxa periódica de juros
109
+ ACCRINTM = JUROSACUMV ## Retorna os juros acumulados de um título que paga juros no vencimento
110
+ AMORDEGRC = AMORDEGRC ## Retorna a depreciação para cada período contábil usando o coeficiente de depreciação
111
+ AMORLINC = AMORLINC ## Retorna a depreciação para cada período contábil
112
+ COUPDAYBS = CUPDIASINLIQ ## Retorna o número de dias do início do período de cupom até a data de liquidação
113
+ COUPDAYS = CUPDIAS ## Retorna o número de dias no período de cupom que contém a data de quitação
114
+ COUPDAYSNC = CUPDIASPRÓX ## Retorna o número de dias da data de liquidação até a data do próximo cupom
115
+ COUPNCD = CUPDATAPRÓX ## Retorna a próxima data de cupom após a data de quitação
116
+ COUPNUM = CUPNÚM ## Retorna o número de cupons pagáveis entre as datas de quitação e vencimento
117
+ COUPPCD = CUPDATAANT ## Retorna a data de cupom anterior à data de quitação
118
+ CUMIPMT = PGTOJURACUM ## Retorna os juros acumulados pagos entre dois períodos
119
+ CUMPRINC = PGTOCAPACUM ## Retorna o capital acumulado pago sobre um empréstimo entre dois períodos
120
+ DB = BD ## Retorna a depreciação de um ativo para um período especificado, usando o método de balanço de declínio fixo
121
+ DDB = BDD ## Retorna a depreciação de um ativo com relação a um período especificado usando o método de saldos decrescentes duplos ou qualquer outro método especificado por você
122
+ DISC = DESC ## Retorna a taxa de desconto de um título
123
+ DOLLARDE = MOEDADEC ## Converte um preço em formato de moeda, na forma fracionária, em um preço na forma decimal
124
+ DOLLARFR = MOEDAFRA ## Converte um preço, apresentado na forma decimal, em um preço apresentado na forma fracionária
125
+ DURATION = DURAÇÃO ## Retorna a duração anual de um título com pagamentos de juros periódicos
126
+ EFFECT = EFETIVA ## Retorna a taxa de juros anual efetiva
127
+ FV = VF ## Retorna o valor futuro de um investimento
128
+ FVSCHEDULE = VFPLANO ## Retorna o valor futuro de um capital inicial após a aplicação de uma série de taxas de juros compostas
129
+ INTRATE = TAXAJUROS ## Retorna a taxa de juros de um título totalmente investido
130
+ IPMT = IPGTO ## Retorna o pagamento de juros para um investimento em um determinado período
131
+ IRR = TIR ## Retorna a taxa interna de retorno de uma série de fluxos de caixa
132
+ ISPMT = ÉPGTO ## Calcula os juros pagos durante um período específico de um investimento
133
+ MDURATION = MDURAÇÃO ## Retorna a duração de Macauley modificada para um título com um valor de paridade equivalente a R$ 100
134
+ MIRR = MTIR ## Calcula a taxa interna de retorno em que fluxos de caixa positivos e negativos são financiados com diferentes taxas
135
+ NOMINAL = NOMINAL ## Retorna a taxa de juros nominal anual
136
+ NPER = NPER ## Retorna o número de períodos de um investimento
137
+ NPV = VPL ## Retorna o valor líquido atual de um investimento com base em uma série de fluxos de caixa periódicos e em uma taxa de desconto
138
+ ODDFPRICE = PREÇOPRIMINC ## Retorna o preço por R$ 100 de valor nominal de um título com um primeiro período indefinido
139
+ ODDFYIELD = LUCROPRIMINC ## Retorna o rendimento de um título com um primeiro período indefinido
140
+ ODDLPRICE = PREÇOÚLTINC ## Retorna o preço por R$ 100 de valor nominal de um título com um último período de cupom indefinido
141
+ ODDLYIELD = LUCROÚLTINC ## Retorna o rendimento de um título com um último período indefinido
142
+ PMT = PGTO ## Retorna o pagamento periódico de uma anuidade
143
+ PPMT = PPGTO ## Retorna o pagamento de capital para determinado período de investimento
144
+ PRICE = PREÇO ## Retorna a preço por R$ 100,00 de valor nominal de um título que paga juros periódicos
145
+ PRICEDISC = PREÇODESC ## Retorna o preço por R$ 100,00 de valor nominal de um título descontado
146
+ PRICEMAT = PREÇOVENC ## Retorna o preço por R$ 100,00 de valor nominal de um título que paga juros no vencimento
147
+ PV = VP ## Retorna o valor presente de um investimento
148
+ RATE = TAXA ## Retorna a taxa de juros por período de uma anuidade
149
+ RECEIVED = RECEBER ## Retorna a quantia recebida no vencimento de um título totalmente investido
150
+ SLN = DPD ## Retorna a depreciação em linha reta de um ativo durante um período
151
+ SYD = SDA ## Retorna a depreciação dos dígitos da soma dos anos de um ativo para um período especificado
152
+ TBILLEQ = OTN ## Retorna o rendimento de um título equivalente a uma obrigação do Tesouro
153
+ TBILLPRICE = OTNVALOR ## Retorna o preço por R$ 100,00 de valor nominal de uma obrigação do Tesouro
154
+ TBILLYIELD = OTNLUCRO ## Retorna o rendimento de uma obrigação do Tesouro
155
+ VDB = BDV ## Retorna a depreciação de um ativo para um período especificado ou parcial usando um método de balanço declinante
156
+ XIRR = XTIR ## Fornece a taxa interna de retorno para um programa de fluxos de caixa que não é necessariamente periódico
157
+ XNPV = XVPL ## Retorna o valor presente líquido de um programa de fluxos de caixa que não é necessariamente periódico
158
+ YIELD = LUCRO ## Retorna o lucro de um título que paga juros periódicos
159
+ YIELDDISC = LUCRODESC ## Retorna o rendimento anual de um título descontado. Por exemplo, uma obrigação do Tesouro
160
+ YIELDMAT = LUCROVENC ## Retorna o lucro anual de um título que paga juros no vencimento
161
+
162
+
163
+ ##
164
+ ## Information functions Funções de informação
165
+ ##
166
+ CELL = CÉL ## Retorna informações sobre formatação, localização ou conteúdo de uma célula
167
+ ERROR.TYPE = TIPO.ERRO ## Retorna um número correspondente a um tipo de erro
168
+ INFO = INFORMAÇÃO ## Retorna informações sobre o ambiente operacional atual
169
+ ISBLANK = ÉCÉL.VAZIA ## Retorna VERDADEIRO se o valor for vazio
170
+ ISERR = ÉERRO ## Retorna VERDADEIRO se o valor for um valor de erro diferente de #N/D
171
+ ISERROR = ÉERROS ## Retorna VERDADEIRO se o valor for um valor de erro
172
+ ISEVEN = ÉPAR ## Retorna VERDADEIRO se o número for par
173
+ ISLOGICAL = ÉLÓGICO ## Retorna VERDADEIRO se o valor for um valor lógico
174
+ ISNA = É.NÃO.DISP ## Retorna VERDADEIRO se o valor for o valor de erro #N/D
175
+ ISNONTEXT = É.NÃO.TEXTO ## Retorna VERDADEIRO se o valor for diferente de texto
176
+ ISNUMBER = ÉNÚM ## Retorna VERDADEIRO se o valor for um número
177
+ ISODD = ÉIMPAR ## Retorna VERDADEIRO se o número for ímpar
178
+ ISREF = ÉREF ## Retorna VERDADEIRO se o valor for uma referência
179
+ ISTEXT = ÉTEXTO ## Retorna VERDADEIRO se o valor for texto
180
+ N = N ## Retorna um valor convertido em um número
181
+ NA = NÃO.DISP ## Retorna o valor de erro #N/D
182
+ TYPE = TIPO ## Retorna um número indicando o tipo de dados de um valor
183
+
184
+
185
+ ##
186
+ ## Logical functions Funções lógicas
187
+ ##
188
+ AND = E ## Retorna VERDADEIRO se todos os seus argumentos forem VERDADEIROS
189
+ FALSE = FALSO ## Retorna o valor lógico FALSO
190
+ IF = SE ## Especifica um teste lógico a ser executado
191
+ IFERROR = SEERRO ## Retornará um valor que você especifica se uma fórmula for avaliada para um erro; do contrário, retornará o resultado da fórmula
192
+ NOT = NÃO ## Inverte o valor lógico do argumento
193
+ OR = OU ## Retorna VERDADEIRO se um dos argumentos for VERDADEIRO
194
+ TRUE = VERDADEIRO ## Retorna o valor lógico VERDADEIRO
195
+
196
+
197
+ ##
198
+ ## Lookup and reference functions Funções de pesquisa e referência
199
+ ##
200
+ ADDRESS = ENDEREÇO ## Retorna uma referência como texto para uma única célula em uma planilha
201
+ AREAS = ÁREAS ## Retorna o número de áreas em uma referência
202
+ CHOOSE = ESCOLHER ## Escolhe um valor a partir de uma lista de valores
203
+ COLUMN = COL ## Retorna o número da coluna de uma referência
204
+ COLUMNS = COLS ## Retorna o número de colunas em uma referência
205
+ HLOOKUP = PROCH ## Procura na linha superior de uma matriz e retorna o valor da célula especificada
206
+ HYPERLINK = HYPERLINK ## Cria um atalho ou salto que abre um documento armazenado em um servidor de rede, uma intranet ou na Internet
207
+ INDEX = ÍNDICE ## Usa um índice para escolher um valor de uma referência ou matriz
208
+ INDIRECT = INDIRETO ## Retorna uma referência indicada por um valor de texto
209
+ LOOKUP = PROC ## Procura valores em um vetor ou em uma matriz
210
+ MATCH = CORRESP ## Procura valores em uma referência ou em uma matriz
211
+ OFFSET = DESLOC ## Retorna um deslocamento de referência com base em uma determinada referência
212
+ ROW = LIN ## Retorna o número da linha de uma referência
213
+ ROWS = LINS ## Retorna o número de linhas em uma referência
214
+ RTD = RTD ## Recupera dados em tempo real de um programa que ofereça suporte a automação COM (automação: uma forma de trabalhar com objetos de um aplicativo a partir de outro aplicativo ou ferramenta de desenvolvimento. Chamada inicialmente de automação OLE, a automação é um padrão industrial e um recurso do modelo de objeto componente (COM).)
215
+ TRANSPOSE = TRANSPOR ## Retorna a transposição de uma matriz
216
+ VLOOKUP = PROCV ## Procura na primeira coluna de uma matriz e move ao longo da linha para retornar o valor de uma célula
217
+
218
+
219
+ ##
220
+ ## Math and trigonometry functions Funções matemáticas e trigonométricas
221
+ ##
222
+ ABS = ABS ## Retorna o valor absoluto de um número
223
+ ACOS = ACOS ## Retorna o arco cosseno de um número
224
+ ACOSH = ACOSH ## Retorna o cosseno hiperbólico inverso de um número
225
+ ASIN = ASEN ## Retorna o arco seno de um número
226
+ ASINH = ASENH ## Retorna o seno hiperbólico inverso de um número
227
+ ATAN = ATAN ## Retorna o arco tangente de um número
228
+ ATAN2 = ATAN2 ## Retorna o arco tangente das coordenadas x e y especificadas
229
+ ATANH = ATANH ## Retorna a tangente hiperbólica inversa de um número
230
+ CEILING = TETO ## Arredonda um número para o inteiro mais próximo ou para o múltiplo mais próximo de significância
231
+ COMBIN = COMBIN ## Retorna o número de combinações de um determinado número de objetos
232
+ COS = COS ## Retorna o cosseno de um número
233
+ COSH = COSH ## Retorna o cosseno hiperbólico de um número
234
+ DEGREES = GRAUS ## Converte radianos em graus
235
+ EVEN = PAR ## Arredonda um número para cima até o inteiro par mais próximo
236
+ EXP = EXP ## Retorna e elevado à potência de um número especificado
237
+ FACT = FATORIAL ## Retorna o fatorial de um número
238
+ FACTDOUBLE = FATDUPLO ## Retorna o fatorial duplo de um número
239
+ FLOOR = ARREDMULTB ## Arredonda um número para baixo até zero
240
+ GCD = MDC ## Retorna o máximo divisor comum
241
+ INT = INT ## Arredonda um número para baixo até o número inteiro mais próximo
242
+ LCM = MMC ## Retorna o mínimo múltiplo comum
243
+ LN = LN ## Retorna o logaritmo natural de um número
244
+ LOG = LOG ## Retorna o logaritmo de um número de uma base especificada
245
+ LOG10 = LOG10 ## Retorna o logaritmo de base 10 de um número
246
+ MDETERM = MATRIZ.DETERM ## Retorna o determinante de uma matriz de uma variável do tipo matriz
247
+ MINVERSE = MATRIZ.INVERSO ## Retorna a matriz inversa de uma matriz
248
+ MMULT = MATRIZ.MULT ## Retorna o produto de duas matrizes
249
+ MOD = RESTO ## Retorna o resto da divisão
250
+ MROUND = MARRED ## Retorna um número arredondado ao múltiplo desejado
251
+ MULTINOMIAL = MULTINOMIAL ## Retorna o multinomial de um conjunto de números
252
+ ODD = ÍMPAR ## Arredonda um número para cima até o inteiro ímpar mais próximo
253
+ PI = PI ## Retorna o valor de Pi
254
+ POWER = POTÊNCIA ## Fornece o resultado de um número elevado a uma potência
255
+ PRODUCT = MULT ## Multiplica seus argumentos
256
+ QUOTIENT = QUOCIENTE ## Retorna a parte inteira de uma divisão
257
+ RADIANS = RADIANOS ## Converte graus em radianos
258
+ RAND = ALEATÓRIO ## Retorna um número aleatório entre 0 e 1
259
+ RANDBETWEEN = ALEATÓRIOENTRE ## Retorna um número aleatório entre os números especificados
260
+ ROMAN = ROMANO ## Converte um algarismo arábico em romano, como texto
261
+ ROUND = ARRED ## Arredonda um número até uma quantidade especificada de dígitos
262
+ ROUNDDOWN = ARREDONDAR.PARA.BAIXO ## Arredonda um número para baixo até zero
263
+ ROUNDUP = ARREDONDAR.PARA.CIMA ## Arredonda um número para cima, afastando-o de zero
264
+ SERIESSUM = SOMASEQÜÊNCIA ## Retorna a soma de uma série polinomial baseada na fórmula
265
+ SIGN = SINAL ## Retorna o sinal de um número
266
+ SIN = SEN ## Retorna o seno de um ângulo dado
267
+ SINH = SENH ## Retorna o seno hiperbólico de um número
268
+ SQRT = RAIZ ## Retorna uma raiz quadrada positiva
269
+ SQRTPI = RAIZPI ## Retorna a raiz quadrada de (núm* pi)
270
+ SUBTOTAL = SUBTOTAL ## Retorna um subtotal em uma lista ou em um banco de dados
271
+ SUM = SOMA ## Soma seus argumentos
272
+ SUMIF = SOMASE ## Adiciona as células especificadas por um determinado critério
273
+ SUMIFS = SOMASE ## Adiciona as células em um intervalo que atende a vários critérios
274
+ SUMPRODUCT = SOMARPRODUTO ## Retorna a soma dos produtos de componentes correspondentes de matrizes
275
+ SUMSQ = SOMAQUAD ## Retorna a soma dos quadrados dos argumentos
276
+ SUMX2MY2 = SOMAX2DY2 ## Retorna a soma da diferença dos quadrados dos valores correspondentes em duas matrizes
277
+ SUMX2PY2 = SOMAX2SY2 ## Retorna a soma da soma dos quadrados dos valores correspondentes em duas matrizes
278
+ SUMXMY2 = SOMAXMY2 ## Retorna a soma dos quadrados das diferenças dos valores correspondentes em duas matrizes
279
+ TAN = TAN ## Retorna a tangente de um número
280
+ TANH = TANH ## Retorna a tangente hiperbólica de um número
281
+ TRUNC = TRUNCAR ## Trunca um número para um inteiro
282
+
283
+
284
+ ##
285
+ ## Statistical functions Funções estatísticas
286
+ ##
287
+ AVEDEV = DESV.MÉDIO ## Retorna a média aritmética dos desvios médios dos pontos de dados a partir de sua média
288
+ AVERAGE = MÉDIA ## Retorna a média dos argumentos
289
+ AVERAGEA = MÉDIAA ## Retorna a média dos argumentos, inclusive números, texto e valores lógicos
290
+ AVERAGEIF = MÉDIASE ## Retorna a média (média aritmética) de todas as células em um intervalo que atendem a um determinado critério
291
+ AVERAGEIFS = MÉDIASES ## Retorna a média (média aritmética) de todas as células que atendem a múltiplos critérios.
292
+ BETADIST = DISTBETA ## Retorna a função de distribuição cumulativa beta
293
+ BETAINV = BETA.ACUM.INV ## Retorna o inverso da função de distribuição cumulativa para uma distribuição beta especificada
294
+ BINOMDIST = DISTRBINOM ## Retorna a probabilidade de distribuição binomial do termo individual
295
+ CHIDIST = DIST.QUI ## Retorna a probabilidade unicaudal da distribuição qui-quadrada
296
+ CHIINV = INV.QUI ## Retorna o inverso da probabilidade uni-caudal da distribuição qui-quadrada
297
+ CHITEST = TESTE.QUI ## Retorna o teste para independência
298
+ CONFIDENCE = INT.CONFIANÇA ## Retorna o intervalo de confiança para uma média da população
299
+ CORREL = CORREL ## Retorna o coeficiente de correlação entre dois conjuntos de dados
300
+ COUNT = CONT.NÚM ## Calcula quantos números há na lista de argumentos
301
+ COUNTA = CONT.VALORES ## Calcula quantos valores há na lista de argumentos
302
+ COUNTBLANK = CONTAR.VAZIO ## Conta o número de células vazias no intervalo especificado
303
+ COUNTIF = CONT.SE ## Calcula o número de células não vazias em um intervalo que corresponde a determinados critérios
304
+ COUNTIFS = CONT.SES ## Conta o número de células dentro de um intervalo que atende a múltiplos critérios
305
+ COVAR = COVAR ## Retorna a covariância, a média dos produtos dos desvios pares
306
+ CRITBINOM = CRIT.BINOM ## Retorna o menor valor para o qual a distribuição binomial cumulativa é menor ou igual ao valor padrão
307
+ DEVSQ = DESVQ ## Retorna a soma dos quadrados dos desvios
308
+ EXPONDIST = DISTEXPON ## Retorna a distribuição exponencial
309
+ FDIST = DISTF ## Retorna a distribuição de probabilidade F
310
+ FINV = INVF ## Retorna o inverso da distribuição de probabilidades F
311
+ FISHER = FISHER ## Retorna a transformação Fisher
312
+ FISHERINV = FISHERINV ## Retorna o inverso da transformação Fisher
313
+ FORECAST = PREVISÃO ## Retorna um valor ao longo de uma linha reta
314
+ FREQUENCY = FREQÜÊNCIA ## Retorna uma distribuição de freqüência como uma matriz vertical
315
+ FTEST = TESTEF ## Retorna o resultado de um teste F
316
+ GAMMADIST = DISTGAMA ## Retorna a distribuição gama
317
+ GAMMAINV = INVGAMA ## Retorna o inverso da distribuição cumulativa gama
318
+ GAMMALN = LNGAMA ## Retorna o logaritmo natural da função gama, G(x)
319
+ GEOMEAN = MÉDIA.GEOMÉTRICA ## Retorna a média geométrica
320
+ GROWTH = CRESCIMENTO ## Retorna valores ao longo de uma tendência exponencial
321
+ HARMEAN = MÉDIA.HARMÔNICA ## Retorna a média harmônica
322
+ HYPGEOMDIST = DIST.HIPERGEOM ## Retorna a distribuição hipergeométrica
323
+ INTERCEPT = INTERCEPÇÃO ## Retorna a intercepção da linha de regressão linear
324
+ KURT = CURT ## Retorna a curtose de um conjunto de dados
325
+ LARGE = MAIOR ## Retorna o maior valor k-ésimo de um conjunto de dados
326
+ LINEST = PROJ.LIN ## Retorna os parâmetros de uma tendência linear
327
+ LOGEST = PROJ.LOG ## Retorna os parâmetros de uma tendência exponencial
328
+ LOGINV = INVLOG ## Retorna o inverso da distribuição lognormal
329
+ LOGNORMDIST = DIST.LOGNORMAL ## Retorna a distribuição lognormal cumulativa
330
+ MAX = MÁXIMO ## Retorna o valor máximo em uma lista de argumentos
331
+ MAXA = MÁXIMOA ## Retorna o maior valor em uma lista de argumentos, inclusive números, texto e valores lógicos
332
+ MEDIAN = MED ## Retorna a mediana dos números indicados
333
+ MIN = MÍNIMO ## Retorna o valor mínimo em uma lista de argumentos
334
+ MINA = MÍNIMOA ## Retorna o menor valor em uma lista de argumentos, inclusive números, texto e valores lógicos
335
+ MODE = MODO ## Retorna o valor mais comum em um conjunto de dados
336
+ NEGBINOMDIST = DIST.BIN.NEG ## Retorna a distribuição binomial negativa
337
+ NORMDIST = DIST.NORM ## Retorna a distribuição cumulativa normal
338
+ NORMINV = INV.NORM ## Retorna o inverso da distribuição cumulativa normal
339
+ NORMSDIST = DIST.NORMP ## Retorna a distribuição cumulativa normal padrão
340
+ NORMSINV = INV.NORMP ## Retorna o inverso da distribuição cumulativa normal padrão
341
+ PEARSON = PEARSON ## Retorna o coeficiente de correlação do momento do produto Pearson
342
+ PERCENTILE = PERCENTIL ## Retorna o k-ésimo percentil de valores em um intervalo
343
+ PERCENTRANK = ORDEM.PORCENTUAL ## Retorna a ordem percentual de um valor em um conjunto de dados
344
+ PERMUT = PERMUT ## Retorna o número de permutações de um determinado número de objetos
345
+ POISSON = POISSON ## Retorna a distribuição Poisson
346
+ PROB = PROB ## Retorna a probabilidade de valores em um intervalo estarem entre dois limites
347
+ QUARTILE = QUARTIL ## Retorna o quartil do conjunto de dados
348
+ RANK = ORDEM ## Retorna a posição de um número em uma lista de números
349
+ RSQ = RQUAD ## Retorna o quadrado do coeficiente de correlação do momento do produto de Pearson
350
+ SKEW = DISTORÇÃO ## Retorna a distorção de uma distribuição
351
+ SLOPE = INCLINAÇÃO ## Retorna a inclinação da linha de regressão linear
352
+ SMALL = MENOR ## Retorna o menor valor k-ésimo do conjunto de dados
353
+ STANDARDIZE = PADRONIZAR ## Retorna um valor normalizado
354
+ STDEV = DESVPAD ## Estima o desvio padrão com base em uma amostra
355
+ STDEVA = DESVPADA ## Estima o desvio padrão com base em uma amostra, inclusive números, texto e valores lógicos
356
+ STDEVP = DESVPADP ## Calcula o desvio padrão com base na população total
357
+ STDEVPA = DESVPADPA ## Calcula o desvio padrão com base na população total, inclusive números, texto e valores lógicos
358
+ STEYX = EPADYX ## Retorna o erro padrão do valor-y previsto para cada x da regressão
359
+ TDIST = DISTT ## Retorna a distribuição t de Student
360
+ TINV = INVT ## Retorna o inverso da distribuição t de Student
361
+ TREND = TENDÊNCIA ## Retorna valores ao longo de uma tendência linear
362
+ TRIMMEAN = MÉDIA.INTERNA ## Retorna a média do interior de um conjunto de dados
363
+ TTEST = TESTET ## Retorna a probabilidade associada ao teste t de Student
364
+ VAR = VAR ## Estima a variância com base em uma amostra
365
+ VARA = VARA ## Estima a variância com base em uma amostra, inclusive números, texto e valores lógicos
366
+ VARP = VARP ## Calcula a variância com base na população inteira
367
+ VARPA = VARPA ## Calcula a variância com base na população total, inclusive números, texto e valores lógicos
368
+ WEIBULL = WEIBULL ## Retorna a distribuição Weibull
369
+ ZTEST = TESTEZ ## Retorna o valor de probabilidade uni-caudal de um teste-z
370
+
371
+
372
+ ##
373
+ ## Text functions Funções de texto
374
+ ##
375
+ ASC = ASC ## Altera letras do inglês ou katakana de largura total (bytes duplos) dentro de uma seqüência de caracteres para caracteres de meia largura (byte único)
376
+ BAHTTEXT = BAHTTEXT ## Converte um número em um texto, usando o formato de moeda ß (baht)
377
+ CHAR = CARACT ## Retorna o caractere especificado pelo número de código
378
+ CLEAN = TIRAR ## Remove todos os caracteres do texto que não podem ser impressos
379
+ CODE = CÓDIGO ## Retorna um código numérico para o primeiro caractere de uma seqüência de caracteres de texto
380
+ CONCATENATE = CONCATENAR ## Agrupa vários itens de texto em um único item de texto
381
+ DOLLAR = MOEDA ## Converte um número em texto, usando o formato de moeda $ (dólar)
382
+ EXACT = EXATO ## Verifica se dois valores de texto são idênticos
383
+ FIND = PROCURAR ## Procura um valor de texto dentro de outro (diferencia maiúsculas de minúsculas)
384
+ FINDB = PROCURARB ## Procura um valor de texto dentro de outro (diferencia maiúsculas de minúsculas)
385
+ FIXED = DEF.NÚM.DEC ## Formata um número como texto com um número fixo de decimais
386
+ JIS = JIS ## Altera letras do inglês ou katakana de meia largura (byte único) dentro de uma seqüência de caracteres para caracteres de largura total (bytes duplos)
387
+ LEFT = ESQUERDA ## Retorna os caracteres mais à esquerda de um valor de texto
388
+ LEFTB = ESQUERDAB ## Retorna os caracteres mais à esquerda de um valor de texto
389
+ LEN = NÚM.CARACT ## Retorna o número de caracteres em uma seqüência de texto
390
+ LENB = NÚM.CARACTB ## Retorna o número de caracteres em uma seqüência de texto
391
+ LOWER = MINÚSCULA ## Converte texto para minúsculas
392
+ MID = EXT.TEXTO ## Retorna um número específico de caracteres de uma seqüência de texto começando na posição especificada
393
+ MIDB = EXT.TEXTOB ## Retorna um número específico de caracteres de uma seqüência de texto começando na posição especificada
394
+ PHONETIC = FONÉTICA ## Extrai os caracteres fonéticos (furigana) de uma seqüência de caracteres de texto
395
+ PROPER = PRI.MAIÚSCULA ## Coloca a primeira letra de cada palavra em maiúscula em um valor de texto
396
+ REPLACE = MUDAR ## Muda os caracteres dentro do texto
397
+ REPLACEB = MUDARB ## Muda os caracteres dentro do texto
398
+ REPT = REPT ## Repete o texto um determinado número de vezes
399
+ RIGHT = DIREITA ## Retorna os caracteres mais à direita de um valor de texto
400
+ RIGHTB = DIREITAB ## Retorna os caracteres mais à direita de um valor de texto
401
+ SEARCH = LOCALIZAR ## Localiza um valor de texto dentro de outro (não diferencia maiúsculas de minúsculas)
402
+ SEARCHB = LOCALIZARB ## Localiza um valor de texto dentro de outro (não diferencia maiúsculas de minúsculas)
403
+ SUBSTITUTE = SUBSTITUIR ## Substitui um novo texto por um texto antigo em uma seqüência de texto
404
+ T = T ## Converte os argumentos em texto
405
+ TEXT = TEXTO ## Formata um número e o converte em texto
406
+ TRIM = ARRUMAR ## Remove espaços do texto
407
+ UPPER = MAIÚSCULA ## Converte o texto em maiúsculas
408
+ VALUE = VALOR ## Converte um argumento de texto em um número
lib/phpExcel/PHPExcel/locale/pt/config CHANGED
File without changes
lib/phpExcel/PHPExcel/locale/pt/functions CHANGED
@@ -1,408 +1,408 @@
1
- ##
2
- ## Add-in and Automation functions Funções de Suplemento e Automatização
3
- ##
4
- GETPIVOTDATA = OBTERDADOSDIN ## Devolve dados armazenados num relatório de Tabela Dinâmica
5
-
6
-
7
- ##
8
- ## Cube functions Funções de cubo
9
- ##
10
- CUBEKPIMEMBER = MEMBROKPICUBO ## Devolve o nome, propriedade e medição de um KPI (key performance indicator) e apresenta o nome e a propriedade na célula. Um KPI é uma medida quantificável, como, por exemplo, o lucro mensal bruto ou a rotatividade trimestral de pessoal, utilizada para monitorizar o desempenho de uma organização.
11
- CUBEMEMBER = MEMBROCUBO ## Devolve um membro ou cadeia de identificação numa hierarquia de cubo. Utilizada para validar a existência do membro ou cadeia de identificação no cubo.
12
- CUBEMEMBERPROPERTY = PROPRIEDADEMEMBROCUBO ## Devolve o valor de uma propriedade de membro no cubo. Utilizada para validar a existência de um nome de membro no cubo e para devolver a propriedade especificada para esse membro.
13
- CUBERANKEDMEMBER = MEMBROCLASSIFICADOCUBO ## Devolve o enésimo ou a classificação mais alta num conjunto. Utilizada para devolver um ou mais elementos num conjunto, tal como o melhor vendedor ou os 10 melhores alunos.
14
- CUBESET = CONJUNTOCUBO ## Define um conjunto calculado de membros ou cadeias de identificação enviando uma expressão de conjunto para o cubo no servidor, que cria o conjunto e, em seguida, devolve o conjunto ao Microsoft Office Excel.
15
- CUBESETCOUNT = CONTARCONJUNTOCUBO ## Devolve o número de itens num conjunto.
16
- CUBEVALUE = VALORCUBO ## Devolve um valor agregado do cubo.
17
-
18
-
19
- ##
20
- ## Database functions Funções de base de dados
21
- ##
22
- DAVERAGE = BDMÉDIA ## Devolve a média das entradas da base de dados seleccionadas
23
- DCOUNT = BDCONTAR ## Conta as células que contêm números numa base de dados
24
- DCOUNTA = BDCONTAR.VAL ## Conta as células que não estejam em branco numa base de dados
25
- DGET = BDOBTER ## Extrai de uma base de dados um único registo que corresponde aos critérios especificados
26
- DMAX = BDMÁX ## Devolve o valor máximo das entradas da base de dados seleccionadas
27
- DMIN = BDMÍN ## Devolve o valor mínimo das entradas da base de dados seleccionadas
28
- DPRODUCT = BDMULTIPL ## Multiplica os valores de um determinado campo de registos que correspondem aos critérios numa base de dados
29
- DSTDEV = BDDESVPAD ## Calcula o desvio-padrão com base numa amostra de entradas da base de dados seleccionadas
30
- DSTDEVP = BDDESVPADP ## Calcula o desvio-padrão com base na população total das entradas da base de dados seleccionadas
31
- DSUM = BDSOMA ## Adiciona os números na coluna de campo dos registos de base de dados que correspondem aos critérios
32
- DVAR = BDVAR ## Calcula a variância com base numa amostra das entradas de base de dados seleccionadas
33
- DVARP = BDVARP ## Calcula a variância com base na população total das entradas de base de dados seleccionadas
34
-
35
-
36
- ##
37
- ## Date and time functions Funções de data e hora
38
- ##
39
- DATE = DATA ## Devolve o número de série de uma determinada data
40
- DATEVALUE = DATA.VALOR ## Converte uma data em forma de texto num número de série
41
- DAY = DIA ## Converte um número de série num dia do mês
42
- DAYS360 = DIAS360 ## Calcula o número de dias entre duas datas com base num ano com 360 dias
43
- EDATE = DATAM ## Devolve um número de série de data que corresponde ao número de meses indicado antes ou depois da data de início
44
- EOMONTH = FIMMÊS ## Devolve o número de série do último dia do mês antes ou depois de um número de meses especificado
45
- HOUR = HORA ## Converte um número de série numa hora
46
- MINUTE = MINUTO ## Converte um número de série num minuto
47
- MONTH = MÊS ## Converte um número de série num mês
48
- NETWORKDAYS = DIATRABALHOTOTAL ## Devolve o número total de dias úteis entre duas datas
49
- NOW = AGORA ## Devolve o número de série da data e hora actuais
50
- SECOND = SEGUNDO ## Converte um número de série num segundo
51
- TIME = TEMPO ## Devolve o número de série de um determinado tempo
52
- TIMEVALUE = VALOR.TEMPO ## Converte um tempo em forma de texto num número de série
53
- TODAY = HOJE ## Devolve o número de série da data actual
54
- WEEKDAY = DIA.SEMANA ## Converte um número de série num dia da semana
55
- WEEKNUM = NÚMSEMANA ## Converte um número de série num número que representa o número da semana num determinado ano
56
- WORKDAY = DIA.TRABALHO ## Devolve o número de série da data antes ou depois de um número de dias úteis especificado
57
- YEAR = ANO ## Converte um número de série num ano
58
- YEARFRAC = FRACÇÃOANO ## Devolve a fracção de ano que representa o número de dias inteiros entre a data_de_início e a data_de_fim
59
-
60
-
61
- ##
62
- ## Engineering functions Funções de engenharia
63
- ##
64
- BESSELI = BESSELI ## Devolve a função de Bessel modificada In(x)
65
- BESSELJ = BESSELJ ## Devolve a função de Bessel Jn(x)
66
- BESSELK = BESSELK ## Devolve a função de Bessel modificada Kn(x)
67
- BESSELY = BESSELY ## Devolve a função de Bessel Yn(x)
68
- BIN2DEC = BINADEC ## Converte um número binário em decimal
69
- BIN2HEX = BINAHEX ## Converte um número binário em hexadecimal
70
- BIN2OCT = BINAOCT ## Converte um número binário em octal
71
- COMPLEX = COMPLEXO ## Converte coeficientes reais e imaginários num número complexo
72
- CONVERT = CONVERTER ## Converte um número de um sistema de medida noutro
73
- DEC2BIN = DECABIN ## Converte um número decimal em binário
74
- DEC2HEX = DECAHEX ## Converte um número decimal em hexadecimal
75
- DEC2OCT = DECAOCT ## Converte um número decimal em octal
76
- DELTA = DELTA ## Testa se dois valores são iguais
77
- ERF = FUNCERRO ## Devolve a função de erro
78
- ERFC = FUNCERROCOMPL ## Devolve a função de erro complementar
79
- GESTEP = DEGRAU ## Testa se um número é maior do que um valor limite
80
- HEX2BIN = HEXABIN ## Converte um número hexadecimal em binário
81
- HEX2DEC = HEXADEC ## Converte um número hexadecimal em decimal
82
- HEX2OCT = HEXAOCT ## Converte um número hexadecimal em octal
83
- IMABS = IMABS ## Devolve o valor absoluto (módulo) de um número complexo
84
- IMAGINARY = IMAGINÁRIO ## Devolve o coeficiente imaginário de um número complexo
85
- IMARGUMENT = IMARG ## Devolve o argumento Teta, um ângulo expresso em radianos
86
- IMCONJUGATE = IMCONJ ## Devolve o conjugado complexo de um número complexo
87
- IMCOS = IMCOS ## Devolve o co-seno de um número complexo
88
- IMDIV = IMDIV ## Devolve o quociente de dois números complexos
89
- IMEXP = IMEXP ## Devolve o exponencial de um número complexo
90
- IMLN = IMLN ## Devolve o logaritmo natural de um número complexo
91
- IMLOG10 = IMLOG10 ## Devolve o logaritmo de base 10 de um número complexo
92
- IMLOG2 = IMLOG2 ## Devolve o logaritmo de base 2 de um número complexo
93
- IMPOWER = IMPOT ## Devolve um número complexo elevado a uma potência inteira
94
- IMPRODUCT = IMPROD ## Devolve o produto de números complexos
95
- IMREAL = IMREAL ## Devolve o coeficiente real de um número complexo
96
- IMSIN = IMSENO ## Devolve o seno de um número complexo
97
- IMSQRT = IMRAIZ ## Devolve a raiz quadrada de um número complexo
98
- IMSUB = IMSUBTR ## Devolve a diferença entre dois números complexos
99
- IMSUM = IMSOMA ## Devolve a soma de números complexos
100
- OCT2BIN = OCTABIN ## Converte um número octal em binário
101
- OCT2DEC = OCTADEC ## Converte um número octal em decimal
102
- OCT2HEX = OCTAHEX ## Converte um número octal em hexadecimal
103
-
104
-
105
- ##
106
- ## Financial functions Funções financeiras
107
- ##
108
- ACCRINT = JUROSACUM ## Devolve os juros acumulados de um título que paga juros periódicos
109
- ACCRINTM = JUROSACUMV ## Devolve os juros acumulados de um título que paga juros no vencimento
110
- AMORDEGRC = AMORDEGRC ## Devolve a depreciação correspondente a cada período contabilístico utilizando um coeficiente de depreciação
111
- AMORLINC = AMORLINC ## Devolve a depreciação correspondente a cada período contabilístico
112
- COUPDAYBS = CUPDIASINLIQ ## Devolve o número de dias entre o início do período do cupão e a data de regularização
113
- COUPDAYS = CUPDIAS ## Devolve o número de dias no período do cupão que contém a data de regularização
114
- COUPDAYSNC = CUPDIASPRÓX ## Devolve o número de dias entre a data de regularização e a data do cupão seguinte
115
- COUPNCD = CUPDATAPRÓX ## Devolve a data do cupão seguinte após a data de regularização
116
- COUPNUM = CUPNÚM ## Devolve o número de cupões a serem pagos entre a data de regularização e a data de vencimento
117
- COUPPCD = CUPDATAANT ## Devolve a data do cupão anterior antes da data de regularização
118
- CUMIPMT = PGTOJURACUM ## Devolve os juros cumulativos pagos entre dois períodos
119
- CUMPRINC = PGTOCAPACUM ## Devolve o capital cumulativo pago a título de empréstimo entre dois períodos
120
- DB = BD ## Devolve a depreciação de um activo relativo a um período especificado utilizando o método das quotas degressivas fixas
121
- DDB = BDD ## Devolve a depreciação de um activo relativo a um período especificado utilizando o método das quotas degressivas duplas ou qualquer outro método especificado
122
- DISC = DESC ## Devolve a taxa de desconto de um título
123
- DOLLARDE = MOEDADEC ## Converte um preço em unidade monetária, expresso como uma fracção, num preço em unidade monetária, expresso como um número decimal
124
- DOLLARFR = MOEDAFRA ## Converte um preço em unidade monetária, expresso como um número decimal, num preço em unidade monetária, expresso como uma fracção
125
- DURATION = DURAÇÃO ## Devolve a duração anual de um título com pagamentos de juros periódicos
126
- EFFECT = EFECTIVA ## Devolve a taxa de juros anual efectiva
127
- FV = VF ## Devolve o valor futuro de um investimento
128
- FVSCHEDULE = VFPLANO ## Devolve o valor futuro de um capital inicial após a aplicação de uma série de taxas de juro compostas
129
- INTRATE = TAXAJUROS ## Devolve a taxa de juros de um título investido na totalidade
130
- IPMT = IPGTO ## Devolve o pagamento dos juros de um investimento durante um determinado período
131
- IRR = TIR ## Devolve a taxa de rentabilidade interna para uma série de fluxos monetários
132
- ISPMT = É.PGTO ## Calcula os juros pagos durante um período específico de um investimento
133
- MDURATION = MDURAÇÃO ## Devolve a duração modificada de Macauley de um título com um valor de paridade equivalente a € 100
134
- MIRR = MTIR ## Devolve a taxa interna de rentabilidade em que os fluxos monetários positivos e negativos são financiados com taxas diferentes
135
- NOMINAL = NOMINAL ## Devolve a taxa de juros nominal anual
136
- NPER = NPER ## Devolve o número de períodos de um investimento
137
- NPV = VAL ## Devolve o valor actual líquido de um investimento com base numa série de fluxos monetários periódicos e numa taxa de desconto
138
- ODDFPRICE = PREÇOPRIMINC ## Devolve o preço por € 100 do valor nominal de um título com um período inicial incompleto
139
- ODDFYIELD = LUCROPRIMINC ## Devolve o lucro de um título com um período inicial incompleto
140
- ODDLPRICE = PREÇOÚLTINC ## Devolve o preço por € 100 do valor nominal de um título com um período final incompleto
141
- ODDLYIELD = LUCROÚLTINC ## Devolve o lucro de um título com um período final incompleto
142
- PMT = PGTO ## Devolve o pagamento periódico de uma anuidade
143
- PPMT = PPGTO ## Devolve o pagamento sobre o capital de um investimento num determinado período
144
- PRICE = PREÇO ## Devolve o preço por € 100 do valor nominal de um título que paga juros periódicos
145
- PRICEDISC = PREÇODESC ## Devolve o preço por € 100 do valor nominal de um título descontado
146
- PRICEMAT = PREÇOVENC ## Devolve o preço por € 100 do valor nominal de um título que paga juros no vencimento
147
- PV = VA ## Devolve o valor actual de um investimento
148
- RATE = TAXA ## Devolve a taxa de juros por período de uma anuidade
149
- RECEIVED = RECEBER ## Devolve o montante recebido no vencimento de um título investido na totalidade
150
- SLN = AMORT ## Devolve uma depreciação linear de um activo durante um período
151
- SYD = AMORTD ## Devolve a depreciação por algarismos da soma dos anos de um activo durante um período especificado
152
- TBILLEQ = OTN ## Devolve o lucro de um título equivalente a uma Obrigação do Tesouro
153
- TBILLPRICE = OTNVALOR ## Devolve o preço por € 100 de valor nominal de uma Obrigação do Tesouro
154
- TBILLYIELD = OTNLUCRO ## Devolve o lucro de uma Obrigação do Tesouro
155
- VDB = BDV ## Devolve a depreciação de um activo relativo a um período específico ou parcial utilizando um método de quotas degressivas
156
- XIRR = XTIR ## Devolve a taxa interna de rentabilidade de um plano de fluxos monetários que não seja necessariamente periódica
157
- XNPV = XVAL ## Devolve o valor actual líquido de um plano de fluxos monetários que não seja necessariamente periódico
158
- YIELD = LUCRO ## Devolve o lucro de um título que paga juros periódicos
159
- YIELDDISC = LUCRODESC ## Devolve o lucro anual de um título emitido abaixo do valor nominal, por exemplo, uma Obrigação do Tesouro
160
- YIELDMAT = LUCROVENC ## Devolve o lucro anual de um título que paga juros na data de vencimento
161
-
162
-
163
- ##
164
- ## Information functions Funções de informação
165
- ##
166
- CELL = CÉL ## Devolve informações sobre a formatação, localização ou conteúdo de uma célula
167
- ERROR.TYPE = TIPO.ERRO ## Devolve um número correspondente a um tipo de erro
168
- INFO = INFORMAÇÃO ## Devolve informações sobre o ambiente de funcionamento actual
169
- ISBLANK = É.CÉL.VAZIA ## Devolve VERDADEIRO se o valor estiver em branco
170
- ISERR = É.ERROS ## Devolve VERDADEIRO se o valor for um valor de erro diferente de #N/D
171
- ISERROR = É.ERRO ## Devolve VERDADEIRO se o valor for um valor de erro
172
- ISEVEN = ÉPAR ## Devolve VERDADEIRO se o número for par
173
- ISLOGICAL = É.LÓGICO ## Devolve VERDADEIRO se o valor for lógico
174
- ISNA = É.NÃO.DISP ## Devolve VERDADEIRO se o valor for o valor de erro #N/D
175
- ISNONTEXT = É.NÃO.TEXTO ## Devolve VERDADEIRO se o valor não for texto
176
- ISNUMBER = É.NÚM ## Devolve VERDADEIRO se o valor for um número
177
- ISODD = ÉÍMPAR ## Devolve VERDADEIRO se o número for ímpar
178
- ISREF = É.REF ## Devolve VERDADEIRO se o valor for uma referência
179
- ISTEXT = É.TEXTO ## Devolve VERDADEIRO se o valor for texto
180
- N = N ## Devolve um valor convertido num número
181
- NA = NÃO.DISP ## Devolve o valor de erro #N/D
182
- TYPE = TIPO ## Devolve um número que indica o tipo de dados de um valor
183
-
184
-
185
- ##
186
- ## Logical functions Funções lógicas
187
- ##
188
- AND = E ## Devolve VERDADEIRO se todos os respectivos argumentos corresponderem a VERDADEIRO
189
- FALSE = FALSO ## Devolve o valor lógico FALSO
190
- IF = SE ## Especifica um teste lógico a ser executado
191
- IFERROR = SE.ERRO ## Devolve um valor definido pelo utilizador se ocorrer um erro na fórmula, e devolve o resultado da fórmula se não ocorrer nenhum erro
192
- NOT = NÃO ## Inverte a lógica do respectivo argumento
193
- OR = OU ## Devolve VERDADEIRO se qualquer argumento for VERDADEIRO
194
- TRUE = VERDADEIRO ## Devolve o valor lógico VERDADEIRO
195
-
196
-
197
- ##
198
- ## Lookup and reference functions Funções de pesquisa e referência
199
- ##
200
- ADDRESS = ENDEREÇO ## Devolve uma referência a uma única célula numa folha de cálculo como texto
201
- AREAS = ÁREAS ## Devolve o número de áreas numa referência
202
- CHOOSE = SELECCIONAR ## Selecciona um valor a partir de uma lista de valores
203
- COLUMN = COL ## Devolve o número da coluna de uma referência
204
- COLUMNS = COLS ## Devolve o número de colunas numa referência
205
- HLOOKUP = PROCH ## Procura na linha superior de uma matriz e devolve o valor da célula indicada
206
- HYPERLINK = HIPERLIGAÇÃO ## Cria um atalho ou hiperligação que abre um documento armazenado num servidor de rede, numa intranet ou na Internet
207
- INDEX = ÍNDICE ## Utiliza um índice para escolher um valor de uma referência ou de uma matriz
208
- INDIRECT = INDIRECTO ## Devolve uma referência indicada por um valor de texto
209
- LOOKUP = PROC ## Procura valores num vector ou numa matriz
210
- MATCH = CORRESP ## Procura valores numa referência ou numa matriz
211
- OFFSET = DESLOCAMENTO ## Devolve o deslocamento de referência de uma determinada referência
212
- ROW = LIN ## Devolve o número da linha de uma referência
213
- ROWS = LINS ## Devolve o número de linhas numa referência
214
- RTD = RTD ## Obtém dados em tempo real a partir de um programa que suporte automatização COM (automatização: modo de trabalhar com objectos de uma aplicação a partir de outra aplicação ou ferramenta de desenvolvimento. Anteriormente conhecida como automatização OLE, a automatização é uma norma da indústria de software e uma funcionalidade COM (Component Object Model).)
215
- TRANSPOSE = TRANSPOR ## Devolve a transposição de uma matriz
216
- VLOOKUP = PROCV ## Procura na primeira coluna de uma matriz e percorre a linha para devolver o valor de uma célula
217
-
218
-
219
- ##
220
- ## Math and trigonometry functions Funções matemáticas e trigonométricas
221
- ##
222
- ABS = ABS ## Devolve o valor absoluto de um número
223
- ACOS = ACOS ## Devolve o arco de co-seno de um número
224
- ACOSH = ACOSH ## Devolve o co-seno hiperbólico inverso de um número
225
- ASIN = ASEN ## Devolve o arco de seno de um número
226
- ASINH = ASENH ## Devolve o seno hiperbólico inverso de um número
227
- ATAN = ATAN ## Devolve o arco de tangente de um número
228
- ATAN2 = ATAN2 ## Devolve o arco de tangente das coordenadas x e y
229
- ATANH = ATANH ## Devolve a tangente hiperbólica inversa de um número
230
- CEILING = ARRED.EXCESSO ## Arredonda um número para o número inteiro mais próximo ou para o múltiplo de significância mais próximo
231
- COMBIN = COMBIN ## Devolve o número de combinações de um determinado número de objectos
232
- COS = COS ## Devolve o co-seno de um número
233
- COSH = COSH ## Devolve o co-seno hiperbólico de um número
234
- DEGREES = GRAUS ## Converte radianos em graus
235
- EVEN = PAR ## Arredonda um número por excesso para o número inteiro mais próximo
236
- EXP = EXP ## Devolve e elevado à potência de um determinado número
237
- FACT = FACTORIAL ## Devolve o factorial de um número
238
- FACTDOUBLE = FACTDUPLO ## Devolve o factorial duplo de um número
239
- FLOOR = ARRED.DEFEITO ## Arredonda um número por defeito até zero
240
- GCD = MDC ## Devolve o maior divisor comum
241
- INT = INT ## Arredonda um número por defeito para o número inteiro mais próximo
242
- LCM = MMC ## Devolve o mínimo múltiplo comum
243
- LN = LN ## Devolve o logaritmo natural de um número
244
- LOG = LOG ## Devolve o logaritmo de um número com uma base especificada
245
- LOG10 = LOG10 ## Devolve o logaritmo de base 10 de um número
246
- MDETERM = MATRIZ.DETERM ## Devolve o determinante matricial de uma matriz
247
- MINVERSE = MATRIZ.INVERSA ## Devolve o inverso matricial de uma matriz
248
- MMULT = MATRIZ.MULT ## Devolve o produto matricial de duas matrizes
249
- MOD = RESTO ## Devolve o resto da divisão
250
- MROUND = MARRED ## Devolve um número arredondado para o múltiplo pretendido
251
- MULTINOMIAL = POLINOMIAL ## Devolve o polinomial de um conjunto de números
252
- ODD = ÍMPAR ## Arredonda por excesso um número para o número inteiro ímpar mais próximo
253
- PI = PI ## Devolve o valor de pi
254
- POWER = POTÊNCIA ## Devolve o resultado de um número elevado a uma potência
255
- PRODUCT = PRODUTO ## Multiplica os respectivos argumentos
256
- QUOTIENT = QUOCIENTE ## Devolve a parte inteira de uma divisão
257
- RADIANS = RADIANOS ## Converte graus em radianos
258
- RAND = ALEATÓRIO ## Devolve um número aleatório entre 0 e 1
259
- RANDBETWEEN = ALEATÓRIOENTRE ## Devolve um número aleatório entre os números especificados
260
- ROMAN = ROMANO ## Converte um número árabe em romano, como texto
261
- ROUND = ARRED ## Arredonda um número para um número de dígitos especificado
262
- ROUNDDOWN = ARRED.PARA.BAIXO ## Arredonda um número por defeito até zero
263
- ROUNDUP = ARRED.PARA.CIMA ## Arredonda um número por excesso, afastando-o de zero
264
- SERIESSUM = SOMASÉRIE ## Devolve a soma de uma série de potências baseada na fórmula
265
- SIGN = SINAL ## Devolve o sinal de um número
266
- SIN = SEN ## Devolve o seno de um determinado ângulo
267
- SINH = SENH ## Devolve o seno hiperbólico de um número
268
- SQRT = RAIZQ ## Devolve uma raiz quadrada positiva
269
- SQRTPI = RAIZPI ## Devolve a raiz quadrada de (núm * pi)
270
- SUBTOTAL = SUBTOTAL ## Devolve um subtotal numa lista ou base de dados
271
- SUM = SOMA ## Adiciona os respectivos argumentos
272
- SUMIF = SOMA.SE ## Adiciona as células especificadas por um determinado critério
273
- SUMIFS = SOMA.SE.S ## Adiciona as células num intervalo que cumpre vários critérios
274
- SUMPRODUCT = SOMARPRODUTO ## Devolve a soma dos produtos de componentes de matrizes correspondentes
275
- SUMSQ = SOMARQUAD ## Devolve a soma dos quadrados dos argumentos
276
- SUMX2MY2 = SOMAX2DY2 ## Devolve a soma da diferença dos quadrados dos valores correspondentes em duas matrizes
277
- SUMX2PY2 = SOMAX2SY2 ## Devolve a soma da soma dos quadrados dos valores correspondentes em duas matrizes
278
- SUMXMY2 = SOMAXMY2 ## Devolve a soma dos quadrados da diferença dos valores correspondentes em duas matrizes
279
- TAN = TAN ## Devolve a tangente de um número
280
- TANH = TANH ## Devolve a tangente hiperbólica de um número
281
- TRUNC = TRUNCAR ## Trunca um número para um número inteiro
282
-
283
-
284
- ##
285
- ## Statistical functions Funções estatísticas
286
- ##
287
- AVEDEV = DESV.MÉDIO ## Devolve a média aritmética dos desvios absolutos à média dos pontos de dados
288
- AVERAGE = MÉDIA ## Devolve a média dos respectivos argumentos
289
- AVERAGEA = MÉDIAA ## Devolve uma média dos respectivos argumentos, incluindo números, texto e valores lógicos
290
- AVERAGEIF = MÉDIA.SE ## Devolve a média aritmética de todas as células num intervalo que cumprem determinado critério
291
- AVERAGEIFS = MÉDIA.SE.S ## Devolve a média aritmética de todas as células que cumprem múltiplos critérios
292
- BETADIST = DISTBETA ## Devolve a função de distribuição cumulativa beta
293
- BETAINV = BETA.ACUM.INV ## Devolve o inverso da função de distribuição cumulativa relativamente a uma distribuição beta específica
294
- BINOMDIST = DISTRBINOM ## Devolve a probabilidade de distribuição binomial de termo individual
295
- CHIDIST = DIST.CHI ## Devolve a probabilidade unicaudal da distribuição qui-quadrada
296
- CHIINV = INV.CHI ## Devolve o inverso da probabilidade unicaudal da distribuição qui-quadrada
297
- CHITEST = TESTE.CHI ## Devolve o teste para independência
298
- CONFIDENCE = INT.CONFIANÇA ## Devolve o intervalo de confiança correspondente a uma média de população
299
- CORREL = CORREL ## Devolve o coeficiente de correlação entre dois conjuntos de dados
300
- COUNT = CONTAR ## Conta os números que existem na lista de argumentos
301
- COUNTA = CONTAR.VAL ## Conta os valores que existem na lista de argumentos
302
- COUNTBLANK = CONTAR.VAZIO ## Conta o número de células em branco num intervalo
303
- COUNTIF = CONTAR.SE ## Calcula o número de células num intervalo que corresponde aos critérios determinados
304
- COUNTIFS = CONTAR.SE.S ## Conta o número de células num intervalo que cumprem múltiplos critérios
305
- COVAR = COVAR ## Devolve a covariância, que é a média dos produtos de desvios de pares
306
- CRITBINOM = CRIT.BINOM ## Devolve o menor valor em que a distribuição binomial cumulativa é inferior ou igual a um valor de critério
307
- DEVSQ = DESVQ ## Devolve a soma dos quadrados dos desvios
308
- EXPONDIST = DISTEXPON ## Devolve a distribuição exponencial
309
- FDIST = DISTF ## Devolve a distribuição da probabilidade F
310
- FINV = INVF ## Devolve o inverso da distribuição da probabilidade F
311
- FISHER = FISHER ## Devolve a transformação Fisher
312
- FISHERINV = FISHERINV ## Devolve o inverso da transformação Fisher
313
- FORECAST = PREVISÃO ## Devolve um valor ao longo de uma tendência linear
314
- FREQUENCY = FREQUÊNCIA ## Devolve uma distribuição de frequência como uma matriz vertical
315
- FTEST = TESTEF ## Devolve o resultado de um teste F
316
- GAMMADIST = DISTGAMA ## Devolve a distribuição gama
317
- GAMMAINV = INVGAMA ## Devolve o inverso da distribuição gama cumulativa
318
- GAMMALN = LNGAMA ## Devolve o logaritmo natural da função gama, Γ(x)
319
- GEOMEAN = MÉDIA.GEOMÉTRICA ## Devolve a média geométrica
320
- GROWTH = CRESCIMENTO ## Devolve valores ao longo de uma tendência exponencial
321
- HARMEAN = MÉDIA.HARMÓNICA ## Devolve a média harmónica
322
- HYPGEOMDIST = DIST.HIPERGEOM ## Devolve a distribuição hipergeométrica
323
- INTERCEPT = INTERCEPTAR ## Devolve a intercepção da linha de regressão linear
324
- KURT = CURT ## Devolve a curtose de um conjunto de dados
325
- LARGE = MAIOR ## Devolve o maior valor k-ésimo de um conjunto de dados
326
- LINEST = PROJ.LIN ## Devolve os parâmetros de uma tendência linear
327
- LOGEST = PROJ.LOG ## Devolve os parâmetros de uma tendência exponencial
328
- LOGINV = INVLOG ## Devolve o inverso da distribuição normal logarítmica
329
- LOGNORMDIST = DIST.NORMALLOG ## Devolve a distribuição normal logarítmica cumulativa
330
- MAX = MÁXIMO ## Devolve o valor máximo numa lista de argumentos
331
- MAXA = MÁXIMOA ## Devolve o valor máximo numa lista de argumentos, incluindo números, texto e valores lógicos
332
- MEDIAN = MED ## Devolve a mediana dos números indicados
333
- MIN = MÍNIMO ## Devolve o valor mínimo numa lista de argumentos
334
- MINA = MÍNIMOA ## Devolve o valor mínimo numa lista de argumentos, incluindo números, texto e valores lógicos
335
- MODE = MODA ## Devolve o valor mais comum num conjunto de dados
336
- NEGBINOMDIST = DIST.BIN.NEG ## Devolve a distribuição binominal negativa
337
- NORMDIST = DIST.NORM ## Devolve a distribuição cumulativa normal
338
- NORMINV = INV.NORM ## Devolve o inverso da distribuição cumulativa normal
339
- NORMSDIST = DIST.NORMP ## Devolve a distribuição cumulativa normal padrão
340
- NORMSINV = INV.NORMP ## Devolve o inverso da distribuição cumulativa normal padrão
341
- PEARSON = PEARSON ## Devolve o coeficiente de correlação momento/produto de Pearson
342
- PERCENTILE = PERCENTIL ## Devolve o k-ésimo percentil de valores num intervalo
343
- PERCENTRANK = ORDEM.PERCENTUAL ## Devolve a ordem percentual de um valor num conjunto de dados
344
- PERMUT = PERMUTAR ## Devolve o número de permutações de um determinado número de objectos
345
- POISSON = POISSON ## Devolve a distribuição de Poisson
346
- PROB = PROB ## Devolve a probabilidade dos valores num intervalo se encontrarem entre dois limites
347
- QUARTILE = QUARTIL ## Devolve o quartil de um conjunto de dados
348
- RANK = ORDEM ## Devolve a ordem de um número numa lista numérica
349
- RSQ = RQUAD ## Devolve o quadrado do coeficiente de correlação momento/produto de Pearson
350
- SKEW = DISTORÇÃO ## Devolve a distorção de uma distribuição
351
- SLOPE = DECLIVE ## Devolve o declive da linha de regressão linear
352
- SMALL = MENOR ## Devolve o menor valor de k-ésimo de um conjunto de dados
353
- STANDARDIZE = NORMALIZAR ## Devolve um valor normalizado
354
- STDEV = DESVPAD ## Calcula o desvio-padrão com base numa amostra
355
- STDEVA = DESVPADA ## Calcula o desvio-padrão com base numa amostra, incluindo números, texto e valores lógicos
356
- STDEVP = DESVPADP ## Calcula o desvio-padrão com base na população total
357
- STDEVPA = DESVPADPA ## Calcula o desvio-padrão com base na população total, incluindo números, texto e valores lógicos
358
- STEYX = EPADYX ## Devolve o erro-padrão do valor de y previsto para cada x na regressão
359
- TDIST = DISTT ## Devolve a distribuição t de Student
360
- TINV = INVT ## Devolve o inverso da distribuição t de Student
361
- TREND = TENDÊNCIA ## Devolve valores ao longo de uma tendência linear
362
- TRIMMEAN = MÉDIA.INTERNA ## Devolve a média do interior de um conjunto de dados
363
- TTEST = TESTET ## Devolve a probabilidade associada ao teste t de Student
364
- VAR = VAR ## Calcula a variância com base numa amostra
365
- VARA = VARA ## Calcula a variância com base numa amostra, incluindo números, texto e valores lógicos
366
- VARP = VARP ## Calcula a variância com base na população total
367
- VARPA = VARPA ## Calcula a variância com base na população total, incluindo números, texto e valores lógicos
368
- WEIBULL = WEIBULL ## Devolve a distribuição Weibull
369
- ZTEST = TESTEZ ## Devolve o valor de probabilidade unicaudal de um teste-z
370
-
371
-
372
- ##
373
- ## Text functions Funções de texto
374
- ##
375
- ASC = ASC ## Altera letras ou katakana de largura total (byte duplo) numa cadeia de caracteres para caracteres de largura média (byte único)
376
- BAHTTEXT = TEXTO.BAHT ## Converte um número em texto, utilizando o formato monetário ß (baht)
377
- CHAR = CARÁCT ## Devolve o carácter especificado pelo número de código
378
- CLEAN = LIMPAR ## Remove do texto todos os caracteres não imprimíveis
379
- CODE = CÓDIGO ## Devolve um código numérico correspondente ao primeiro carácter numa cadeia de texto
380
- CONCATENATE = CONCATENAR ## Agrupa vários itens de texto num único item de texto
381
- DOLLAR = MOEDA ## Converte um número em texto, utilizando o formato monetário € (Euro)
382
- EXACT = EXACTO ## Verifica se dois valores de texto são idênticos
383
- FIND = LOCALIZAR ## Localiza um valor de texto dentro de outro (sensível às maiúsculas e minúsculas)
384
- FINDB = LOCALIZARB ## Localiza um valor de texto dentro de outro (sensível às maiúsculas e minúsculas)
385
- FIXED = FIXA ## Formata um número como texto com um número fixo de decimais
386
- JIS = JIS ## Altera letras ou katakana de largura média (byte único) numa cadeia de caracteres para caracteres de largura total (byte duplo)
387
- LEFT = ESQUERDA ## Devolve os caracteres mais à esquerda de um valor de texto
388
- LEFTB = ESQUERDAB ## Devolve os caracteres mais à esquerda de um valor de texto
389
- LEN = NÚM.CARACT ## Devolve o número de caracteres de uma cadeia de texto
390
- LENB = NÚM.CARACTB ## Devolve o número de caracteres de uma cadeia de texto
391
- LOWER = MINÚSCULAS ## Converte o texto em minúsculas
392
- MID = SEG.TEXTO ## Devolve um número específico de caracteres de uma cadeia de texto, a partir da posição especificada
393
- MIDB = SEG.TEXTOB ## Devolve um número específico de caracteres de uma cadeia de texto, a partir da posição especificada
394
- PHONETIC = FONÉTICA ## Retira os caracteres fonéticos (furigana) de uma cadeia de texto
395
- PROPER = INICIAL.MAIÚSCULA ## Coloca em maiúsculas a primeira letra de cada palavra de um valor de texto
396
- REPLACE = SUBSTITUIR ## Substitui caracteres no texto
397
- REPLACEB = SUBSTITUIRB ## Substitui caracteres no texto
398
- REPT = REPETIR ## Repete texto um determinado número de vezes
399
- RIGHT = DIREITA ## Devolve os caracteres mais à direita de um valor de texto
400
- RIGHTB = DIREITAB ## Devolve os caracteres mais à direita de um valor de texto
401
- SEARCH = PROCURAR ## Localiza um valor de texto dentro de outro (não sensível a maiúsculas e minúsculas)
402
- SEARCHB = PROCURARB ## Localiza um valor de texto dentro de outro (não sensível a maiúsculas e minúsculas)
403
- SUBSTITUTE = SUBST ## Substitui texto novo por texto antigo numa cadeia de texto
404
- T = T ## Converte os respectivos argumentos em texto
405
- TEXT = TEXTO ## Formata um número e converte-o em texto
406
- TRIM = COMPACTAR ## Remove espaços do texto
407
- UPPER = MAIÚSCULAS ## Converte texto em maiúsculas
408
- VALUE = VALOR ## Converte um argumento de texto num número
1
+ ##
2
+ ## Add-in and Automation functions Funções de Suplemento e Automatização
3
+ ##
4
+ GETPIVOTDATA = OBTERDADOSDIN ## Devolve dados armazenados num relatório de Tabela Dinâmica
5
+
6
+
7
+ ##
8
+ ## Cube functions Funções de cubo
9
+ ##
10
+ CUBEKPIMEMBER = MEMBROKPICUBO ## Devolve o nome, propriedade e medição de um KPI (key performance indicator) e apresenta o nome e a propriedade na célula. Um KPI é uma medida quantificável, como, por exemplo, o lucro mensal bruto ou a rotatividade trimestral de pessoal, utilizada para monitorizar o desempenho de uma organização.
11
+ CUBEMEMBER = MEMBROCUBO ## Devolve um membro ou cadeia de identificação numa hierarquia de cubo. Utilizada para validar a existência do membro ou cadeia de identificação no cubo.
12
+ CUBEMEMBERPROPERTY = PROPRIEDADEMEMBROCUBO ## Devolve o valor de uma propriedade de membro no cubo. Utilizada para validar a existência de um nome de membro no cubo e para devolver a propriedade especificada para esse membro.
13
+ CUBERANKEDMEMBER = MEMBROCLASSIFICADOCUBO ## Devolve o enésimo ou a classificação mais alta num conjunto. Utilizada para devolver um ou mais elementos num conjunto, tal como o melhor vendedor ou os 10 melhores alunos.
14
+ CUBESET = CONJUNTOCUBO ## Define um conjunto calculado de membros ou cadeias de identificação enviando uma expressão de conjunto para o cubo no servidor, que cria o conjunto e, em seguida, devolve o conjunto ao Microsoft Office Excel.
15
+ CUBESETCOUNT = CONTARCONJUNTOCUBO ## Devolve o número de itens num conjunto.
16
+ CUBEVALUE = VALORCUBO ## Devolve um valor agregado do cubo.
17
+
18
+
19
+ ##
20
+ ## Database functions Funções de base de dados
21
+ ##
22
+ DAVERAGE = BDMÉDIA ## Devolve a média das entradas da base de dados seleccionadas
23
+ DCOUNT = BDCONTAR ## Conta as células que contêm números numa base de dados
24
+ DCOUNTA = BDCONTAR.VAL ## Conta as células que não estejam em branco numa base de dados
25
+ DGET = BDOBTER ## Extrai de uma base de dados um único registo que corresponde aos critérios especificados
26
+ DMAX = BDMÁX ## Devolve o valor máximo das entradas da base de dados seleccionadas
27
+ DMIN = BDMÍN ## Devolve o valor mínimo das entradas da base de dados seleccionadas
28
+ DPRODUCT = BDMULTIPL ## Multiplica os valores de um determinado campo de registos que correspondem aos critérios numa base de dados
29
+ DSTDEV = BDDESVPAD ## Calcula o desvio-padrão com base numa amostra de entradas da base de dados seleccionadas
30
+ DSTDEVP = BDDESVPADP ## Calcula o desvio-padrão com base na população total das entradas da base de dados seleccionadas
31
+ DSUM = BDSOMA ## Adiciona os números na coluna de campo dos registos de base de dados que correspondem aos critérios
32
+ DVAR = BDVAR ## Calcula a variância com base numa amostra das entradas de base de dados seleccionadas
33
+ DVARP = BDVARP ## Calcula a variância com base na população total das entradas de base de dados seleccionadas
34
+
35
+
36
+ ##
37
+ ## Date and time functions Funções de data e hora
38
+ ##
39
+ DATE = DATA ## Devolve o número de série de uma determinada data
40
+ DATEVALUE = DATA.VALOR ## Converte uma data em forma de texto num número de série
41
+ DAY = DIA ## Converte um número de série num dia do mês
42
+ DAYS360 = DIAS360 ## Calcula o número de dias entre duas datas com base num ano com 360 dias
43
+ EDATE = DATAM ## Devolve um número de série de data que corresponde ao número de meses indicado antes ou depois da data de início
44
+ EOMONTH = FIMMÊS ## Devolve o número de série do último dia do mês antes ou depois de um número de meses especificado
45
+ HOUR = HORA ## Converte um número de série numa hora
46
+ MINUTE = MINUTO ## Converte um número de série num minuto
47
+ MONTH = MÊS ## Converte um número de série num mês
48
+ NETWORKDAYS = DIATRABALHOTOTAL ## Devolve o número total de dias úteis entre duas datas
49
+ NOW = AGORA ## Devolve o número de série da data e hora actuais
50
+ SECOND = SEGUNDO ## Converte um número de série num segundo
51
+ TIME = TEMPO ## Devolve o número de série de um determinado tempo
52
+ TIMEVALUE = VALOR.TEMPO ## Converte um tempo em forma de texto num número de série
53
+ TODAY = HOJE ## Devolve o número de série da data actual
54
+ WEEKDAY = DIA.SEMANA ## Converte um número de série num dia da semana
55
+ WEEKNUM = NÚMSEMANA ## Converte um número de série num número que representa o número da semana num determinado ano
56
+ WORKDAY = DIA.TRABALHO ## Devolve o número de série da data antes ou depois de um número de dias úteis especificado
57
+ YEAR = ANO ## Converte um número de série num ano
58
+ YEARFRAC = FRACÇÃOANO ## Devolve a fracção de ano que representa o número de dias inteiros entre a data_de_início e a data_de_fim
59
+
60
+
61
+ ##
62
+ ## Engineering functions Funções de engenharia
63
+ ##
64
+ BESSELI = BESSELI ## Devolve a função de Bessel modificada In(x)
65
+ BESSELJ = BESSELJ ## Devolve a função de Bessel Jn(x)
66
+ BESSELK = BESSELK ## Devolve a função de Bessel modificada Kn(x)
67
+ BESSELY = BESSELY ## Devolve a função de Bessel Yn(x)
68
+ BIN2DEC = BINADEC ## Converte um número binário em decimal
69
+ BIN2HEX = BINAHEX ## Converte um número binário em hexadecimal
70
+ BIN2OCT = BINAOCT ## Converte um número binário em octal
71
+ COMPLEX = COMPLEXO ## Converte coeficientes reais e imaginários num número complexo
72
+ CONVERT = CONVERTER ## Converte um número de um sistema de medida noutro
73
+ DEC2BIN = DECABIN ## Converte um número decimal em binário
74
+ DEC2HEX = DECAHEX ## Converte um número decimal em hexadecimal
75
+ DEC2OCT = DECAOCT ## Converte um número decimal em octal
76
+ DELTA = DELTA ## Testa se dois valores são iguais
77
+ ERF = FUNCERRO ## Devolve a função de erro
78
+ ERFC = FUNCERROCOMPL ## Devolve a função de erro complementar
79
+ GESTEP = DEGRAU ## Testa se um número é maior do que um valor limite
80
+ HEX2BIN = HEXABIN ## Converte um número hexadecimal em binário
81
+ HEX2DEC = HEXADEC ## Converte um número hexadecimal em decimal
82
+ HEX2OCT = HEXAOCT ## Converte um número hexadecimal em octal
83
+ IMABS = IMABS ## Devolve o valor absoluto (módulo) de um número complexo
84
+ IMAGINARY = IMAGINÁRIO ## Devolve o coeficiente imaginário de um número complexo
85
+ IMARGUMENT = IMARG ## Devolve o argumento Teta, um ângulo expresso em radianos
86
+ IMCONJUGATE = IMCONJ ## Devolve o conjugado complexo de um número complexo
87
+ IMCOS = IMCOS ## Devolve o co-seno de um número complexo
88
+ IMDIV = IMDIV ## Devolve o quociente de dois números complexos
89
+ IMEXP = IMEXP ## Devolve o exponencial de um número complexo
90
+ IMLN = IMLN ## Devolve o logaritmo natural de um número complexo
91
+ IMLOG10 = IMLOG10 ## Devolve o logaritmo de base 10 de um número complexo
92
+ IMLOG2 = IMLOG2 ## Devolve o logaritmo de base 2 de um número complexo
93
+ IMPOWER = IMPOT ## Devolve um número complexo elevado a uma potência inteira
94
+ IMPRODUCT = IMPROD ## Devolve o produto de números complexos
95
+ IMREAL = IMREAL ## Devolve o coeficiente real de um número complexo
96
+ IMSIN = IMSENO ## Devolve o seno de um número complexo
97
+ IMSQRT = IMRAIZ ## Devolve a raiz quadrada de um número complexo
98
+ IMSUB = IMSUBTR ## Devolve a diferença entre dois números complexos
99
+ IMSUM = IMSOMA ## Devolve a soma de números complexos
100
+ OCT2BIN = OCTABIN ## Converte um número octal em binário
101
+ OCT2DEC = OCTADEC ## Converte um número octal em decimal
102
+ OCT2HEX = OCTAHEX ## Converte um número octal em hexadecimal
103
+
104
+
105
+ ##
106
+ ## Financial functions Funções financeiras
107
+ ##
108
+ ACCRINT = JUROSACUM ## Devolve os juros acumulados de um título que paga juros periódicos
109
+ ACCRINTM = JUROSACUMV ## Devolve os juros acumulados de um título que paga juros no vencimento
110
+ AMORDEGRC = AMORDEGRC ## Devolve a depreciação correspondente a cada período contabilístico utilizando um coeficiente de depreciação
111
+ AMORLINC = AMORLINC ## Devolve a depreciação correspondente a cada período contabilístico
112
+ COUPDAYBS = CUPDIASINLIQ ## Devolve o número de dias entre o início do período do cupão e a data de regularização
113
+ COUPDAYS = CUPDIAS ## Devolve o número de dias no período do cupão que contém a data de regularização
114
+ COUPDAYSNC = CUPDIASPRÓX ## Devolve o número de dias entre a data de regularização e a data do cupão seguinte
115
+ COUPNCD = CUPDATAPRÓX ## Devolve a data do cupão seguinte após a data de regularização
116
+ COUPNUM = CUPNÚM ## Devolve o número de cupões a serem pagos entre a data de regularização e a data de vencimento
117
+ COUPPCD = CUPDATAANT ## Devolve a data do cupão anterior antes da data de regularização
118
+ CUMIPMT = PGTOJURACUM ## Devolve os juros cumulativos pagos entre dois períodos
119
+ CUMPRINC = PGTOCAPACUM ## Devolve o capital cumulativo pago a título de empréstimo entre dois períodos
120
+ DB = BD ## Devolve a depreciação de um activo relativo a um período especificado utilizando o método das quotas degressivas fixas
121
+ DDB = BDD ## Devolve a depreciação de um activo relativo a um período especificado utilizando o método das quotas degressivas duplas ou qualquer outro método especificado
122
+ DISC = DESC ## Devolve a taxa de desconto de um título
123
+ DOLLARDE = MOEDADEC ## Converte um preço em unidade monetária, expresso como uma fracção, num preço em unidade monetária, expresso como um número decimal
124
+ DOLLARFR = MOEDAFRA ## Converte um preço em unidade monetária, expresso como um número decimal, num preço em unidade monetária, expresso como uma fracção
125
+ DURATION = DURAÇÃO ## Devolve a duração anual de um título com pagamentos de juros periódicos
126
+ EFFECT = EFECTIVA ## Devolve a taxa de juros anual efectiva
127
+ FV = VF ## Devolve o valor futuro de um investimento
128
+ FVSCHEDULE = VFPLANO ## Devolve o valor futuro de um capital inicial após a aplicação de uma série de taxas de juro compostas
129
+ INTRATE = TAXAJUROS ## Devolve a taxa de juros de um título investido na totalidade
130
+ IPMT = IPGTO ## Devolve o pagamento dos juros de um investimento durante um determinado período
131
+ IRR = TIR ## Devolve a taxa de rentabilidade interna para uma série de fluxos monetários
132
+ ISPMT = É.PGTO ## Calcula os juros pagos durante um período específico de um investimento
133
+ MDURATION = MDURAÇÃO ## Devolve a duração modificada de Macauley de um título com um valor de paridade equivalente a € 100
134
+ MIRR = MTIR ## Devolve a taxa interna de rentabilidade em que os fluxos monetários positivos e negativos são financiados com taxas diferentes
135
+ NOMINAL = NOMINAL ## Devolve a taxa de juros nominal anual
136
+ NPER = NPER ## Devolve o número de períodos de um investimento
137
+ NPV = VAL ## Devolve o valor actual líquido de um investimento com base numa série de fluxos monetários periódicos e numa taxa de desconto
138
+ ODDFPRICE = PREÇOPRIMINC ## Devolve o preço por € 100 do valor nominal de um título com um período inicial incompleto
139
+ ODDFYIELD = LUCROPRIMINC ## Devolve o lucro de um título com um período inicial incompleto
140
+ ODDLPRICE = PREÇOÚLTINC ## Devolve o preço por € 100 do valor nominal de um título com um período final incompleto
141
+ ODDLYIELD = LUCROÚLTINC ## Devolve o lucro de um título com um período final incompleto
142
+ PMT = PGTO ## Devolve o pagamento periódico de uma anuidade
143
+ PPMT = PPGTO ## Devolve o pagamento sobre o capital de um investimento num determinado período
144
+ PRICE = PREÇO ## Devolve o preço por € 100 do valor nominal de um título que paga juros periódicos
145
+ PRICEDISC = PREÇODESC ## Devolve o preço por € 100 do valor nominal de um título descontado
146
+ PRICEMAT = PREÇOVENC ## Devolve o preço por € 100 do valor nominal de um título que paga juros no vencimento
147
+ PV = VA ## Devolve o valor actual de um investimento
148
+ RATE = TAXA ## Devolve a taxa de juros por período de uma anuidade
149
+ RECEIVED = RECEBER ## Devolve o montante recebido no vencimento de um título investido na totalidade
150
+ SLN = AMORT ## Devolve uma depreciação linear de um activo durante um período
151
+ SYD = AMORTD ## Devolve a depreciação por algarismos da soma dos anos de um activo durante um período especificado
152
+ TBILLEQ = OTN ## Devolve o lucro de um título equivalente a uma Obrigação do Tesouro
153
+ TBILLPRICE = OTNVALOR ## Devolve o preço por € 100 de valor nominal de uma Obrigação do Tesouro
154
+ TBILLYIELD = OTNLUCRO ## Devolve o lucro de uma Obrigação do Tesouro
155
+ VDB = BDV ## Devolve a depreciação de um activo relativo a um período específico ou parcial utilizando um método de quotas degressivas
156
+ XIRR = XTIR ## Devolve a taxa interna de rentabilidade de um plano de fluxos monetários que não seja necessariamente periódica
157
+ XNPV = XVAL ## Devolve o valor actual líquido de um plano de fluxos monetários que não seja necessariamente periódico
158
+ YIELD = LUCRO ## Devolve o lucro de um título que paga juros periódicos
159
+ YIELDDISC = LUCRODESC ## Devolve o lucro anual de um título emitido abaixo do valor nominal, por exemplo, uma Obrigação do Tesouro
160
+ YIELDMAT = LUCROVENC ## Devolve o lucro anual de um título que paga juros na data de vencimento
161
+
162
+
163
+ ##
164
+ ## Information functions Funções de informação
165
+ ##
166
+ CELL = CÉL ## Devolve informações sobre a formatação, localização ou conteúdo de uma célula
167
+ ERROR.TYPE = TIPO.ERRO ## Devolve um número correspondente a um tipo de erro
168
+ INFO = INFORMAÇÃO ## Devolve informações sobre o ambiente de funcionamento actual
169
+ ISBLANK = É.CÉL.VAZIA ## Devolve VERDADEIRO se o valor estiver em branco
170
+ ISERR = É.ERROS ## Devolve VERDADEIRO se o valor for um valor de erro diferente de #N/D
171
+ ISERROR = É.ERRO ## Devolve VERDADEIRO se o valor for um valor de erro
172
+ ISEVEN = ÉPAR ## Devolve VERDADEIRO se o número for par
173
+ ISLOGICAL = É.LÓGICO ## Devolve VERDADEIRO se o valor for lógico
174
+ ISNA = É.NÃO.DISP ## Devolve VERDADEIRO se o valor for o valor de erro #N/D
175
+ ISNONTEXT = É.NÃO.TEXTO ## Devolve VERDADEIRO se o valor não for texto
176
+ ISNUMBER = É.NÚM ## Devolve VERDADEIRO se o valor for um número
177
+ ISODD = ÉÍMPAR ## Devolve VERDADEIRO se o número for ímpar
178
+ ISREF = É.REF ## Devolve VERDADEIRO se o valor for uma referência
179
+ ISTEXT = É.TEXTO ## Devolve VERDADEIRO se o valor for texto
180
+ N = N ## Devolve um valor convertido num número
181
+ NA = NÃO.DISP ## Devolve o valor de erro #N/D
182
+ TYPE = TIPO ## Devolve um número que indica o tipo de dados de um valor
183
+
184
+
185
+ ##
186
+ ## Logical functions Funções lógicas
187
+ ##
188
+ AND = E ## Devolve VERDADEIRO se todos os respectivos argumentos corresponderem a VERDADEIRO
189
+ FALSE = FALSO ## Devolve o valor lógico FALSO
190
+ IF = SE ## Especifica um teste lógico a ser executado
191
+ IFERROR = SE.ERRO ## Devolve um valor definido pelo utilizador se ocorrer um erro na fórmula, e devolve o resultado da fórmula se não ocorrer nenhum erro
192
+ NOT = NÃO ## Inverte a lógica do respectivo argumento
193
+ OR = OU ## Devolve VERDADEIRO se qualquer argumento for VERDADEIRO
194
+ TRUE = VERDADEIRO ## Devolve o valor lógico VERDADEIRO
195
+
196
+
197
+ ##
198
+ ## Lookup and reference functions Funções de pesquisa e referência
199
+ ##
200
+ ADDRESS = ENDEREÇO ## Devolve uma referência a uma única célula numa folha de cálculo como texto
201
+ AREAS = ÁREAS ## Devolve o número de áreas numa referência
202
+ CHOOSE = SELECCIONAR ## Selecciona um valor a partir de uma lista de valores
203
+ COLUMN = COL ## Devolve o número da coluna de uma referência
204
+ COLUMNS = COLS ## Devolve o número de colunas numa referência
205
+ HLOOKUP = PROCH ## Procura na linha superior de uma matriz e devolve o valor da célula indicada
206
+ HYPERLINK = HIPERLIGAÇÃO ## Cria um atalho ou hiperligação que abre um documento armazenado num servidor de rede, numa intranet ou na Internet
207
+ INDEX = ÍNDICE ## Utiliza um índice para escolher um valor de uma referência ou de uma matriz
208
+ INDIRECT = INDIRECTO ## Devolve uma referência indicada por um valor de texto
209
+ LOOKUP = PROC ## Procura valores num vector ou numa matriz
210
+ MATCH = CORRESP ## Procura valores numa referência ou numa matriz
211
+ OFFSET = DESLOCAMENTO ## Devolve o deslocamento de referência de uma determinada referência
212
+ ROW = LIN ## Devolve o número da linha de uma referência
213
+ ROWS = LINS ## Devolve o número de linhas numa referência
214
+ RTD = RTD ## Obtém dados em tempo real a partir de um programa que suporte automatização COM (automatização: modo de trabalhar com objectos de uma aplicação a partir de outra aplicação ou ferramenta de desenvolvimento. Anteriormente conhecida como automatização OLE, a automatização é uma norma da indústria de software e uma funcionalidade COM (Component Object Model).)
215
+ TRANSPOSE = TRANSPOR ## Devolve a transposição de uma matriz
216
+ VLOOKUP = PROCV ## Procura na primeira coluna de uma matriz e percorre a linha para devolver o valor de uma célula
217
+
218
+
219
+ ##
220
+ ## Math and trigonometry functions Funções matemáticas e trigonométricas
221
+ ##
222
+ ABS = ABS ## Devolve o valor absoluto de um número
223
+ ACOS = ACOS ## Devolve o arco de co-seno de um número
224
+ ACOSH = ACOSH ## Devolve o co-seno hiperbólico inverso de um número
225
+ ASIN = ASEN ## Devolve o arco de seno de um número
226
+ ASINH = ASENH ## Devolve o seno hiperbólico inverso de um número
227
+ ATAN = ATAN ## Devolve o arco de tangente de um número
228
+ ATAN2 = ATAN2 ## Devolve o arco de tangente das coordenadas x e y
229
+ ATANH = ATANH ## Devolve a tangente hiperbólica inversa de um número
230
+ CEILING = ARRED.EXCESSO ## Arredonda um número para o número inteiro mais próximo ou para o múltiplo de significância mais próximo
231
+ COMBIN = COMBIN ## Devolve o número de combinações de um determinado número de objectos
232
+ COS = COS ## Devolve o co-seno de um número
233
+ COSH = COSH ## Devolve o co-seno hiperbólico de um número
234
+ DEGREES = GRAUS ## Converte radianos em graus
235
+ EVEN = PAR ## Arredonda um número por excesso para o número inteiro mais próximo
236
+ EXP = EXP ## Devolve e elevado à potência de um determinado número
237
+ FACT = FACTORIAL ## Devolve o factorial de um número
238
+ FACTDOUBLE = FACTDUPLO ## Devolve o factorial duplo de um número
239
+ FLOOR = ARRED.DEFEITO ## Arredonda um número por defeito até zero
240
+ GCD = MDC ## Devolve o maior divisor comum
241
+ INT = INT ## Arredonda um número por defeito para o número inteiro mais próximo
242
+ LCM = MMC ## Devolve o mínimo múltiplo comum
243
+ LN = LN ## Devolve o logaritmo natural de um número
244
+ LOG = LOG ## Devolve o logaritmo de um número com uma base especificada
245
+ LOG10 = LOG10 ## Devolve o logaritmo de base 10 de um número
246
+ MDETERM = MATRIZ.DETERM ## Devolve o determinante matricial de uma matriz
247
+ MINVERSE = MATRIZ.INVERSA ## Devolve o inverso matricial de uma matriz
248
+ MMULT = MATRIZ.MULT ## Devolve o produto matricial de duas matrizes
249
+ MOD = RESTO ## Devolve o resto da divisão
250
+ MROUND = MARRED ## Devolve um número arredondado para o múltiplo pretendido
251
+ MULTINOMIAL = POLINOMIAL ## Devolve o polinomial de um conjunto de números
252
+ ODD = ÍMPAR ## Arredonda por excesso um número para o número inteiro ímpar mais próximo
253
+ PI = PI ## Devolve o valor de pi
254
+ POWER = POTÊNCIA ## Devolve o resultado de um número elevado a uma potência
255
+ PRODUCT = PRODUTO ## Multiplica os respectivos argumentos
256
+ QUOTIENT = QUOCIENTE ## Devolve a parte inteira de uma divisão
257
+ RADIANS = RADIANOS ## Converte graus em radianos
258
+ RAND = ALEATÓRIO ## Devolve um número aleatório entre 0 e 1
259
+ RANDBETWEEN = ALEATÓRIOENTRE ## Devolve um número aleatório entre os números especificados
260
+ ROMAN = ROMANO ## Converte um número árabe em romano, como texto
261
+ ROUND = ARRED ## Arredonda um número para um número de dígitos especificado
262
+ ROUNDDOWN = ARRED.PARA.BAIXO ## Arredonda um número por defeito até zero
263
+ ROUNDUP = ARRED.PARA.CIMA ## Arredonda um número por excesso, afastando-o de zero
264
+ SERIESSUM = SOMASÉRIE ## Devolve a soma de uma série de potências baseada na fórmula
265
+ SIGN = SINAL ## Devolve o sinal de um número
266
+ SIN = SEN ## Devolve o seno de um determinado ângulo
267
+ SINH = SENH ## Devolve o seno hiperbólico de um número
268
+ SQRT = RAIZQ ## Devolve uma raiz quadrada positiva
269
+ SQRTPI = RAIZPI ## Devolve a raiz quadrada de (núm * pi)
270
+ SUBTOTAL = SUBTOTAL ## Devolve um subtotal numa lista ou base de dados
271
+ SUM = SOMA ## Adiciona os respectivos argumentos
272
+ SUMIF = SOMA.SE ## Adiciona as células especificadas por um determinado critério
273
+ SUMIFS = SOMA.SE.S ## Adiciona as células num intervalo que cumpre vários critérios
274
+ SUMPRODUCT = SOMARPRODUTO ## Devolve a soma dos produtos de componentes de matrizes correspondentes
275
+ SUMSQ = SOMARQUAD ## Devolve a soma dos quadrados dos argumentos
276
+ SUMX2MY2 = SOMAX2DY2 ## Devolve a soma da diferença dos quadrados dos valores correspondentes em duas matrizes
277
+ SUMX2PY2 = SOMAX2SY2 ## Devolve a soma da soma dos quadrados dos valores correspondentes em duas matrizes
278
+ SUMXMY2 = SOMAXMY2 ## Devolve a soma dos quadrados da diferença dos valores correspondentes em duas matrizes
279
+ TAN = TAN ## Devolve a tangente de um número
280
+ TANH = TANH ## Devolve a tangente hiperbólica de um número
281
+ TRUNC = TRUNCAR ## Trunca um número para um número inteiro
282
+
283
+
284
+ ##
285
+ ## Statistical functions Funções estatísticas
286
+ ##
287
+ AVEDEV = DESV.MÉDIO ## Devolve a média aritmética dos desvios absolutos à média dos pontos de dados
288
+ AVERAGE = MÉDIA ## Devolve a média dos respectivos argumentos
289
+ AVERAGEA = MÉDIAA ## Devolve uma média dos respectivos argumentos, incluindo números, texto e valores lógicos
290
+ AVERAGEIF = MÉDIA.SE ## Devolve a média aritmética de todas as células num intervalo que cumprem determinado critério
291
+ AVERAGEIFS = MÉDIA.SE.S ## Devolve a média aritmética de todas as células que cumprem múltiplos critérios
292
+ BETADIST = DISTBETA ## Devolve a função de distribuição cumulativa beta
293
+ BETAINV = BETA.ACUM.INV ## Devolve o inverso da função de distribuição cumulativa relativamente a uma distribuição beta específica
294
+ BINOMDIST = DISTRBINOM ## Devolve a probabilidade de distribuição binomial de termo individual
295
+ CHIDIST = DIST.CHI ## Devolve a probabilidade unicaudal da distribuição qui-quadrada
296
+ CHIINV = INV.CHI ## Devolve o inverso da probabilidade unicaudal da distribuição qui-quadrada
297
+ CHITEST = TESTE.CHI ## Devolve o teste para independência
298
+ CONFIDENCE = INT.CONFIANÇA ## Devolve o intervalo de confiança correspondente a uma média de população
299
+ CORREL = CORREL ## Devolve o coeficiente de correlação entre dois conjuntos de dados
300
+ COUNT = CONTAR ## Conta os números que existem na lista de argumentos
301
+ COUNTA = CONTAR.VAL ## Conta os valores que existem na lista de argumentos
302
+ COUNTBLANK = CONTAR.VAZIO ## Conta o número de células em branco num intervalo
303
+ COUNTIF = CONTAR.SE ## Calcula o número de células num intervalo que corresponde aos critérios determinados
304
+ COUNTIFS = CONTAR.SE.S ## Conta o número de células num intervalo que cumprem múltiplos critérios
305
+ COVAR = COVAR ## Devolve a covariância, que é a média dos produtos de desvios de pares
306
+ CRITBINOM = CRIT.BINOM ## Devolve o menor valor em que a distribuição binomial cumulativa é inferior ou igual a um valor de critério
307
+ DEVSQ = DESVQ ## Devolve a soma dos quadrados dos desvios
308
+ EXPONDIST = DISTEXPON ## Devolve a distribuição exponencial
309
+ FDIST = DISTF ## Devolve a distribuição da probabilidade F
310
+ FINV = INVF ## Devolve o inverso da distribuição da probabilidade F
311
+ FISHER = FISHER ## Devolve a transformação Fisher
312
+ FISHERINV = FISHERINV ## Devolve o inverso da transformação Fisher
313
+ FORECAST = PREVISÃO ## Devolve um valor ao longo de uma tendência linear
314
+ FREQUENCY = FREQUÊNCIA ## Devolve uma distribuição de frequência como uma matriz vertical
315
+ FTEST = TESTEF ## Devolve o resultado de um teste F
316
+ GAMMADIST = DISTGAMA ## Devolve a distribuição gama
317
+ GAMMAINV = INVGAMA ## Devolve o inverso da distribuição gama cumulativa
318
+ GAMMALN = LNGAMA ## Devolve o logaritmo natural da função gama, Γ(x)
319
+ GEOMEAN = MÉDIA.GEOMÉTRICA ## Devolve a média geométrica
320
+ GROWTH = CRESCIMENTO ## Devolve valores ao longo de uma tendência exponencial
321
+ HARMEAN = MÉDIA.HARMÓNICA ## Devolve a média harmónica
322
+ HYPGEOMDIST = DIST.HIPERGEOM ## Devolve a distribuição hipergeométrica
323
+ INTERCEPT = INTERCEPTAR ## Devolve a intercepção da linha de regressão linear
324
+ KURT = CURT ## Devolve a curtose de um conjunto de dados
325
+ LARGE = MAIOR ## Devolve o maior valor k-ésimo de um conjunto de dados
326
+ LINEST = PROJ.LIN ## Devolve os parâmetros de uma tendência linear
327
+ LOGEST = PROJ.LOG ## Devolve os parâmetros de uma tendência exponencial
328
+ LOGINV = INVLOG ## Devolve o inverso da distribuição normal logarítmica
329
+ LOGNORMDIST = DIST.NORMALLOG ## Devolve a distribuição normal logarítmica cumulativa
330
+ MAX = MÁXIMO ## Devolve o valor máximo numa lista de argumentos
331
+ MAXA = MÁXIMOA ## Devolve o valor máximo numa lista de argumentos, incluindo números, texto e valores lógicos
332
+ MEDIAN = MED ## Devolve a mediana dos números indicados
333
+ MIN = MÍNIMO ## Devolve o valor mínimo numa lista de argumentos
334
+ MINA = MÍNIMOA ## Devolve o valor mínimo numa lista de argumentos, incluindo números, texto e valores lógicos
335
+ MODE = MODA ## Devolve o valor mais comum num conjunto de dados
336
+ NEGBINOMDIST = DIST.BIN.NEG ## Devolve a distribuição binominal negativa
337
+ NORMDIST = DIST.NORM ## Devolve a distribuição cumulativa normal
338
+ NORMINV = INV.NORM ## Devolve o inverso da distribuição cumulativa normal
339
+ NORMSDIST = DIST.NORMP ## Devolve a distribuição cumulativa normal padrão
340
+ NORMSINV = INV.NORMP ## Devolve o inverso da distribuição cumulativa normal padrão
341
+ PEARSON = PEARSON ## Devolve o coeficiente de correlação momento/produto de Pearson
342
+ PERCENTILE = PERCENTIL ## Devolve o k-ésimo percentil de valores num intervalo
343
+ PERCENTRANK = ORDEM.PERCENTUAL ## Devolve a ordem percentual de um valor num conjunto de dados
344
+ PERMUT = PERMUTAR ## Devolve o número de permutações de um determinado número de objectos
345
+ POISSON = POISSON ## Devolve a distribuição de Poisson
346
+ PROB = PROB ## Devolve a probabilidade dos valores num intervalo se encontrarem entre dois limites
347
+ QUARTILE = QUARTIL ## Devolve o quartil de um conjunto de dados
348
+ RANK = ORDEM ## Devolve a ordem de um número numa lista numérica
349
+ RSQ = RQUAD ## Devolve o quadrado do coeficiente de correlação momento/produto de Pearson
350
+ SKEW = DISTORÇÃO ## Devolve a distorção de uma distribuição
351
+ SLOPE = DECLIVE ## Devolve o declive da linha de regressão linear
352
+ SMALL = MENOR ## Devolve o menor valor de k-ésimo de um conjunto de dados
353
+ STANDARDIZE = NORMALIZAR ## Devolve um valor normalizado
354
+ STDEV = DESVPAD ## Calcula o desvio-padrão com base numa amostra
355
+ STDEVA = DESVPADA ## Calcula o desvio-padrão com base numa amostra, incluindo números, texto e valores lógicos
356
+ STDEVP = DESVPADP ## Calcula o desvio-padrão com base na população total
357
+ STDEVPA = DESVPADPA ## Calcula o desvio-padrão com base na população total, incluindo números, texto e valores lógicos
358
+ STEYX = EPADYX ## Devolve o erro-padrão do valor de y previsto para cada x na regressão
359
+ TDIST = DISTT ## Devolve a distribuição t de Student
360
+ TINV = INVT ## Devolve o inverso da distribuição t de Student
361
+ TREND = TENDÊNCIA ## Devolve valores ao longo de uma tendência linear
362
+ TRIMMEAN = MÉDIA.INTERNA ## Devolve a média do interior de um conjunto de dados
363
+ TTEST = TESTET ## Devolve a probabilidade associada ao teste t de Student
364
+ VAR = VAR ## Calcula a variância com base numa amostra
365
+ VARA = VARA ## Calcula a variância com base numa amostra, incluindo números, texto e valores lógicos
366
+ VARP = VARP ## Calcula a variância com base na população total
367
+ VARPA = VARPA ## Calcula a variância com base na população total, incluindo números, texto e valores lógicos
368
+ WEIBULL = WEIBULL ## Devolve a distribuição Weibull
369
+ ZTEST = TESTEZ ## Devolve o valor de probabilidade unicaudal de um teste-z
370
+
371
+
372
+ ##
373
+ ## Text functions Funções de texto
374
+ ##
375
+ ASC = ASC ## Altera letras ou katakana de largura total (byte duplo) numa cadeia de caracteres para caracteres de largura média (byte único)
376
+ BAHTTEXT = TEXTO.BAHT ## Converte um número em texto, utilizando o formato monetário ß (baht)
377
+ CHAR = CARÁCT ## Devolve o carácter especificado pelo número de código
378
+ CLEAN = LIMPAR ## Remove do texto todos os caracteres não imprimíveis
379
+ CODE = CÓDIGO ## Devolve um código numérico correspondente ao primeiro carácter numa cadeia de texto
380
+ CONCATENATE = CONCATENAR ## Agrupa vários itens de texto num único item de texto
381
+ DOLLAR = MOEDA ## Converte um número em texto, utilizando o formato monetário € (Euro)
382
+ EXACT = EXACTO ## Verifica se dois valores de texto são idênticos
383
+ FIND = LOCALIZAR ## Localiza um valor de texto dentro de outro (sensível às maiúsculas e minúsculas)
384
+ FINDB = LOCALIZARB ## Localiza um valor de texto dentro de outro (sensível às maiúsculas e minúsculas)
385
+ FIXED = FIXA ## Formata um número como texto com um número fixo de decimais
386
+ JIS = JIS ## Altera letras ou katakana de largura média (byte único) numa cadeia de caracteres para caracteres de largura total (byte duplo)
387
+ LEFT = ESQUERDA ## Devolve os caracteres mais à esquerda de um valor de texto
388
+ LEFTB = ESQUERDAB ## Devolve os caracteres mais à esquerda de um valor de texto
389
+ LEN = NÚM.CARACT ## Devolve o número de caracteres de uma cadeia de texto
390
+ LENB = NÚM.CARACTB ## Devolve o número de caracteres de uma cadeia de texto
391
+ LOWER = MINÚSCULAS ## Converte o texto em minúsculas
392
+ MID = SEG.TEXTO ## Devolve um número específico de caracteres de uma cadeia de texto, a partir da posição especificada
393
+ MIDB = SEG.TEXTOB ## Devolve um número específico de caracteres de uma cadeia de texto, a partir da posição especificada
394
+ PHONETIC = FONÉTICA ## Retira os caracteres fonéticos (furigana) de uma cadeia de texto
395
+ PROPER = INICIAL.MAIÚSCULA ## Coloca em maiúsculas a primeira letra de cada palavra de um valor de texto
396
+ REPLACE = SUBSTITUIR ## Substitui caracteres no texto
397
+ REPLACEB = SUBSTITUIRB ## Substitui caracteres no texto
398
+ REPT = REPETIR ## Repete texto um determinado número de vezes
399
+ RIGHT = DIREITA ## Devolve os caracteres mais à direita de um valor de texto
400
+ RIGHTB = DIREITAB ## Devolve os caracteres mais à direita de um valor de texto
401
+ SEARCH = PROCURAR ## Localiza um valor de texto dentro de outro (não sensível a maiúsculas e minúsculas)
402
+ SEARCHB = PROCURARB ## Localiza um valor de texto dentro de outro (não sensível a maiúsculas e minúsculas)
403
+ SUBSTITUTE = SUBST ## Substitui texto novo por texto antigo numa cadeia de texto
404
+ T = T ## Converte os respectivos argumentos em texto
405
+ TEXT = TEXTO ## Formata um número e converte-o em texto
406
+ TRIM = COMPACTAR ## Remove espaços do texto
407
+ UPPER = MAIÚSCULAS ## Converte texto em maiúsculas
408
+ VALUE = VALOR ## Converte um argumento de texto num número
lib/phpExcel/PHPExcel/locale/ru/config CHANGED
File without changes
lib/phpExcel/PHPExcel/locale/ru/functions CHANGED
File without changes
lib/phpExcel/PHPExcel/locale/sv/config CHANGED
File without changes
lib/phpExcel/PHPExcel/locale/sv/functions CHANGED
@@ -1,408 +1,408 @@
1
- ##
2
- ## Add-in and Automation functions Tilläggs- och automatiseringsfunktioner
3
- ##
4
- GETPIVOTDATA = HÄMTA.PIVOTDATA ## Returnerar data som lagrats i en pivottabellrapport
5
-
6
-
7
- ##
8
- ## Cube functions Kubfunktioner
9
- ##
10
- CUBEKPIMEMBER = KUBKPIMEDLEM ## Returnerar namn, egenskap och mått för en KPI och visar namnet och egenskapen i cellen. En KPI, eller prestandaindikator, är ett kvantifierbart mått, t.ex. månatlig bruttovinst eller personalomsättning per kvartal, som används för att analysera ett företags resultat.
11
- CUBEMEMBER = KUBMEDLEM ## Returnerar en medlem eller ett par i en kubhierarki. Används för att verifiera att medlemmen eller paret finns i kuben.
12
- CUBEMEMBERPROPERTY = KUBMEDLEMSEGENSKAP ## Returnerar värdet för en medlemsegenskap i kuben. Används för att verifiera att ett medlemsnamn finns i kuben, samt för att returnera den angivna egenskapen för medlemmen.
13
- CUBERANKEDMEMBER = KUBRANGORDNADMEDLEM ## Returnerar den n:te, eller rangordnade, medlemmen i en uppsättning. Används för att returnera ett eller flera element i en uppsättning, till exempelvis den bästa försäljaren eller de tio bästa eleverna.
14
- CUBESET = KUBINSTÄLLNING ## Definierar en beräknad uppsättning medlemmar eller par genom att skicka ett bestämt uttryck till kuben på servern, som skapar uppsättningen och sedan returnerar den till Microsoft Office Excel.
15
- CUBESETCOUNT = KUBINSTÄLLNINGANTAL ## Returnerar antalet objekt i en uppsättning.
16
- CUBEVALUE = KUBVÄRDE ## Returnerar ett mängdvärde från en kub.
17
-
18
-
19
- ##
20
- ## Database functions Databasfunktioner
21
- ##
22
- DAVERAGE = DMEDEL ## Returnerar medelvärdet av databasposterna
23
- DCOUNT = DANTAL ## Räknar antalet celler som innehåller tal i en databas
24
- DCOUNTA = DANTALV ## Räknar ifyllda celler i en databas
25
- DGET = DHÄMTA ## Hämtar en enstaka post från en databas som uppfyller de angivna villkoren
26
- DMAX = DMAX ## Returnerar det största värdet från databasposterna
27
- DMIN = DMIN ## Returnerar det minsta värdet från databasposterna
28
- DPRODUCT = DPRODUKT ## Multiplicerar värdena i ett visst fält i poster som uppfyller villkoret
29
- DSTDEV = DSTDAV ## Uppskattar standardavvikelsen baserat på ett urval av databasposterna
30
- DSTDEVP = DSTDAVP ## Beräknar standardavvikelsen utifrån hela populationen av valda databasposter
31
- DSUM = DSUMMA ## Summerar talen i kolumnfält i databasposter som uppfyller villkoret
32
- DVAR = DVARIANS ## Uppskattar variansen baserat på ett urval av databasposterna
33
- DVARP = DVARIANSP ## Beräknar variansen utifrån hela populationen av valda databasposter
34
-
35
-
36
- ##
37
- ## Date and time functions Tid- och datumfunktioner
38
- ##
39
- DATE = DATUM ## Returnerar ett serienummer för ett visst datum
40
- DATEVALUE = DATUMVÄRDE ## Konverterar ett datum i textformat till ett serienummer
41
- DAY = DAG ## Konverterar ett serienummer till dag i månaden
42
- DAYS360 = DAGAR360 ## Beräknar antalet dagar mellan två datum baserat på ett 360-dagarsår
43
- EDATE = EDATUM ## Returnerar serienumret för ett datum som infaller ett visst antal månader före eller efter startdatumet
44
- EOMONTH = SLUTMÅNAD ## Returnerar serienumret för sista dagen i månaden ett visst antal månader tidigare eller senare
45
- HOUR = TIMME ## Konverterar ett serienummer till en timme
46
- MINUTE = MINUT ## Konverterar ett serienummer till en minut
47
- MONTH = MÅNAD ## Konverterar ett serienummer till en månad
48
- NETWORKDAYS = NETTOARBETSDAGAR ## Returnerar antalet hela arbetsdagar mellan två datum
49
- NOW = NU ## Returnerar serienumret för dagens datum och aktuell tid
50
- SECOND = SEKUND ## Konverterar ett serienummer till en sekund
51
- TIME = KLOCKSLAG ## Returnerar serienumret för en viss tid
52
- TIMEVALUE = TIDVÄRDE ## Konverterar en tid i textformat till ett serienummer
53
- TODAY = IDAG ## Returnerar serienumret för dagens datum
54
- WEEKDAY = VECKODAG ## Konverterar ett serienummer till en dag i veckan
55
- WEEKNUM = VECKONR ## Konverterar ett serienummer till ett veckonummer
56
- WORKDAY = ARBETSDAGAR ## Returnerar serienumret för ett datum ett visst antal arbetsdagar tidigare eller senare
57
- YEAR = ÅR ## Konverterar ett serienummer till ett år
58
- YEARFRAC = ÅRDEL ## Returnerar en del av ett år som representerar antalet hela dagar mellan start- och slutdatum
59
-
60
-
61
- ##
62
- ## Engineering functions Tekniska funktioner
63
- ##
64
- BESSELI = BESSELI ## Returnerar den modifierade Bessel-funktionen In(x)
65
- BESSELJ = BESSELJ ## Returnerar Bessel-funktionen Jn(x)
66
- BESSELK = BESSELK ## Returnerar den modifierade Bessel-funktionen Kn(x)
67
- BESSELY = BESSELY ## Returnerar Bessel-funktionen Yn(x)
68
- BIN2DEC = BIN.TILL.DEC ## Omvandlar ett binärt tal till decimalt
69
- BIN2HEX = BIN.TILL.HEX ## Omvandlar ett binärt tal till hexadecimalt
70
- BIN2OCT = BIN.TILL.OKT ## Omvandlar ett binärt tal till oktalt
71
- COMPLEX = KOMPLEX ## Omvandlar reella och imaginära koefficienter till ett komplext tal
72
- CONVERT = KONVERTERA ## Omvandlar ett tal från ett måttsystem till ett annat
73
- DEC2BIN = DEC.TILL.BIN ## Omvandlar ett decimalt tal till binärt
74
- DEC2HEX = DEC.TILL.HEX ## Omvandlar ett decimalt tal till hexadecimalt
75
- DEC2OCT = DEC.TILL.OKT ## Omvandlar ett decimalt tal till oktalt
76
- DELTA = DELTA ## Testar om två värden är lika
77
- ERF = FELF ## Returnerar felfunktionen
78
- ERFC = FELFK ## Returnerar den komplementära felfunktionen
79
- GESTEP = SLSTEG ## Testar om ett tal är större än ett tröskelvärde
80
- HEX2BIN = HEX.TILL.BIN ## Omvandlar ett hexadecimalt tal till binärt
81
- HEX2DEC = HEX.TILL.DEC ## Omvandlar ett hexadecimalt tal till decimalt
82
- HEX2OCT = HEX.TILL.OKT ## Omvandlar ett hexadecimalt tal till oktalt
83
- IMABS = IMABS ## Returnerar absolutvärdet (modulus) för ett komplext tal
84
- IMAGINARY = IMAGINÄR ## Returnerar den imaginära koefficienten för ett komplext tal
85
- IMARGUMENT = IMARGUMENT ## Returnerar det komplexa talets argument, en vinkel uttryckt i radianer
86
- IMCONJUGATE = IMKONJUGAT ## Returnerar det komplexa talets konjugat
87
- IMCOS = IMCOS ## Returnerar cosinus för ett komplext tal
88
- IMDIV = IMDIV ## Returnerar kvoten för två komplexa tal
89
- IMEXP = IMEUPPHÖJT ## Returnerar exponenten för ett komplext tal
90
- IMLN = IMLN ## Returnerar den naturliga logaritmen för ett komplext tal
91
- IMLOG10 = IMLOG10 ## Returnerar 10-logaritmen för ett komplext tal
92
- IMLOG2 = IMLOG2 ## Returnerar 2-logaritmen för ett komplext tal
93
- IMPOWER = IMUPPHÖJT ## Returnerar ett komplext tal upphöjt till en exponent
94
- IMPRODUCT = IMPRODUKT ## Returnerar produkten av komplexa tal
95
- IMREAL = IMREAL ## Returnerar den reella koefficienten för ett komplext tal
96
- IMSIN = IMSIN ## Returnerar sinus för ett komplext tal
97
- IMSQRT = IMROT ## Returnerar kvadratroten av ett komplext tal
98
- IMSUB = IMDIFF ## Returnerar differensen mellan två komplexa tal
99
- IMSUM = IMSUM ## Returnerar summan av komplexa tal
100
- OCT2BIN = OKT.TILL.BIN ## Omvandlar ett oktalt tal till binärt
101
- OCT2DEC = OKT.TILL.DEC ## Omvandlar ett oktalt tal till decimalt
102
- OCT2HEX = OKT.TILL.HEX ## Omvandlar ett oktalt tal till hexadecimalt
103
-
104
-
105
- ##
106
- ## Financial functions Finansiella funktioner
107
- ##
108
- ACCRINT = UPPLRÄNTA ## Returnerar den upplupna räntan för värdepapper med periodisk ränta
109
- ACCRINTM = UPPLOBLRÄNTA ## Returnerar den upplupna räntan för ett värdepapper som ger avkastning på förfallodagen
110
- AMORDEGRC = AMORDEGRC ## Returnerar avskrivningen för varje redovisningsperiod med hjälp av en avskrivningskoefficient
111
- AMORLINC = AMORLINC ## Returnerar avskrivningen för varje redovisningsperiod
112
- COUPDAYBS = KUPDAGBB ## Returnerar antal dagar från början av kupongperioden till likviddagen
113
- COUPDAYS = KUPDAGARS ## Returnerar antalet dagar i kupongperioden som innehåller betalningsdatumet
114
- COUPDAYSNC = KUPDAGNK ## Returnerar antalet dagar från betalningsdatumet till nästa kupongdatum
115
- COUPNCD = KUPNKD ## Returnerar nästa kupongdatum efter likviddagen
116
- COUPNUM = KUPANT ## Returnerar kuponger som förfaller till betalning mellan likviddagen och förfallodagen
117
- COUPPCD = KUPFKD ## Returnerar föregående kupongdatum före likviddagen
118
- CUMIPMT = KUMRÄNTA ## Returnerar den ackumulerade räntan som betalats mellan två perioder
119
- CUMPRINC = KUMPRIS ## Returnerar det ackumulerade kapitalbeloppet som betalats på ett lån mellan två perioder
120
- DB = DB ## Returnerar avskrivningen för en tillgång under en angiven tid enligt metoden för fast degressiv avskrivning
121
- DDB = DEGAVSKR ## Returnerar en tillgångs värdeminskning under en viss period med hjälp av dubbel degressiv avskrivning eller någon annan metod som du anger
122
- DISC = DISK ## Returnerar diskonteringsräntan för ett värdepapper
123
- DOLLARDE = DECTAL ## Omvandlar ett pris uttryckt som ett bråk till ett decimaltal
124
- DOLLARFR = BRÅK ## Omvandlar ett pris i kronor uttryckt som ett decimaltal till ett bråk
125
- DURATION = LÖPTID ## Returnerar den årliga löptiden för en säkerhet med periodiska räntebetalningar
126
- EFFECT = EFFRÄNTA ## Returnerar den årliga effektiva räntesatsen
127
- FV = SLUTVÄRDE ## Returnerar det framtida värdet på en investering
128
- FVSCHEDULE = FÖRRÄNTNING ## Returnerar det framtida värdet av ett begynnelsekapital beräknat på olika räntenivåer
129
- INTRATE = ÅRSRÄNTA ## Returnerar räntesatsen för ett betalt värdepapper
130
- IPMT = RBETALNING ## Returnerar räntedelen av en betalning för en given period
131
- IRR = IR ## Returnerar internräntan för en serie betalningar
132
- ISPMT = RALÅN ## Beräknar räntan som har betalats under en specifik betalningsperiod
133
- MDURATION = MLÖPTID ## Returnerar den modifierade Macauley-löptiden för ett värdepapper med det antagna nominella värdet 100 kr
134
- MIRR = MODIR ## Returnerar internräntan där positiva och negativa betalningar finansieras med olika räntor
135
- NOMINAL = NOMRÄNTA ## Returnerar den årliga nominella räntesatsen
136
- NPER = PERIODER ## Returnerar antalet perioder för en investering
137
- NPV = NETNUVÄRDE ## Returnerar nuvärdet av en serie periodiska betalningar vid en given diskonteringsränta
138
- ODDFPRICE = UDDAFPRIS ## Returnerar priset per 100 kr nominellt värde för ett värdepapper med en udda första period
139
- ODDFYIELD = UDDAFAVKASTNING ## Returnerar avkastningen för en säkerhet med en udda första period
140
- ODDLPRICE = UDDASPRIS ## Returnerar priset per 100 kr nominellt värde för ett värdepapper med en udda sista period
141
- ODDLYIELD = UDDASAVKASTNING ## Returnerar avkastningen för en säkerhet med en udda sista period
142
- PMT = BETALNING ## Returnerar den periodiska betalningen för en annuitet
143
- PPMT = AMORT ## Returnerar amorteringsdelen av en annuitetsbetalning för en given period
144
- PRICE = PRIS ## Returnerar priset per 100 kr nominellt värde för ett värdepapper som ger periodisk ränta
145
- PRICEDISC = PRISDISK ## Returnerar priset per 100 kr nominellt värde för ett diskonterat värdepapper
146
- PRICEMAT = PRISFÖRF ## Returnerar priset per 100 kr nominellt värde för ett värdepapper som ger ränta på förfallodagen
147
- PV = PV ## Returnerar nuvärdet av en serie lika stora periodiska betalningar
148
- RATE = RÄNTA ## Returnerar räntesatsen per period i en annuitet
149
- RECEIVED = BELOPP ## Returnerar beloppet som utdelas på förfallodagen för ett betalat värdepapper
150
- SLN = LINAVSKR ## Returnerar den linjära avskrivningen för en tillgång under en period
151
- SYD = ÅRSAVSKR ## Returnerar den årliga avskrivningssumman för en tillgång under en angiven period
152
- TBILLEQ = SSVXEKV ## Returnerar avkastningen motsvarande en obligation för en statsskuldväxel
153
- TBILLPRICE = SSVXPRIS ## Returnerar priset per 100 kr nominellt värde för en statsskuldväxel
154
- TBILLYIELD = SSVXRÄNTA ## Returnerar avkastningen för en statsskuldväxel
155
- VDB = VDEGRAVSKR ## Returnerar avskrivningen för en tillgång under en angiven period (med degressiv avskrivning)
156
- XIRR = XIRR ## Returnerar internräntan för en serie betalningar som inte nödvändigtvis är periodiska
157
- XNPV = XNUVÄRDE ## Returnerar det nuvarande nettovärdet för en serie betalningar som inte nödvändigtvis är periodiska
158
- YIELD = NOMAVK ## Returnerar avkastningen för ett värdepapper som ger periodisk ränta
159
- YIELDDISC = NOMAVKDISK ## Returnerar den årliga avkastningen för diskonterade värdepapper, exempelvis en statsskuldväxel
160
- YIELDMAT = NOMAVKFÖRF ## Returnerar den årliga avkastningen för ett värdepapper som ger ränta på förfallodagen
161
-
162
-
163
- ##
164
- ## Information functions Informationsfunktioner
165
- ##
166
- CELL = CELL ## Returnerar information om formatering, plats och innehåll i en cell
167
- ERROR.TYPE = FEL.TYP ## Returnerar ett tal som motsvarar ett felvärde
168
- INFO = INFO ## Returnerar information om operativsystemet
169
- ISBLANK = ÄRREF ## Returnerar SANT om värdet är tomt
170
- ISERR = Ä ## Returnerar SANT om värdet är ett felvärde annat än #SAKNAS!
171
- ISERROR = ÄRFEL ## Returnerar SANT om värdet är ett felvärde
172
- ISEVEN = ÄRJÄMN ## Returnerar SANT om talet är jämnt
173
- ISLOGICAL = ÄREJTEXT ## Returnerar SANT om värdet är ett logiskt värde
174
- ISNA = ÄRLOGISK ## Returnerar SANT om värdet är felvärdet #SAKNAS!
175
- ISNONTEXT = ÄRSAKNAD ## Returnerar SANT om värdet inte är text
176
- ISNUMBER = ÄRTAL ## Returnerar SANT om värdet är ett tal
177
- ISODD = ÄRUDDA ## Returnerar SANT om talet är udda
178
- ISREF = ÄRTOM ## Returnerar SANT om värdet är en referens
179
- ISTEXT = ÄRTEXT ## Returnerar SANT om värdet är text
180
- N = N ## Returnerar ett värde omvandlat till ett tal
181
- NA = SAKNAS ## Returnerar felvärdet #SAKNAS!
182
- TYPE = VÄRDETYP ## Returnerar ett tal som anger värdets datatyp
183
-
184
-
185
- ##
186
- ## Logical functions Logiska funktioner
187
- ##
188
- AND = OCH ## Returnerar SANT om alla argument är sanna
189
- FALSE = FALSKT ## Returnerar det logiska värdet FALSKT
190
- IF = OM ## Anger vilket logiskt test som ska utföras
191
- IFERROR = OMFEL ## Returnerar ett värde som du anger om en formel utvärderar till ett fel; annars returneras resultatet av formeln
192
- NOT = ICKE ## Inverterar logiken för argumenten
193
- OR = ELLER ## Returnerar SANT om något argument är SANT
194
- TRUE = SANT ## Returnerar det logiska värdet SANT
195
-
196
-
197
- ##
198
- ## Lookup and reference functions Sök- och referensfunktioner
199
- ##
200
- ADDRESS = ADRESS ## Returnerar en referens som text till en enstaka cell i ett kalkylblad
201
- AREAS = OMRÅDEN ## Returnerar antalet områden i en referens
202
- CHOOSE = VÄLJ ## Väljer ett värde i en lista över värden
203
- COLUMN = KOLUMN ## Returnerar kolumnnumret för en referens
204
- COLUMNS = KOLUMNER ## Returnerar antalet kolumner i en referens
205
- HLOOKUP = LETAKOLUMN ## Söker i den översta raden i en matris och returnerar värdet för angiven cell
206
- HYPERLINK = HYPERLÄNK ## Skapar en genväg eller ett hopp till ett dokument i nätverket, i ett intranät eller på Internet
207
- INDEX = INDEX ## Använder ett index för ett välja ett värde i en referens eller matris
208
- INDIRECT = INDIREKT ## Returnerar en referens som anges av ett textvärde
209
- LOOKUP = LETAUPP ## Letar upp värden i en vektor eller matris
210
- MATCH = PASSA ## Letar upp värden i en referens eller matris
211
- OFFSET = FÖRSKJUTNING ## Returnerar en referens förskjuten i förhållande till en given referens
212
- ROW = RAD ## Returnerar radnumret för en referens
213
- ROWS = RADER ## Returnerar antalet rader i en referens
214
- RTD = RTD ## Hämtar realtidsdata från ett program som stöder COM-automation (Automation: Ett sätt att arbeta med ett programs objekt från ett annat program eller utvecklingsverktyg. Detta kallades tidigare för OLE Automation, och är en branschstandard och ingår i Component Object Model (COM).)
215
- TRANSPOSE = TRANSPONERA ## Transponerar en matris
216
- VLOOKUP = LETARAD ## Letar i den första kolumnen i en matris och flyttar över raden för att returnera värdet för en cell
217
-
218
-
219
- ##
220
- ## Math and trigonometry functions Matematiska och trigonometriska funktioner
221
- ##
222
- ABS = ABS ## Returnerar absolutvärdet av ett tal
223
- ACOS = ARCCOS ## Returnerar arcus cosinus för ett tal
224
- ACOSH = ARCCOSH ## Returnerar inverterad hyperbolisk cosinus för ett tal
225
- ASIN = ARCSIN ## Returnerar arcus cosinus för ett tal
226
- ASINH = ARCSINH ## Returnerar hyperbolisk arcus sinus för ett tal
227
- ATAN = ARCTAN ## Returnerar arcus tangens för ett tal
228
- ATAN2 = ARCTAN2 ## Returnerar arcus tangens för en x- och en y- koordinat
229
- ATANH = ARCTANH ## Returnerar hyperbolisk arcus tangens för ett tal
230
- CEILING = RUNDA.UPP ## Avrundar ett tal till närmaste heltal eller närmaste signifikanta multipel
231
- COMBIN = KOMBIN ## Returnerar antalet kombinationer för ett givet antal objekt
232
- COS = COS ## Returnerar cosinus för ett tal
233
- COSH = COSH ## Returnerar hyperboliskt cosinus för ett tal
234
- DEGREES = GRADER ## Omvandlar radianer till grader
235
- EVEN = JÄMN ## Avrundar ett tal uppåt till närmaste heltal
236
- EXP = EXP ## Returnerar e upphöjt till ett givet tal
237
- FACT = FAKULTET ## Returnerar fakulteten för ett tal
238
- FACTDOUBLE = DUBBELFAKULTET ## Returnerar dubbelfakulteten för ett tal
239
- FLOOR = RUNDA.NED ## Avrundar ett tal nedåt mot noll
240
- GCD = SGD ## Returnerar den största gemensamma nämnaren
241
- INT = HELTAL ## Avrundar ett tal nedåt till närmaste heltal
242
- LCM = MGM ## Returnerar den minsta gemensamma multipeln
243
- LN = LN ## Returnerar den naturliga logaritmen för ett tal
244
- LOG = LOG ## Returnerar logaritmen för ett tal för en given bas
245
- LOG10 = LOG10 ## Returnerar 10-logaritmen för ett tal
246
- MDETERM = MDETERM ## Returnerar matrisen som är avgörandet av en matris
247
- MINVERSE = MINVERT ## Returnerar matrisinversen av en matris
248
- MMULT = MMULT ## Returnerar matrisprodukten av två matriser
249
- MOD = REST ## Returnerar resten vid en division
250
- MROUND = MAVRUNDA ## Returnerar ett tal avrundat till en given multipel
251
- MULTINOMIAL = MULTINOMIAL ## Returnerar multinomialen för en uppsättning tal
252
- ODD = UDDA ## Avrundar ett tal uppåt till närmaste udda heltal
253
- PI = PI ## Returnerar värdet pi
254
- POWER = UPPHÖJT.TILL ## Returnerar resultatet av ett tal upphöjt till en exponent
255
- PRODUCT = PRODUKT ## Multiplicerar argumenten
256
- QUOTIENT = KVOT ## Returnerar heltalsdelen av en division
257
- RADIANS = RADIANER ## Omvandlar grader till radianer
258
- RAND = SLUMP ## Returnerar ett slumptal mellan 0 och 1
259
- RANDBETWEEN = SLUMP.MELLAN ## Returnerar ett slumptal mellan de tal som du anger
260
- ROMAN = ROMERSK ## Omvandlar vanliga (arabiska) siffror till romerska som text
261
- ROUND = AVRUNDA ## Avrundar ett tal till ett angivet antal siffror
262
- ROUNDDOWN = AVRUNDA.NEDÅT ## Avrundar ett tal nedåt mot noll
263
- ROUNDUP = AVRUNDA.UPPÅT ## Avrundar ett tal uppåt, från noll
264
- SERIESSUM = SERIESUMMA ## Returnerar summan av en potensserie baserat på formeln
265
- SIGN = TECKEN ## Returnerar tecknet för ett tal
266
- SIN = SIN ## Returnerar sinus för en given vinkel
267
- SINH = SINH ## Returnerar hyperbolisk sinus för ett tal
268
- SQRT = ROT ## Returnerar den positiva kvadratroten
269
- SQRTPI = ROTPI ## Returnerar kvadratroten för (tal * pi)
270
- SUBTOTAL = DELSUMMA ## Returnerar en delsumma i en lista eller databas
271
- SUM = SUMMA ## Summerar argumenten
272
- SUMIF = SUMMA.OM ## Summerar celler enligt ett angivet villkor
273
- SUMIFS = SUMMA.OMF ## Lägger till cellerna i ett område som uppfyller flera kriterier
274
- SUMPRODUCT = PRODUKTSUMMA ## Returnerar summan av produkterna i motsvarande matriskomponenter
275
- SUMSQ = KVADRATSUMMA ## Returnerar summan av argumentens kvadrater
276
- SUMX2MY2 = SUMMAX2MY2 ## Returnerar summan av differensen mellan kvadraterna för motsvarande värden i två matriser
277
- SUMX2PY2 = SUMMAX2PY2 ## Returnerar summan av summan av kvadraterna av motsvarande värden i två matriser
278
- SUMXMY2 = SUMMAXMY2 ## Returnerar summan av kvadraten av skillnaden mellan motsvarande värden i två matriser
279
- TAN = TAN ## Returnerar tangens för ett tal
280
- TANH = TANH ## Returnerar hyperbolisk tangens för ett tal
281
- TRUNC = AVKORTA ## Avkortar ett tal till ett heltal
282
-
283
-
284
- ##
285
- ## Statistical functions Statistiska funktioner
286
- ##
287
- AVEDEV = MEDELAVV ## Returnerar medelvärdet för datapunkters absoluta avvikelse från deras medelvärde
288
- AVERAGE = MEDEL ## Returnerar medelvärdet av argumenten
289
- AVERAGEA = AVERAGEA ## Returnerar medelvärdet av argumenten, inklusive tal, text och logiska värden
290
- AVERAGEIF = MEDELOM ## Returnerar medelvärdet (aritmetiskt medelvärde) för alla celler i ett område som uppfyller ett givet kriterium
291
- AVERAGEIFS = MEDELOMF ## Returnerar medelvärdet (det aritmetiska medelvärdet) för alla celler som uppfyller flera villkor.
292
- BETADIST = BETAFÖRD ## Returnerar den kumulativa betafördelningsfunktionen
293
- BETAINV = BETAINV ## Returnerar inversen till den kumulativa fördelningsfunktionen för en viss betafördelning
294
- BINOMDIST = BINOMFÖRD ## Returnerar den individuella binomialfördelningen
295
- CHIDIST = CHI2FÖRD ## Returnerar den ensidiga sannolikheten av c2-fördelningen
296
- CHIINV = CHI2INV ## Returnerar inversen av chi2-fördelningen
297
- CHITEST = CHI2TEST ## Returnerar oberoendetesten
298
- CONFIDENCE = KONFIDENS ## Returnerar konfidensintervallet för en populations medelvärde
299
- CORREL = KORREL ## Returnerar korrelationskoefficienten mellan två datamängder
300
- COUNT = ANTAL ## Räknar hur många tal som finns bland argumenten
301
- COUNTA = ANTALV ## Räknar hur många värden som finns bland argumenten
302
- COUNTBLANK = ANTAL.TOMMA ## Räknar antalet tomma celler i ett område
303
- COUNTIF = ANTAL.OM ## Räknar antalet celler i ett område som uppfyller angivna villkor.
304
- COUNTIFS = ANTAL.OMF ## Räknar antalet celler i ett område som uppfyller flera villkor.
305
- COVAR = KOVAR ## Returnerar kovariansen, d.v.s. medelvärdet av produkterna för parade avvikelser
306
- CRITBINOM = KRITBINOM ## Returnerar det minsta värdet för vilket den kumulativa binomialfördelningen är mindre än eller lika med ett villkorsvärde
307
- DEVSQ = KVADAVV ## Returnerar summan av kvadrater på avvikelser
308
- EXPONDIST = EXPONFÖRD ## Returnerar exponentialfördelningen
309
- FDIST = FFÖRD ## Returnerar F-sannolikhetsfördelningen
310
- FINV = FINV ## Returnerar inversen till F-sannolikhetsfördelningen
311
- FISHER = FISHER ## Returnerar Fisher-transformationen
312
- FISHERINV = FISHERINV ## Returnerar inversen till Fisher-transformationen
313
- FORECAST = PREDIKTION ## Returnerar ett värde längs en linjär trendlinje
314
- FREQUENCY = FREKVENS ## Returnerar en frekvensfördelning som en lodrät matris
315
- FTEST = FTEST ## Returnerar resultatet av en F-test
316
- GAMMADIST = GAMMAFÖRD ## Returnerar gammafördelningen
317
- GAMMAINV = GAMMAINV ## Returnerar inversen till den kumulativa gammafördelningen
318
- GAMMALN = GAMMALN ## Returnerar den naturliga logaritmen för gammafunktionen, G(x)
319
- GEOMEAN = GEOMEDEL ## Returnerar det geometriska medelvärdet
320
- GROWTH = EXPTREND ## Returnerar värden längs en exponentiell trend
321
- HARMEAN = HARMMEDEL ## Returnerar det harmoniska medelvärdet
322
- HYPGEOMDIST = HYPGEOMFÖRD ## Returnerar den hypergeometriska fördelningen
323
- INTERCEPT = SKÄRNINGSPUNKT ## Returnerar skärningspunkten för en linjär regressionslinje
324
- KURT = TOPPIGHET ## Returnerar toppigheten av en mängd data
325
- LARGE = STÖRSTA ## Returnerar det n:te största värdet i en mängd data
326
- LINEST = REGR ## Returnerar parametrar till en linjär trendlinje
327
- LOGEST = EXPREGR ## Returnerar parametrarna i en exponentiell trend
328
- LOGINV = LOGINV ## Returnerar inversen till den lognormala fördelningen
329
- LOGNORMDIST = LOGNORMFÖRD ## Returnerar den kumulativa lognormala fördelningen
330
- MAX = MAX ## Returnerar det största värdet i en lista av argument
331
- MAXA = MAXA ## Returnerar det största värdet i en lista av argument, inklusive tal, text och logiska värden
332
- MEDIAN = MEDIAN ## Returnerar medianen för angivna tal
333
- MIN = MIN ## Returnerar det minsta värdet i en lista med argument
334
- MINA = MINA ## Returnerar det minsta värdet i en lista över argument, inklusive tal, text och logiska värden
335
- MODE = TYPVÄRDE ## Returnerar det vanligaste värdet i en datamängd
336
- NEGBINOMDIST = NEGBINOMFÖRD ## Returnerar den negativa binomialfördelningen
337
- NORMDIST = NORMFÖRD ## Returnerar den kumulativa normalfördelningen
338
- NORMINV = NORMINV ## Returnerar inversen till den kumulativa normalfördelningen
339
- NORMSDIST = NORMSFÖRD ## Returnerar den kumulativa standardnormalfördelningen
340
- NORMSINV = NORMSINV ## Returnerar inversen till den kumulativa standardnormalfördelningen
341
- PEARSON = PEARSON ## Returnerar korrelationskoefficienten till Pearsons momentprodukt
342
- PERCENTILE = PERCENTIL ## Returnerar den n:te percentilen av värden i ett område
343
- PERCENTRANK = PROCENTRANG ## Returnerar procentrangen för ett värde i en datamängd
344
- PERMUT = PERMUT ## Returnerar antal permutationer för ett givet antal objekt
345
- POISSON = POISSON ## Returnerar Poisson-fördelningen
346
- PROB = SANNOLIKHET ## Returnerar sannolikheten att värden i ett område ligger mellan två gränser
347
- QUARTILE = KVARTIL ## Returnerar kvartilen av en mängd data
348
- RANK = RANG ## Returnerar rangordningen för ett tal i en lista med tal
349
- RSQ = RKV ## Returnerar kvadraten av Pearsons produktmomentkorrelationskoefficient
350
- SKEW = SNEDHET ## Returnerar snedheten för en fördelning
351
- SLOPE = LUTNING ## Returnerar lutningen på en linjär regressionslinje
352
- SMALL = MINSTA ## Returnerar det n:te minsta värdet i en mängd data
353
- STANDARDIZE = STANDARDISERA ## Returnerar ett normaliserat värde
354
- STDEV = STDAV ## Uppskattar standardavvikelsen baserat på ett urval
355
- STDEVA = STDEVA ## Uppskattar standardavvikelsen baserat på ett urval, inklusive tal, text och logiska värden
356
- STDEVP = STDAVP ## Beräknar standardavvikelsen baserat på hela populationen
357
- STDEVPA = STDEVPA ## Beräknar standardavvikelsen baserat på hela populationen, inklusive tal, text och logiska värden
358
- STEYX = STDFELYX ## Returnerar standardfelet för ett förutspått y-värde för varje x-värde i regressionen
359
- TDIST = TFÖRD ## Returnerar Students t-fördelning
360
- TINV = TINV ## Returnerar inversen till Students t-fördelning
361
- TREND = TREND ## Returnerar värden längs en linjär trend
362
- TRIMMEAN = TRIMMEDEL ## Returnerar medelvärdet av mittpunkterna i en datamängd
363
- TTEST = TTEST ## Returnerar sannolikheten beräknad ur Students t-test
364
- VAR = VARIANS ## Uppskattar variansen baserat på ett urval
365
- VARA = VARA ## Uppskattar variansen baserat på ett urval, inklusive tal, text och logiska värden
366
- VARP = VARIANSP ## Beräknar variansen baserat på hela populationen
367
- VARPA = VARPA ## Beräknar variansen baserat på hela populationen, inklusive tal, text och logiska värden
368
- WEIBULL = WEIBULL ## Returnerar Weibull-fördelningen
369
- ZTEST = ZTEST ## Returnerar det ensidiga sannolikhetsvärdet av ett z-test
370
-
371
-
372
- ##
373
- ## Text functions Textfunktioner
374
- ##
375
- ASC = ASC ## Ändrar helbredds (dubbel byte) engelska bokstäver eller katakana inom en teckensträng till tecken med halvt breddsteg (enkel byte)
376
- BAHTTEXT = BAHTTEXT ## Omvandlar ett tal till text med valutaformatet ß (baht)
377
- CHAR = TECKENKOD ## Returnerar tecknet som anges av kod
378
- CLEAN = STÄDA ## Tar bort alla icke utskrivbara tecken i en text
379
- CODE = KOD ## Returnerar en numerisk kod för det första tecknet i en textsträng
380
- CONCATENATE = SAMMANFOGA ## Sammanfogar flera textdelar till en textsträng
381
- DOLLAR = VALUTA ## Omvandlar ett tal till text med valutaformat
382
- EXACT = EXAKT ## Kontrollerar om två textvärden är identiska
383
- FIND = HITTA ## Hittar en text i en annan (skiljer på gemener och versaler)
384
- FINDB = HITTAB ## Hittar en text i en annan (skiljer på gemener och versaler)
385
- FIXED = FASTTAL ## Formaterar ett tal som text med ett fast antal decimaler
386
- JIS = JIS ## Ändrar halvbredds (enkel byte) engelska bokstäver eller katakana inom en teckensträng till tecken med helt breddsteg (dubbel byte)
387
- LEFT = VÄNSTER ## Returnerar tecken längst till vänster i en sträng
388
- LEFTB = VÄNSTERB ## Returnerar tecken längst till vänster i en sträng
389
- LEN = LÄNGD ## Returnerar antalet tecken i en textsträng
390
- LENB = LÄNGDB ## Returnerar antalet tecken i en textsträng
391
- LOWER = GEMENER ## Omvandlar text till gemener
392
- MID = EXTEXT ## Returnerar angivet antal tecken från en text med början vid den position som du anger
393
- MIDB = EXTEXTB ## Returnerar angivet antal tecken från en text med början vid den position som du anger
394
- PHONETIC = PHONETIC ## Returnerar de fonetiska (furigana) tecknen i en textsträng
395
- PROPER = INITIAL ## Ändrar första bokstaven i varje ord i ett textvärde till versal
396
- REPLACE = ERSÄTT ## Ersätter tecken i text
397
- REPLACEB = ERSÄTTB ## Ersätter tecken i text
398
- REPT = REP ## Upprepar en text ett bestämt antal gånger
399
- RIGHT = HÖGER ## Returnerar tecken längst till höger i en sträng
400
- RIGHTB = HÖGERB ## Returnerar tecken längst till höger i en sträng
401
- SEARCH = SÖK ## Hittar ett textvärde i ett annat (skiljer inte på gemener och versaler)
402
- SEARCHB = SÖKB ## Hittar ett textvärde i ett annat (skiljer inte på gemener och versaler)
403
- SUBSTITUTE = BYT.UT ## Ersätter gammal text med ny text i en textsträng
404
- T = T ## Omvandlar argumenten till text
405
- TEXT = TEXT ## Formaterar ett tal och omvandlar det till text
406
- TRIM = RENSA ## Tar bort blanksteg från text
407
- UPPER = VERSALER ## Omvandlar text till versaler
408
- VALUE = TEXTNUM ## Omvandlar ett textargument till ett tal
1
+ ##
2
+ ## Add-in and Automation functions Tilläggs- och automatiseringsfunktioner
3
+ ##
4
+ GETPIVOTDATA = HÄMTA.PIVOTDATA ## Returnerar data som lagrats i en pivottabellrapport
5
+
6
+
7
+ ##
8
+ ## Cube functions Kubfunktioner
9
+ ##
10
+ CUBEKPIMEMBER = KUBKPIMEDLEM ## Returnerar namn, egenskap och mått för en KPI och visar namnet och egenskapen i cellen. En KPI, eller prestandaindikator, är ett kvantifierbart mått, t.ex. månatlig bruttovinst eller personalomsättning per kvartal, som används för att analysera ett företags resultat.
11
+ CUBEMEMBER = KUBMEDLEM ## Returnerar en medlem eller ett par i en kubhierarki. Används för att verifiera att medlemmen eller paret finns i kuben.
12
+ CUBEMEMBERPROPERTY = KUBMEDLEMSEGENSKAP ## Returnerar värdet för en medlemsegenskap i kuben. Används för att verifiera att ett medlemsnamn finns i kuben, samt för att returnera den angivna egenskapen för medlemmen.
13
+ CUBERANKEDMEMBER = KUBRANGORDNADMEDLEM ## Returnerar den n:te, eller rangordnade, medlemmen i en uppsättning. Används för att returnera ett eller flera element i en uppsättning, till exempelvis den bästa försäljaren eller de tio bästa eleverna.
14
+ CUBESET = KUBINSTÄLLNING ## Definierar en beräknad uppsättning medlemmar eller par genom att skicka ett bestämt uttryck till kuben på servern, som skapar uppsättningen och sedan returnerar den till Microsoft Office Excel.
15
+ CUBESETCOUNT = KUBINSTÄLLNINGANTAL ## Returnerar antalet objekt i en uppsättning.
16
+ CUBEVALUE = KUBVÄRDE ## Returnerar ett mängdvärde från en kub.
17
+
18
+
19
+ ##
20
+ ## Database functions Databasfunktioner
21
+ ##
22
+ DAVERAGE = DMEDEL ## Returnerar medelvärdet av databasposterna
23
+ DCOUNT = DANTAL ## Räknar antalet celler som innehåller tal i en databas
24
+ DCOUNTA = DANTALV ## Räknar ifyllda celler i en databas
25
+ DGET = DHÄMTA ## Hämtar en enstaka post från en databas som uppfyller de angivna villkoren
26
+ DMAX = DMAX ## Returnerar det största värdet från databasposterna
27
+ DMIN = DMIN ## Returnerar det minsta värdet från databasposterna
28
+ DPRODUCT = DPRODUKT ## Multiplicerar värdena i ett visst fält i poster som uppfyller villkoret
29
+ DSTDEV = DSTDAV ## Uppskattar standardavvikelsen baserat på ett urval av databasposterna
30
+ DSTDEVP = DSTDAVP ## Beräknar standardavvikelsen utifrån hela populationen av valda databasposter
31
+ DSUM = DSUMMA ## Summerar talen i kolumnfält i databasposter som uppfyller villkoret
32
+ DVAR = DVARIANS ## Uppskattar variansen baserat på ett urval av databasposterna
33
+ DVARP = DVARIANSP ## Beräknar variansen utifrån hela populationen av valda databasposter
34
+
35
+
36
+ ##
37
+ ## Date and time functions Tid- och datumfunktioner
38
+ ##
39
+ DATE = DATUM ## Returnerar ett serienummer för ett visst datum
40
+ DATEVALUE = DATUMVÄRDE ## Konverterar ett datum i textformat till ett serienummer
41
+ DAY = DAG ## Konverterar ett serienummer till dag i månaden
42
+ DAYS360 = DAGAR360 ## Beräknar antalet dagar mellan två datum baserat på ett 360-dagarsår
43
+ EDATE = EDATUM ## Returnerar serienumret för ett datum som infaller ett visst antal månader före eller efter startdatumet
44
+ EOMONTH = SLUTMÅNAD ## Returnerar serienumret för sista dagen i månaden ett visst antal månader tidigare eller senare
45
+ HOUR = TIMME ## Konverterar ett serienummer till en timme
46
+ MINUTE = MINUT ## Konverterar ett serienummer till en minut
47
+ MONTH = MÅNAD ## Konverterar ett serienummer till en månad
48
+ NETWORKDAYS = NETTOARBETSDAGAR ## Returnerar antalet hela arbetsdagar mellan två datum
49
+ NOW = NU ## Returnerar serienumret för dagens datum och aktuell tid
50
+ SECOND = SEKUND ## Konverterar ett serienummer till en sekund
51
+ TIME = KLOCKSLAG ## Returnerar serienumret för en viss tid
52
+ TIMEVALUE = TIDVÄRDE ## Konverterar en tid i textformat till ett serienummer
53
+ TODAY = IDAG ## Returnerar serienumret för dagens datum
54
+ WEEKDAY = VECKODAG ## Konverterar ett serienummer till en dag i veckan
55
+ WEEKNUM = VECKONR ## Konverterar ett serienummer till ett veckonummer
56
+ WORKDAY = ARBETSDAGAR ## Returnerar serienumret för ett datum ett visst antal arbetsdagar tidigare eller senare
57
+ YEAR = ÅR ## Konverterar ett serienummer till ett år
58
+ YEARFRAC = ÅRDEL ## Returnerar en del av ett år som representerar antalet hela dagar mellan start- och slutdatum
59
+
60
+
61
+ ##
62
+ ## Engineering functions Tekniska funktioner
63
+ ##
64
+ BESSELI = BESSELI ## Returnerar den modifierade Bessel-funktionen In(x)
65
+ BESSELJ = BESSELJ ## Returnerar Bessel-funktionen Jn(x)
66
+ BESSELK = BESSELK ## Returnerar den modifierade Bessel-funktionen Kn(x)
67
+ BESSELY = BESSELY ## Returnerar Bessel-funktionen Yn(x)
68
+ BIN2DEC = BIN.TILL.DEC ## Omvandlar ett binärt tal till decimalt
69
+ BIN2HEX = BIN.TILL.HEX ## Omvandlar ett binärt tal till hexadecimalt
70
+ BIN2OCT = BIN.TILL.OKT ## Omvandlar ett binärt tal till oktalt
71
+ COMPLEX = KOMPLEX ## Omvandlar reella och imaginära koefficienter till ett komplext tal
72
+ CONVERT = KONVERTERA ## Omvandlar ett tal från ett måttsystem till ett annat
73
+ DEC2BIN = DEC.TILL.BIN ## Omvandlar ett decimalt tal till binärt
74
+ DEC2HEX = DEC.TILL.HEX ## Omvandlar ett decimalt tal till hexadecimalt
75
+ DEC2OCT = DEC.TILL.OKT ## Omvandlar ett decimalt tal till oktalt
76
+ DELTA = DELTA ## Testar om två värden är lika
77
+ ERF = FELF ## Returnerar felfunktionen
78
+ ERFC = FELFK ## Returnerar den komplementära felfunktionen
79
+ GESTEP = SLSTEG ## Testar om ett tal är större än ett tröskelvärde
80
+ HEX2BIN = HEX.TILL.BIN ## Omvandlar ett hexadecimalt tal till binärt
81
+ HEX2DEC = HEX.TILL.DEC ## Omvandlar ett hexadecimalt tal till decimalt
82
+ HEX2OCT = HEX.TILL.OKT ## Omvandlar ett hexadecimalt tal till oktalt
83
+ IMABS = IMABS ## Returnerar absolutvärdet (modulus) för ett komplext tal
84
+ IMAGINARY = IMAGINÄR ## Returnerar den imaginära koefficienten för ett komplext tal
85
+ IMARGUMENT = IMARGUMENT ## Returnerar det komplexa talets argument, en vinkel uttryckt i radianer
86
+ IMCONJUGATE = IMKONJUGAT ## Returnerar det komplexa talets konjugat
87
+ IMCOS = IMCOS ## Returnerar cosinus för ett komplext tal
88
+ IMDIV = IMDIV ## Returnerar kvoten för två komplexa tal
89
+ IMEXP = IMEUPPHÖJT ## Returnerar exponenten för ett komplext tal
90
+ IMLN = IMLN ## Returnerar den naturliga logaritmen för ett komplext tal
91
+ IMLOG10 = IMLOG10 ## Returnerar 10-logaritmen för ett komplext tal
92
+ IMLOG2 = IMLOG2 ## Returnerar 2-logaritmen för ett komplext tal
93
+ IMPOWER = IMUPPHÖJT ## Returnerar ett komplext tal upphöjt till en exponent
94
+ IMPRODUCT = IMPRODUKT ## Returnerar produkten av komplexa tal
95
+ IMREAL = IMREAL ## Returnerar den reella koefficienten för ett komplext tal
96
+ IMSIN = IMSIN ## Returnerar sinus för ett komplext tal
97
+ IMSQRT = IMROT ## Returnerar kvadratroten av ett komplext tal
98
+ IMSUB = IMDIFF ## Returnerar differensen mellan två komplexa tal
99
+ IMSUM = IMSUM ## Returnerar summan av komplexa tal
100
+ OCT2BIN = OKT.TILL.BIN ## Omvandlar ett oktalt tal till binärt
101
+ OCT2DEC = OKT.TILL.DEC ## Omvandlar ett oktalt tal till decimalt
102
+ OCT2HEX = OKT.TILL.HEX ## Omvandlar ett oktalt tal till hexadecimalt
103
+
104
+
105
+ ##
106
+ ## Financial functions Finansiella funktioner
107
+ ##
108
+ ACCRINT = UPPLRÄNTA ## Returnerar den upplupna räntan för värdepapper med periodisk ränta
109
+ ACCRINTM = UPPLOBLRÄNTA ## Returnerar den upplupna räntan för ett värdepapper som ger avkastning på förfallodagen
110
+ AMORDEGRC = AMORDEGRC ## Returnerar avskrivningen för varje redovisningsperiod med hjälp av en avskrivningskoefficient
111
+ AMORLINC = AMORLINC ## Returnerar avskrivningen för varje redovisningsperiod
112
+ COUPDAYBS = KUPDAGBB ## Returnerar antal dagar från början av kupongperioden till likviddagen
113
+ COUPDAYS = KUPDAGARS ## Returnerar antalet dagar i kupongperioden som innehåller betalningsdatumet
114
+ COUPDAYSNC = KUPDAGNK ## Returnerar antalet dagar från betalningsdatumet till nästa kupongdatum
115
+ COUPNCD = KUPNKD ## Returnerar nästa kupongdatum efter likviddagen
116
+ COUPNUM = KUPANT ## Returnerar kuponger som förfaller till betalning mellan likviddagen och förfallodagen
117
+ COUPPCD = KUPFKD ## Returnerar föregående kupongdatum före likviddagen
118
+ CUMIPMT = KUMRÄNTA ## Returnerar den ackumulerade räntan som betalats mellan två perioder
119
+ CUMPRINC = KUMPRIS ## Returnerar det ackumulerade kapitalbeloppet som betalats på ett lån mellan två perioder
120
+ DB = DB ## Returnerar avskrivningen för en tillgång under en angiven tid enligt metoden för fast degressiv avskrivning
121
+ DDB = DEGAVSKR ## Returnerar en tillgångs värdeminskning under en viss period med hjälp av dubbel degressiv avskrivning eller någon annan metod som du anger
122
+ DISC = DISK ## Returnerar diskonteringsräntan för ett värdepapper
123
+ DOLLARDE = DECTAL ## Omvandlar ett pris uttryckt som ett bråk till ett decimaltal
124
+ DOLLARFR = BRÅK ## Omvandlar ett pris i kronor uttryckt som ett decimaltal till ett bråk
125
+ DURATION = LÖPTID ## Returnerar den årliga löptiden för en säkerhet med periodiska räntebetalningar
126
+ EFFECT = EFFRÄNTA ## Returnerar den årliga effektiva räntesatsen
127
+ FV = SLUTVÄRDE ## Returnerar det framtida värdet på en investering
128
+ FVSCHEDULE = FÖRRÄNTNING ## Returnerar det framtida värdet av ett begynnelsekapital beräknat på olika räntenivåer
129
+ INTRATE = ÅRSRÄNTA ## Returnerar räntesatsen för ett betalt värdepapper
130
+ IPMT = RBETALNING ## Returnerar räntedelen av en betalning för en given period
131
+ IRR = IR ## Returnerar internräntan för en serie betalningar
132
+ ISPMT = RALÅN ## Beräknar räntan som har betalats under en specifik betalningsperiod
133
+ MDURATION = MLÖPTID ## Returnerar den modifierade Macauley-löptiden för ett värdepapper med det antagna nominella värdet 100 kr
134
+ MIRR = MODIR ## Returnerar internräntan där positiva och negativa betalningar finansieras med olika räntor
135
+ NOMINAL = NOMRÄNTA ## Returnerar den årliga nominella räntesatsen
136
+ NPER = PERIODER ## Returnerar antalet perioder för en investering
137
+ NPV = NETNUVÄRDE ## Returnerar nuvärdet av en serie periodiska betalningar vid en given diskonteringsränta
138
+ ODDFPRICE = UDDAFPRIS ## Returnerar priset per 100 kr nominellt värde för ett värdepapper med en udda första period
139
+ ODDFYIELD = UDDAFAVKASTNING ## Returnerar avkastningen för en säkerhet med en udda första period
140
+ ODDLPRICE = UDDASPRIS ## Returnerar priset per 100 kr nominellt värde för ett värdepapper med en udda sista period
141
+ ODDLYIELD = UDDASAVKASTNING ## Returnerar avkastningen för en säkerhet med en udda sista period
142
+ PMT = BETALNING ## Returnerar den periodiska betalningen för en annuitet
143
+ PPMT = AMORT ## Returnerar amorteringsdelen av en annuitetsbetalning för en given period
144
+ PRICE = PRIS ## Returnerar priset per 100 kr nominellt värde för ett värdepapper som ger periodisk ränta
145
+ PRICEDISC = PRISDISK ## Returnerar priset per 100 kr nominellt värde för ett diskonterat värdepapper
146
+ PRICEMAT = PRISFÖRF ## Returnerar priset per 100 kr nominellt värde för ett värdepapper som ger ränta på förfallodagen
147
+ PV = PV ## Returnerar nuvärdet av en serie lika stora periodiska betalningar
148
+ RATE = RÄNTA ## Returnerar räntesatsen per period i en annuitet
149
+ RECEIVED = BELOPP ## Returnerar beloppet som utdelas på förfallodagen för ett betalat värdepapper
150
+ SLN = LINAVSKR ## Returnerar den linjära avskrivningen för en tillgång under en period
151
+ SYD = ÅRSAVSKR ## Returnerar den årliga avskrivningssumman för en tillgång under en angiven period
152
+ TBILLEQ = SSVXEKV ## Returnerar avkastningen motsvarande en obligation för en statsskuldväxel
153
+ TBILLPRICE = SSVXPRIS ## Returnerar priset per 100 kr nominellt värde för en statsskuldväxel
154
+ TBILLYIELD = SSVXRÄNTA ## Returnerar avkastningen för en statsskuldväxel
155
+ VDB = VDEGRAVSKR ## Returnerar avskrivningen för en tillgång under en angiven period (med degressiv avskrivning)
156
+ XIRR = XIRR ## Returnerar internräntan för en serie betalningar som inte nödvändigtvis är periodiska
157
+ XNPV = XNUVÄRDE ## Returnerar det nuvarande nettovärdet för en serie betalningar som inte nödvändigtvis är periodiska
158
+ YIELD = NOMAVK ## Returnerar avkastningen för ett värdepapper som ger periodisk ränta
159
+ YIELDDISC = NOMAVKDISK ## Returnerar den årliga avkastningen för diskonterade värdepapper, exempelvis en statsskuldväxel
160
+ YIELDMAT = NOMAVKFÖRF ## Returnerar den årliga avkastningen för ett värdepapper som ger ränta på förfallodagen
161
+
162
+
163
+ ##
164
+ ## Information functions Informationsfunktioner
165
+ ##
166
+ CELL = CELL ## Returnerar information om formatering, plats och innehåll i en cell
167
+ ERROR.TYPE = FEL.TYP ## Returnerar ett tal som motsvarar ett felvärde
168
+ INFO = INFO ## Returnerar information om operativsystemet
169
+ ISBLANK = ÄRREF ## Returnerar SANT om värdet är tomt
170
+ ISERR = Ä ## Returnerar SANT om värdet är ett felvärde annat än #SAKNAS!
171
+ ISERROR = ÄRFEL ## Returnerar SANT om värdet är ett felvärde
172
+ ISEVEN = ÄRJÄMN ## Returnerar SANT om talet är jämnt
173
+ ISLOGICAL = ÄREJTEXT ## Returnerar SANT om värdet är ett logiskt värde
174
+ ISNA = ÄRLOGISK ## Returnerar SANT om värdet är felvärdet #SAKNAS!
175
+ ISNONTEXT = ÄRSAKNAD ## Returnerar SANT om värdet inte är text
176
+ ISNUMBER = ÄRTAL ## Returnerar SANT om värdet är ett tal
177
+ ISODD = ÄRUDDA ## Returnerar SANT om talet är udda
178
+ ISREF = ÄRTOM ## Returnerar SANT om värdet är en referens
179
+ ISTEXT = ÄRTEXT ## Returnerar SANT om värdet är text
180
+ N = N ## Returnerar ett värde omvandlat till ett tal
181
+ NA = SAKNAS ## Returnerar felvärdet #SAKNAS!
182
+ TYPE = VÄRDETYP ## Returnerar ett tal som anger värdets datatyp
183
+
184
+
185
+ ##
186
+ ## Logical functions Logiska funktioner
187
+ ##
188
+ AND = OCH ## Returnerar SANT om alla argument är sanna
189
+ FALSE = FALSKT ## Returnerar det logiska värdet FALSKT
190
+ IF = OM ## Anger vilket logiskt test som ska utföras
191
+ IFERROR = OMFEL ## Returnerar ett värde som du anger om en formel utvärderar till ett fel; annars returneras resultatet av formeln
192
+ NOT = ICKE ## Inverterar logiken för argumenten
193
+ OR = ELLER ## Returnerar SANT om något argument är SANT
194
+ TRUE = SANT ## Returnerar det logiska värdet SANT
195
+
196
+
197
+ ##
198
+ ## Lookup and reference functions Sök- och referensfunktioner
199
+ ##
200
+ ADDRESS = ADRESS ## Returnerar en referens som text till en enstaka cell i ett kalkylblad
201
+ AREAS = OMRÅDEN ## Returnerar antalet områden i en referens
202
+ CHOOSE = VÄLJ ## Väljer ett värde i en lista över värden
203
+ COLUMN = KOLUMN ## Returnerar kolumnnumret för en referens
204
+ COLUMNS = KOLUMNER ## Returnerar antalet kolumner i en referens
205
+ HLOOKUP = LETAKOLUMN ## Söker i den översta raden i en matris och returnerar värdet för angiven cell
206
+ HYPERLINK = HYPERLÄNK ## Skapar en genväg eller ett hopp till ett dokument i nätverket, i ett intranät eller på Internet
207
+ INDEX = INDEX ## Använder ett index för ett välja ett värde i en referens eller matris
208
+ INDIRECT = INDIREKT ## Returnerar en referens som anges av ett textvärde
209
+ LOOKUP = LETAUPP ## Letar upp värden i en vektor eller matris
210
+ MATCH = PASSA ## Letar upp värden i en referens eller matris
211
+ OFFSET = FÖRSKJUTNING ## Returnerar en referens förskjuten i förhållande till en given referens
212
+ ROW = RAD ## Returnerar radnumret för en referens
213
+ ROWS = RADER ## Returnerar antalet rader i en referens
214
+ RTD = RTD ## Hämtar realtidsdata från ett program som stöder COM-automation (Automation: Ett sätt att arbeta med ett programs objekt från ett annat program eller utvecklingsverktyg. Detta kallades tidigare för OLE Automation, och är en branschstandard och ingår i Component Object Model (COM).)
215
+ TRANSPOSE = TRANSPONERA ## Transponerar en matris
216
+ VLOOKUP = LETARAD ## Letar i den första kolumnen i en matris och flyttar över raden för att returnera värdet för en cell
217
+
218
+
219
+ ##
220
+ ## Math and trigonometry functions Matematiska och trigonometriska funktioner
221
+ ##
222
+ ABS = ABS ## Returnerar absolutvärdet av ett tal
223
+ ACOS = ARCCOS ## Returnerar arcus cosinus för ett tal
224
+ ACOSH = ARCCOSH ## Returnerar inverterad hyperbolisk cosinus för ett tal
225
+ ASIN = ARCSIN ## Returnerar arcus cosinus för ett tal
226
+ ASINH = ARCSINH ## Returnerar hyperbolisk arcus sinus för ett tal
227
+ ATAN = ARCTAN ## Returnerar arcus tangens för ett tal
228
+ ATAN2 = ARCTAN2 ## Returnerar arcus tangens för en x- och en y- koordinat
229
+ ATANH = ARCTANH ## Returnerar hyperbolisk arcus tangens för ett tal
230
+ CEILING = RUNDA.UPP ## Avrundar ett tal till närmaste heltal eller närmaste signifikanta multipel
231
+ COMBIN = KOMBIN ## Returnerar antalet kombinationer för ett givet antal objekt
232
+ COS = COS ## Returnerar cosinus för ett tal
233
+ COSH = COSH ## Returnerar hyperboliskt cosinus för ett tal
234
+ DEGREES = GRADER ## Omvandlar radianer till grader
235
+ EVEN = JÄMN ## Avrundar ett tal uppåt till närmaste heltal
236
+ EXP = EXP ## Returnerar e upphöjt till ett givet tal
237
+ FACT = FAKULTET ## Returnerar fakulteten för ett tal
238
+ FACTDOUBLE = DUBBELFAKULTET ## Returnerar dubbelfakulteten för ett tal
239
+ FLOOR = RUNDA.NED ## Avrundar ett tal nedåt mot noll
240
+ GCD = SGD ## Returnerar den största gemensamma nämnaren
241
+ INT = HELTAL ## Avrundar ett tal nedåt till närmaste heltal
242
+ LCM = MGM ## Returnerar den minsta gemensamma multipeln
243
+ LN = LN ## Returnerar den naturliga logaritmen för ett tal
244
+ LOG = LOG ## Returnerar logaritmen för ett tal för en given bas
245
+ LOG10 = LOG10 ## Returnerar 10-logaritmen för ett tal
246
+ MDETERM = MDETERM ## Returnerar matrisen som är avgörandet av en matris
247
+ MINVERSE = MINVERT ## Returnerar matrisinversen av en matris
248
+ MMULT = MMULT ## Returnerar matrisprodukten av två matriser
249
+ MOD = REST ## Returnerar resten vid en division
250
+ MROUND = MAVRUNDA ## Returnerar ett tal avrundat till en given multipel
251
+ MULTINOMIAL = MULTINOMIAL ## Returnerar multinomialen för en uppsättning tal
252
+ ODD = UDDA ## Avrundar ett tal uppåt till närmaste udda heltal
253
+ PI = PI ## Returnerar värdet pi
254
+ POWER = UPPHÖJT.TILL ## Returnerar resultatet av ett tal upphöjt till en exponent
255
+ PRODUCT = PRODUKT ## Multiplicerar argumenten
256
+ QUOTIENT = KVOT ## Returnerar heltalsdelen av en division
257
+ RADIANS = RADIANER ## Omvandlar grader till radianer
258
+ RAND = SLUMP ## Returnerar ett slumptal mellan 0 och 1
259
+ RANDBETWEEN = SLUMP.MELLAN ## Returnerar ett slumptal mellan de tal som du anger
260
+ ROMAN = ROMERSK ## Omvandlar vanliga (arabiska) siffror till romerska som text
261
+ ROUND = AVRUNDA ## Avrundar ett tal till ett angivet antal siffror
262
+ ROUNDDOWN = AVRUNDA.NEDÅT ## Avrundar ett tal nedåt mot noll
263
+ ROUNDUP = AVRUNDA.UPPÅT ## Avrundar ett tal uppåt, från noll
264
+ SERIESSUM = SERIESUMMA ## Returnerar summan av en potensserie baserat på formeln
265
+ SIGN = TECKEN ## Returnerar tecknet för ett tal
266
+ SIN = SIN ## Returnerar sinus för en given vinkel
267
+ SINH = SINH ## Returnerar hyperbolisk sinus för ett tal
268
+ SQRT = ROT ## Returnerar den positiva kvadratroten
269
+ SQRTPI = ROTPI ## Returnerar kvadratroten för (tal * pi)
270
+ SUBTOTAL = DELSUMMA ## Returnerar en delsumma i en lista eller databas
271
+ SUM = SUMMA ## Summerar argumenten
272
+ SUMIF = SUMMA.OM ## Summerar celler enligt ett angivet villkor
273
+ SUMIFS = SUMMA.OMF ## Lägger till cellerna i ett område som uppfyller flera kriterier
274
+ SUMPRODUCT = PRODUKTSUMMA ## Returnerar summan av produkterna i motsvarande matriskomponenter
275
+ SUMSQ = KVADRATSUMMA ## Returnerar summan av argumentens kvadrater
276
+ SUMX2MY2 = SUMMAX2MY2 ## Returnerar summan av differensen mellan kvadraterna för motsvarande värden i två matriser
277
+ SUMX2PY2 = SUMMAX2PY2 ## Returnerar summan av summan av kvadraterna av motsvarande värden i två matriser
278
+ SUMXMY2 = SUMMAXMY2 ## Returnerar summan av kvadraten av skillnaden mellan motsvarande värden i två matriser
279
+ TAN = TAN ## Returnerar tangens för ett tal
280
+ TANH = TANH ## Returnerar hyperbolisk tangens för ett tal
281
+ TRUNC = AVKORTA ## Avkortar ett tal till ett heltal
282
+
283
+
284
+ ##
285
+ ## Statistical functions Statistiska funktioner
286
+ ##
287
+ AVEDEV = MEDELAVV ## Returnerar medelvärdet för datapunkters absoluta avvikelse från deras medelvärde
288
+ AVERAGE = MEDEL ## Returnerar medelvärdet av argumenten
289
+ AVERAGEA = AVERAGEA ## Returnerar medelvärdet av argumenten, inklusive tal, text och logiska värden
290
+ AVERAGEIF = MEDELOM ## Returnerar medelvärdet (aritmetiskt medelvärde) för alla celler i ett område som uppfyller ett givet kriterium
291
+ AVERAGEIFS = MEDELOMF ## Returnerar medelvärdet (det aritmetiska medelvärdet) för alla celler som uppfyller flera villkor.
292
+ BETADIST = BETAFÖRD ## Returnerar den kumulativa betafördelningsfunktionen
293
+ BETAINV = BETAINV ## Returnerar inversen till den kumulativa fördelningsfunktionen för en viss betafördelning
294
+ BINOMDIST = BINOMFÖRD ## Returnerar den individuella binomialfördelningen
295
+ CHIDIST = CHI2FÖRD ## Returnerar den ensidiga sannolikheten av c2-fördelningen
296
+ CHIINV = CHI2INV ## Returnerar inversen av chi2-fördelningen
297
+ CHITEST = CHI2TEST ## Returnerar oberoendetesten
298
+ CONFIDENCE = KONFIDENS ## Returnerar konfidensintervallet för en populations medelvärde
299
+ CORREL = KORREL ## Returnerar korrelationskoefficienten mellan två datamängder
300
+ COUNT = ANTAL ## Räknar hur många tal som finns bland argumenten
301
+ COUNTA = ANTALV ## Räknar hur många värden som finns bland argumenten
302
+ COUNTBLANK = ANTAL.TOMMA ## Räknar antalet tomma celler i ett område
303
+ COUNTIF = ANTAL.OM ## Räknar antalet celler i ett område som uppfyller angivna villkor.
304
+ COUNTIFS = ANTAL.OMF ## Räknar antalet celler i ett område som uppfyller flera villkor.
305
+ COVAR = KOVAR ## Returnerar kovariansen, d.v.s. medelvärdet av produkterna för parade avvikelser
306
+ CRITBINOM = KRITBINOM ## Returnerar det minsta värdet för vilket den kumulativa binomialfördelningen är mindre än eller lika med ett villkorsvärde
307
+ DEVSQ = KVADAVV ## Returnerar summan av kvadrater på avvikelser
308
+ EXPONDIST = EXPONFÖRD ## Returnerar exponentialfördelningen
309
+ FDIST = FFÖRD ## Returnerar F-sannolikhetsfördelningen
310
+ FINV = FINV ## Returnerar inversen till F-sannolikhetsfördelningen
311
+ FISHER = FISHER ## Returnerar Fisher-transformationen
312
+ FISHERINV = FISHERINV ## Returnerar inversen till Fisher-transformationen
313
+ FORECAST = PREDIKTION ## Returnerar ett värde längs en linjär trendlinje
314
+ FREQUENCY = FREKVENS ## Returnerar en frekvensfördelning som en lodrät matris
315
+ FTEST = FTEST ## Returnerar resultatet av en F-test
316
+ GAMMADIST = GAMMAFÖRD ## Returnerar gammafördelningen
317
+ GAMMAINV = GAMMAINV ## Returnerar inversen till den kumulativa gammafördelningen
318
+ GAMMALN = GAMMALN ## Returnerar den naturliga logaritmen för gammafunktionen, G(x)
319
+ GEOMEAN = GEOMEDEL ## Returnerar det geometriska medelvärdet
320
+ GROWTH = EXPTREND ## Returnerar värden längs en exponentiell trend
321
+ HARMEAN = HARMMEDEL ## Returnerar det harmoniska medelvärdet
322
+ HYPGEOMDIST = HYPGEOMFÖRD ## Returnerar den hypergeometriska fördelningen
323
+ INTERCEPT = SKÄRNINGSPUNKT ## Returnerar skärningspunkten för en linjär regressionslinje
324
+ KURT = TOPPIGHET ## Returnerar toppigheten av en mängd data
325
+ LARGE = STÖRSTA ## Returnerar det n:te största värdet i en mängd data
326
+ LINEST = REGR ## Returnerar parametrar till en linjär trendlinje
327
+ LOGEST = EXPREGR ## Returnerar parametrarna i en exponentiell trend
328
+ LOGINV = LOGINV ## Returnerar inversen till den lognormala fördelningen
329
+ LOGNORMDIST = LOGNORMFÖRD ## Returnerar den kumulativa lognormala fördelningen
330
+ MAX = MAX ## Returnerar det största värdet i en lista av argument
331
+ MAXA = MAXA ## Returnerar det största värdet i en lista av argument, inklusive tal, text och logiska värden
332
+ MEDIAN = MEDIAN ## Returnerar medianen för angivna tal
333
+ MIN = MIN ## Returnerar det minsta värdet i en lista med argument
334
+ MINA = MINA ## Returnerar det minsta värdet i en lista över argument, inklusive tal, text och logiska värden
335
+ MODE = TYPVÄRDE ## Returnerar det vanligaste värdet i en datamängd
336
+ NEGBINOMDIST = NEGBINOMFÖRD ## Returnerar den negativa binomialfördelningen
337
+ NORMDIST = NORMFÖRD ## Returnerar den kumulativa normalfördelningen
338
+ NORMINV = NORMINV ## Returnerar inversen till den kumulativa normalfördelningen
339
+ NORMSDIST = NORMSFÖRD ## Returnerar den kumulativa standardnormalfördelningen
340
+ NORMSINV = NORMSINV ## Returnerar inversen till den kumulativa standardnormalfördelningen
341
+ PEARSON = PEARSON ## Returnerar korrelationskoefficienten till Pearsons momentprodukt
342
+ PERCENTILE = PERCENTIL ## Returnerar den n:te percentilen av värden i ett område
343
+ PERCENTRANK = PROCENTRANG ## Returnerar procentrangen för ett värde i en datamängd
344
+ PERMUT = PERMUT ## Returnerar antal permutationer för ett givet antal objekt
345
+ POISSON = POISSON ## Returnerar Poisson-fördelningen
346
+ PROB = SANNOLIKHET ## Returnerar sannolikheten att värden i ett område ligger mellan två gränser
347
+ QUARTILE = KVARTIL ## Returnerar kvartilen av en mängd data
348
+ RANK = RANG ## Returnerar rangordningen för ett tal i en lista med tal
349
+ RSQ = RKV ## Returnerar kvadraten av Pearsons produktmomentkorrelationskoefficient
350
+ SKEW = SNEDHET ## Returnerar snedheten för en fördelning
351
+ SLOPE = LUTNING ## Returnerar lutningen på en linjär regressionslinje
352
+ SMALL = MINSTA ## Returnerar det n:te minsta värdet i en mängd data
353
+ STANDARDIZE = STANDARDISERA ## Returnerar ett normaliserat värde
354
+ STDEV = STDAV ## Uppskattar standardavvikelsen baserat på ett urval
355
+ STDEVA = STDEVA ## Uppskattar standardavvikelsen baserat på ett urval, inklusive tal, text och logiska värden
356
+ STDEVP = STDAVP ## Beräknar standardavvikelsen baserat på hela populationen
357
+ STDEVPA = STDEVPA ## Beräknar standardavvikelsen baserat på hela populationen, inklusive tal, text och logiska värden
358
+ STEYX = STDFELYX ## Returnerar standardfelet för ett förutspått y-värde för varje x-värde i regressionen
359
+ TDIST = TFÖRD ## Returnerar Students t-fördelning
360
+ TINV = TINV ## Returnerar inversen till Students t-fördelning
361
+ TREND = TREND ## Returnerar värden längs en linjär trend
362
+ TRIMMEAN = TRIMMEDEL ## Returnerar medelvärdet av mittpunkterna i en datamängd
363
+ TTEST = TTEST ## Returnerar sannolikheten beräknad ur Students t-test
364
+ VAR = VARIANS ## Uppskattar variansen baserat på ett urval
365
+ VARA = VARA ## Uppskattar variansen baserat på ett urval, inklusive tal, text och logiska värden
366
+ VARP = VARIANSP ## Beräknar variansen baserat på hela populationen
367
+ VARPA = VARPA ## Beräknar variansen baserat på hela populationen, inklusive tal, text och logiska värden
368
+ WEIBULL = WEIBULL ## Returnerar Weibull-fördelningen
369
+ ZTEST = ZTEST ## Returnerar det ensidiga sannolikhetsvärdet av ett z-test
370
+
371
+
372
+ ##
373
+ ## Text functions Textfunktioner
374
+ ##
375
+ ASC = ASC ## Ändrar helbredds (dubbel byte) engelska bokstäver eller katakana inom en teckensträng till tecken med halvt breddsteg (enkel byte)
376
+ BAHTTEXT = BAHTTEXT ## Omvandlar ett tal till text med valutaformatet ß (baht)
377
+ CHAR = TECKENKOD ## Returnerar tecknet som anges av kod
378
+ CLEAN = STÄDA ## Tar bort alla icke utskrivbara tecken i en text
379
+ CODE = KOD ## Returnerar en numerisk kod för det första tecknet i en textsträng
380
+ CONCATENATE = SAMMANFOGA ## Sammanfogar flera textdelar till en textsträng
381
+ DOLLAR = VALUTA ## Omvandlar ett tal till text med valutaformat
382
+ EXACT = EXAKT ## Kontrollerar om två textvärden är identiska
383
+ FIND = HITTA ## Hittar en text i en annan (skiljer på gemener och versaler)
384
+ FINDB = HITTAB ## Hittar en text i en annan (skiljer på gemener och versaler)
385
+ FIXED = FASTTAL ## Formaterar ett tal som text med ett fast antal decimaler
386
+ JIS = JIS ## Ändrar halvbredds (enkel byte) engelska bokstäver eller katakana inom en teckensträng till tecken med helt breddsteg (dubbel byte)
387
+ LEFT = VÄNSTER ## Returnerar tecken längst till vänster i en sträng
388
+ LEFTB = VÄNSTERB ## Returnerar tecken längst till vänster i en sträng
389
+ LEN = LÄNGD ## Returnerar antalet tecken i en textsträng
390
+ LENB = LÄNGDB ## Returnerar antalet tecken i en textsträng
391
+ LOWER = GEMENER ## Omvandlar text till gemener
392
+ MID = EXTEXT ## Returnerar angivet antal tecken från en text med början vid den position som du anger
393
+ MIDB = EXTEXTB ## Returnerar angivet antal tecken från en text med början vid den position som du anger
394
+ PHONETIC = PHONETIC ## Returnerar de fonetiska (furigana) tecknen i en textsträng
395
+ PROPER = INITIAL ## Ändrar första bokstaven i varje ord i ett textvärde till versal
396
+ REPLACE = ERSÄTT ## Ersätter tecken i text
397
+ REPLACEB = ERSÄTTB ## Ersätter tecken i text
398
+ REPT = REP ## Upprepar en text ett bestämt antal gånger
399
+ RIGHT = HÖGER ## Returnerar tecken längst till höger i en sträng
400
+ RIGHTB = HÖGERB ## Returnerar tecken längst till höger i en sträng
401
+ SEARCH = SÖK ## Hittar ett textvärde i ett annat (skiljer inte på gemener och versaler)
402
+ SEARCHB = SÖKB ## Hittar ett textvärde i ett annat (skiljer inte på gemener och versaler)
403
+ SUBSTITUTE = BYT.UT ## Ersätter gammal text med ny text i en textsträng
404
+ T = T ## Omvandlar argumenten till text
405
+ TEXT = TEXT ## Formaterar ett tal och omvandlar det till text
406
+ TRIM = RENSA ## Tar bort blanksteg från text
407
+ UPPER = VERSALER ## Omvandlar text till versaler
408
+ VALUE = TEXTNUM ## Omvandlar ett textargument till ett tal
lib/phpExcel/PHPExcel/locale/tr/config CHANGED
File without changes
lib/phpExcel/PHPExcel/locale/tr/functions CHANGED
File without changes
readme.txt CHANGED
@@ -4,8 +4,8 @@ Author URI: http://tms-plugins.com/
4
  Plugin URI: http://wpdatatables.com/
5
  Tags: tables, wpdatatables, tables from excel, tables from CSV, datatables
6
  Requires at least: 3.0.1
7
- Tested up to: 4.7
8
- Stable tag: 1.2.2
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -126,6 +126,9 @@ This can be changed from “Number format” drop-down menu in the wpDataTables
126
 
127
  == Changelog ==
128
 
 
 
 
129
  = 1.2.2 =
130
  * Security issues fixed for all save actions.
131
 
4
  Plugin URI: http://wpdatatables.com/
5
  Tags: tables, wpdatatables, tables from excel, tables from CSV, datatables
6
  Requires at least: 3.0.1
7
+ Tested up to: 4.8
8
+ Stable tag: 1.2.3
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
126
 
127
  == Changelog ==
128
 
129
+ = 1.2.3 =
130
+ * Security issues fixed for deleting and loading wpDataTable.
131
+
132
  = 1.2.2 =
133
  * Security issues fixed for all save actions.
134
 
source/class.date.wpdatacolumn.php CHANGED
@@ -9,6 +9,8 @@
9
  * @since May 2012
10
  */
11
 
 
 
12
  class DateWDTColumn extends WDTColumn {
13
 
14
  protected $_jsDataType = 'date';
9
  * @since May 2012
10
  */
11
 
12
+ defined('ABSPATH') or die("Cannot access pages directly.");
13
+
14
  class DateWDTColumn extends WDTColumn {
15
 
16
  protected $_jsDataType = 'date';
source/class.datetime.wpdatacolumn.php CHANGED
@@ -9,6 +9,8 @@
9
  * @since May 2012
10
  */
11
 
 
 
12
  class DateTimeWDTColumn extends WDTColumn {
13
 
14
  protected $_jsDataType = 'datetime';
9
  * @since May 2012
10
  */
11
 
12
+ defined('ABSPATH') or die("Cannot access pages directly.");
13
+
14
  class DateTimeWDTColumn extends WDTColumn {
15
 
16
  protected $_jsDataType = 'datetime';
source/class.email.wpdatacolumn.php CHANGED
@@ -1,4 +1,7 @@
1
  <?php
 
 
 
2
  class EmailWDTColumn extends WDTColumn {
3
 
4
  protected $_jsDataType = 'html';
1
  <?php
2
+
3
+ defined('ABSPATH') or die("Cannot access pages directly.");
4
+
5
  class EmailWDTColumn extends WDTColumn {
6
 
7
  protected $_jsDataType = 'html';
source/class.float.wpdatacolumn.php CHANGED
@@ -1,4 +1,7 @@
1
  <?php
 
 
 
2
  class FloatWDTColumn extends WDTColumn {
3
 
4
  protected $_jsDataType = 'formatted-num';
1
  <?php
2
+
3
+ defined('ABSPATH') or die("Cannot access pages directly.");
4
+
5
  class FloatWDTColumn extends WDTColumn {
6
 
7
  protected $_jsDataType = 'formatted-num';
source/class.image.wpdatacolumn.php CHANGED
@@ -1,4 +1,7 @@
1
  <?php
 
 
 
2
  class ImageWDTColumn extends WDTColumn {
3
 
4
  protected $_jsDataType = 'string';
1
  <?php
2
+
3
+ defined('ABSPATH') or die("Cannot access pages directly.");
4
+
5
  class ImageWDTColumn extends WDTColumn {
6
 
7
  protected $_jsDataType = 'string';
source/class.int.wpdatacolumn.php CHANGED
@@ -1,4 +1,7 @@
1
  <?php
 
 
 
2
  class IntWDTColumn extends WDTColumn {
3
 
4
  protected $_dataType = 'int';
1
  <?php
2
+
3
+ defined('ABSPATH') or die("Cannot access pages directly.");
4
+
5
  class IntWDTColumn extends WDTColumn {
6
 
7
  protected $_dataType = 'int';
source/class.link.wpdatacolumn.php CHANGED
@@ -1,4 +1,7 @@
1
  <?php
 
 
 
2
  class LinkWDTColumn extends WDTColumn {
3
 
4
  protected $_jsDataType = 'string';
1
  <?php
2
+
3
+ defined('ABSPATH') or die("Cannot access pages directly.");
4
+
5
  class LinkWDTColumn extends WDTColumn {
6
 
7
  protected $_jsDataType = 'string';
source/class.sql.php CHANGED
@@ -1,5 +1,7 @@
1
  <?php
2
 
 
 
3
  /**
4
  * MySQL abstract layer for the WPDataTables module
5
  *
1
  <?php
2
 
3
+ defined('ABSPATH') or die("Cannot access pages directly.");
4
+
5
  /**
6
  * MySQL abstract layer for the WPDataTables module
7
  *
source/class.string.wpdatacolumn.php CHANGED
@@ -1,4 +1,7 @@
1
  <?php
 
 
 
2
  class StringWDTColumn extends WDTColumn {
3
 
4
  protected $_dataType = 'string';
1
  <?php
2
+
3
+ defined('ABSPATH') or die("Cannot access pages directly.");
4
+
5
  class StringWDTColumn extends WDTColumn {
6
 
7
  protected $_dataType = 'string';
source/class.time.wpdatacolumn.php CHANGED
@@ -1,5 +1,7 @@
1
  <?php
2
 
 
 
3
  /**
4
  * Class IntColumn is a child column class used
5
  * to describe columns with float numeric content
1
  <?php
2
 
3
+ defined('ABSPATH') or die("Cannot access pages directly.");
4
+
5
  /**
6
  * Class IntColumn is a child column class used
7
  * to describe columns with float numeric content
source/class.tpl.php CHANGED
@@ -1,4 +1,7 @@
1
  <?php
 
 
 
2
  /**
3
  * Class PDTTpl is an extremely lightweight templater used to render tables
4
  * for the WPDataTables module.
1
  <?php
2
+
3
+ defined('ABSPATH') or die("Cannot access pages directly.");
4
+
5
  /**
6
  * Class PDTTpl is an extremely lightweight templater used to render tables
7
  * for the WPDataTables module.
source/class.wdtbrowsechartstable.php CHANGED
@@ -3,6 +3,8 @@
3
  * Browse charts for the admin panel
4
  */
5
 
 
 
6
  if( ! class_exists( 'WP_List_Table' ) ) {
7
  require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
8
  }
3
  * Browse charts for the admin panel
4
  */
5
 
6
+ defined('ABSPATH') or die("Cannot access pages directly.");
7
+
8
  if( ! class_exists( 'WP_List_Table' ) ) {
9
  require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
10
  }
source/class.wdtbrowsetable.php CHANGED
@@ -3,6 +3,8 @@
3
  * Browse table for the admin panel
4
  */
5
 
 
 
6
  if( ! class_exists( 'WP_List_Table' ) ) {
7
  require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
8
  }
@@ -75,7 +77,7 @@ class WDTBrowseTable extends WP_List_Table {
75
  function column_title($item){
76
  $actions = array(
77
  'edit' => '<a href="admin.php?page=wpdatatables-administration&action=edit&table_id='.$item['id'].'" title="'.__('Edit','wpdatatables').'">'.__('Edit','wpdatatables').'</a>',
78
- 'trash' => '<a class="submitdelete" title="'.__('Delete','wpdatatables').'" href="admin.php?page=wpdatatables-administration&action=delete&table_id='.$item['id'].'" rel="'.$item['id'].'">'.__('Delete','wpdatatables').'</a>'
79
  );
80
 
81
  return '<a href="admin.php?page=wpdatatables-administration&action=edit&table_id='.$item['id'].'">'.$item['title'].'</a> '.$this->row_actions($actions);
3
  * Browse table for the admin panel
4
  */
5
 
6
+ defined('ABSPATH') or die("Cannot access pages directly.");
7
+
8
  if( ! class_exists( 'WP_List_Table' ) ) {
9
  require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
10
  }
77
  function column_title($item){
78
  $actions = array(
79
  'edit' => '<a href="admin.php?page=wpdatatables-administration&action=edit&table_id='.$item['id'].'" title="'.__('Edit','wpdatatables').'">'.__('Edit','wpdatatables').'</a>',
80
+ 'trash' => '<a class="submitdelete" title="'.__('Delete','wpdatatables').'" href="'. wp_nonce_url('admin.php?page=wpdatatables-administration&action=delete&table_id=' . $item['id'] . '', 'wdtDeleteTableNonce', 'wdtNonce' ) .'" rel="'.$item['id'].'">'.__('Delete','wpdatatables').'</a>'
81
  );
82
 
83
  return '<a href="admin.php?page=wpdatatables-administration&action=edit&table_id='.$item['id'].'">'.$item['title'].'</a> '.$this->row_actions($actions);
source/class.wdtexception.php CHANGED
@@ -1,4 +1,7 @@
1
  <?php
 
 
 
2
  class WDTException extends Exception {
3
 
4
  public function __construct($message, $code = 0, Exception $previous = null) {
1
  <?php
2
+
3
+ defined('ABSPATH') or die("Cannot access pages directly.");
4
+
5
  class WDTException extends Exception {
6
 
7
  public function __construct($message, $code = 0, Exception $previous = null) {
source/class.wdttools.php CHANGED
@@ -1,5 +1,7 @@
1
  <?php
2
 
 
 
3
  class WDTTools {
4
 
5
  public static $remote_path = 'http://wpdatatables.com/version-info.php';
1
  <?php
2
 
3
+ defined('ABSPATH') or die("Cannot access pages directly.");
4
+
5
  class WDTTools {
6
 
7
  public static $remote_path = 'http://wpdatatables.com/version-info.php';
source/class.wpdatacolumn.php CHANGED
@@ -1,4 +1,7 @@
1
  <?php
 
 
 
2
  class WDTColumn {
3
 
4
  protected $_inputType = '';
1
  <?php
2
+
3
+ defined('ABSPATH') or die("Cannot access pages directly.");
4
+
5
  class WDTColumn {
6
 
7
  protected $_inputType = '';
source/class.wpdatatable.php CHANGED
@@ -3,6 +3,8 @@
3
  * Main engine of wpDataTables plugin
4
  */
5
 
 
 
6
  class WPDataTable {
7
 
8
  protected static $_columnClass = 'WDTColumn';
3
  * Main engine of wpDataTables plugin
4
  */
5
 
6
+ defined('ABSPATH') or die("Cannot access pages directly.");
7
+
8
  class WPDataTable {
9
 
10
  protected static $_columnClass = 'WDTColumn';
source/lang/albanian.inc.php CHANGED
File without changes
source/lang/arabic.inc.php CHANGED
File without changes
source/lang/azerbaijan.inc.php CHANGED
File without changes
source/lang/bangla.inc.php CHANGED
File without changes
source/lang/bulgarian.inc.php CHANGED
File without changes
source/lang/catalan.inc.php CHANGED
File without changes
source/lang/chinese.inc.php CHANGED
File without changes
source/lang/croatian.inc.php CHANGED
File without changes
source/lang/czech.inc.php CHANGED
File without changes
source/lang/danish.inc.php CHANGED
File without changes
source/lang/dutch.inc.php CHANGED
File without changes
source/lang/estonian.inc.php CHANGED
File without changes
source/lang/filipino.inc.php CHANGED
File without changes
source/lang/finnish.inc.php CHANGED
File without changes
source/lang/french.inc.php CHANGED
File without changes
source/lang/georgian.inc.php CHANGED
File without changes
source/lang/german.inc.php CHANGED
File without changes
source/lang/greek.inc.php CHANGED
File without changes
source/lang/hebrew.inc.php CHANGED
File without changes
source/lang/hindi.inc.php CHANGED
File without changes
source/lang/hungarian.inc.php CHANGED
File without changes
source/lang/indonesian.inc.php CHANGED
File without changes
source/lang/irish.inc.php CHANGED
File without changes
source/lang/italian.inc.php CHANGED
File without changes
source/lang/japanese.inc.php CHANGED
File without changes
source/lang/latvian.inc.php CHANGED
File without changes
source/lang/lithuanian.inc.php CHANGED
File without changes
source/lang/macedonian.inc.php CHANGED
File without changes
source/lang/norwegian.inc.php CHANGED
File without changes
source/lang/persian.inc.php CHANGED
File without changes
source/lang/polish.inc.php CHANGED
File without changes
source/lang/portuguese.inc.php CHANGED
File without changes
source/lang/portuguese_brazil.inc.php CHANGED
File without changes
source/lang/romanian.inc.php CHANGED
File without changes
source/lang/russian.inc.php CHANGED
File without changes
source/lang/serbian.inc.php CHANGED
File without changes
source/lang/slovak.inc.php CHANGED
File without changes
source/lang/slovenian.inc.php CHANGED
File without changes
source/lang/spanish.inc.php CHANGED
File without changes
source/lang/swedish.inc.php CHANGED
File without changes
source/lang/thai.inc.php CHANGED
File without changes
source/lang/turkish.inc.php CHANGED
File without changes
source/lang/ukranian.inc.php CHANGED
File without changes
source/lang/urdu.inc.php CHANGED
File without changes
source/lang/vietnamese.inc.php CHANGED
File without changes
templates/addons.inc.php CHANGED
@@ -1,3 +1,5 @@
 
 
1
  <div id="wdtPreloadLayer" class="overlayed">
2
  </div>
3
 
1
+ <?php defined('ABSPATH') or die("Cannot access pages directly."); ?>
2
+
3
  <div id="wdtPreloadLayer" class="overlayed">
4
  </div>
5
 
templates/browse.inc.php CHANGED
@@ -1,3 +1,5 @@
 
 
1
  <div id="wdtPreloadLayer" class="overlayed">
2
  </div>
3
 
@@ -7,6 +9,7 @@
7
 
8
  <form method="post" action="<?php echo admin_url('admin.php?page=wpdatatables-administration'); ?>" id="wpDataTablesBrowseForm">
9
  <?php echo $tableHTML; ?>
 
10
  </form>
11
 
12
  </div>
@@ -89,7 +92,7 @@ jQuery(document).ready(function(){
89
 
90
  });
91
 
92
- jQuery('#doaction').click(function(e){
93
  e.preventDefault();
94
 
95
  if(jQuery('#bulk-action-selector-top').val() == ''){ return; }
1
+ <?php defined('ABSPATH') or die("Cannot access pages directly."); ?>
2
+
3
  <div id="wdtPreloadLayer" class="overlayed">
4
  </div>
5
 
9
 
10
  <form method="post" action="<?php echo admin_url('admin.php?page=wpdatatables-administration'); ?>" id="wpDataTablesBrowseForm">
11
  <?php echo $tableHTML; ?>
12
+ <?php wp_nonce_field( 'wdtDeleteTableNonce', 'wdtNonce' ); ?>
13
  </form>
14
 
15
  </div>
92
 
93
  });
94
 
95
+ jQuery('#doaction, #doaction2').click(function(e){
96
  e.preventDefault();
97
 
98
  if(jQuery('#bulk-action-selector-top').val() == ''){ return; }
templates/browse_charts.inc.php CHANGED
@@ -1,3 +1,5 @@
 
 
1
  <div id="wdtPreloadLayer" class="overlayed">
2
  </div>
3
 
1
+ <?php defined('ABSPATH') or die("Cannot access pages directly."); ?>
2
+
3
  <div id="wdtPreloadLayer" class="overlayed">
4
  </div>
5
 
templates/chart_js_template.inc.php CHANGED
@@ -1,3 +1,5 @@
 
 
1
  <script type="text/javascript">
2
  if(typeof wpDataTablesCharts == 'undefined'){
3
  var wpDataTablesCharts = [];
1
+ <?php defined('ABSPATH') or die("Cannot access pages directly."); ?>
2
+
3
  <script type="text/javascript">
4
  if(typeof wpDataTablesCharts == 'undefined'){
5
  var wpDataTablesCharts = [];
templates/chart_wizard.inc.php CHANGED
@@ -1,3 +1,5 @@
 
 
1
  <?php if( isset( $chartObj ) ) { ?>
2
  <script type='text/javascript'>var editing_chart_data= {render_data: <?php echo json_encode( $chartObj->getRenderData() ); ?>, highcharts_render_data: <?php echo json_encode( $chartObj->getHighchartsRenderData() ); ?>, engine: "<?php echo $chartObj->getEngine();?>", type: "<?php echo $chartObj->getType(); ?>", selected_columns: <?php echo json_encode( $chartObj->getSelectedColumns() ) ?>, range_type: "<?php echo $chartObj->getRangeType() ?>"<?php if( $chartObj->getRangeType() == 'picked_range' ){ ?>, row_range: <?php echo json_encode( $chartObj->getRowRange() ); } ?>, title: "<?php echo $chartObj->getTitle(); ?>", follow_filtering: <?php echo (int) $chartObj->getFollowFiltering(); ?>, wpdatatable_id: <?php echo $chartObj->getwpDataTableId(); ?> };</script>
3
  <?php } ?>
1
+ <?php defined('ABSPATH') or die("Cannot access pages directly."); ?>
2
+
3
  <?php if( isset( $chartObj ) ) { ?>
4
  <script type='text/javascript'>var editing_chart_data= {render_data: <?php echo json_encode( $chartObj->getRenderData() ); ?>, highcharts_render_data: <?php echo json_encode( $chartObj->getHighchartsRenderData() ); ?>, engine: "<?php echo $chartObj->getEngine();?>", type: "<?php echo $chartObj->getType(); ?>", selected_columns: <?php echo json_encode( $chartObj->getSelectedColumns() ) ?>, range_type: "<?php echo $chartObj->getRangeType() ?>"<?php if( $chartObj->getRangeType() == 'picked_range' ){ ?>, row_range: <?php echo json_encode( $chartObj->getRowRange() ); } ?>, title: "<?php echo $chartObj->getTitle(); ?>", follow_filtering: <?php echo (int) $chartObj->getFollowFiltering(); ?>, wpdatatable_id: <?php echo $chartObj->getwpDataTableId(); ?> };</script>
5
  <?php } ?>
templates/constructor.inc.php CHANGED
@@ -1,3 +1,5 @@
 
 
1
  <div class="wpDataTables metabox-holder">
2
  <div id="wdtPreloadLayer" class="overlayed">
3
  </div>
1
+ <?php defined('ABSPATH') or die("Cannot access pages directly."); ?>
2
+
3
  <div class="wpDataTables metabox-holder">
4
  <div id="wdtPreloadLayer" class="overlayed">
5
  </div>
templates/edit_table.inc.php CHANGED
@@ -1,3 +1,5 @@
 
 
1
  <div class="wpDataTables metabox-holder toplevel_page_wpdatatables-administration">
2
  <div id="wdtPreloadLayer" class="overlayed">
3
  </div>
@@ -10,7 +12,7 @@
10
  <h2>
11
  <?php echo $wpShowTitle ?>
12
  <?php if (!empty($table_id)) { ?>
13
- <a href="admin.php?page=wpdatatables-administration&action=delete&table_id=<?php echo $table_id ?>" class="add-new-h2 submitdelete"><?php _e('Delete','wpdatatables');?></a>
14
  <?php } ?>
15
  </h2>
16
  <div id="message" class="updated" <?php if (empty($table_id)) { ?>style="display: none;"<?php } ?> >
1
+ <?php defined('ABSPATH') or die("Cannot access pages directly."); ?>
2
+
3
  <div class="wpDataTables metabox-holder toplevel_page_wpdatatables-administration">
4
  <div id="wdtPreloadLayer" class="overlayed">
5
  </div>
12
  <h2>
13
  <?php echo $wpShowTitle ?>
14
  <?php if (!empty($table_id)) { ?>
15
+ <a href="<?php echo wp_nonce_url('admin.php?page=wpdatatables-administration&action=delete&table_id=' . $table_id . '', 'wdtDeleteTableNonce', 'wdtNonce' ) ?>" class="add-new-h2 submitdelete"><?php _e('Delete','wpdatatables');?></a>
16
  <?php } ?>
17
  </h2>
18
  <div id="message" class="updated" <?php if (empty($table_id)) { ?>style="display: none;"<?php } ?> >
templates/settings.inc.php CHANGED
@@ -1,3 +1,5 @@
 
 
1
  <div class="wpDataTables metabox-holder">
2
  <div id="wdtPreloadLayer" class="overlayed">
3
  </div>
1
+ <?php defined('ABSPATH') or die("Cannot access pages directly."); ?>
2
+
3
  <div class="wpDataTables metabox-holder">
4
  <div id="wdtPreloadLayer" class="overlayed">
5
  </div>
templates/wpdatatables_excel_table_main.inc.php CHANGED
@@ -1,3 +1,5 @@
 
 
1
  <?php
2
  /**
3
  * Template file for the plain HTML table
1
+ <?php defined('ABSPATH') or die("Cannot access pages directly."); ?>
2
+
3
  <?php
4
  /**
5
  * Template file for the plain HTML table
templates/wpdatatables_table_main.inc.php CHANGED
@@ -1,3 +1,5 @@
 
 
1
  <?php
2
  /**
3
  * Template file for the plain HTML table
1
+ <?php defined('ABSPATH') or die("Cannot access pages directly."); ?>
2
+
3
  <?php
4
  /**
5
  * Template file for the plain HTML table
templates/wrap_template.inc.php CHANGED
@@ -1,3 +1,5 @@
 
 
1
  <div class="">
2
 
3
  <?php echo $wdt_output_table ?>
1
+ <?php defined('ABSPATH') or die("Cannot access pages directly."); ?>
2
+
3
  <div class="">
4
 
5
  <?php echo $wdt_output_table ?>
wpdatatables.php CHANGED
@@ -8,7 +8,7 @@ Plugin Name: wpDataTables
8
  Plugin URI: http://tms-plugins.com
9
  Description: Add interactive tables easily from any input source
10
 
11
- Version: Lite 1.2.2
12
  Author: TMS-Plugins
13
  Author URI: http://tms-plugins.com
14
  Text Domain: wpdatatables
@@ -17,6 +17,8 @@ Domain Path: /languages
17
  ?>
18
  <?php
19
 
 
 
20
  /******************************
21
  * Includes and configuration *
22
  ******************************/
8
  Plugin URI: http://tms-plugins.com
9
  Description: Add interactive tables easily from any input source
10
 
11
+ Version: Lite 1.2.3
12
  Author: TMS-Plugins
13
  Author URI: http://tms-plugins.com
14
  Text Domain: wpdatatables
17
  ?>
18
  <?php
19
 
20
+ defined('ABSPATH') or die("Cannot access pages directly.");
21
+
22
  /******************************
23
  * Includes and configuration *
24
  ******************************/