Version Description
- Security issues fixed for deleting and loading wpDataTable.
Download this release
Release Info
Developer | wpDataTables |
Plugin | wpDataTables Lite |
Version | 1.2.3 |
Comparing to | |
See all releases |
Code changes from version 1.2.2 to 1.2.3
- Readme_documentation.pdf +0 -0
- assets/css/datatables.responsive.css +0 -0
- assets/css/datepicker.default.css +0 -0
- assets/css/datepicker.default.date.css +0 -0
- assets/css/datepicker.default.time.css +0 -0
- assets/css/handsontable.full.min.css +0 -0
- assets/css/icheck.minimal.css +0 -0
- assets/css/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- assets/css/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- assets/css/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- assets/css/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- assets/css/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- assets/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- assets/css/images/ui-icons_222222_256x240.png +0 -0
- assets/css/images/ui-icons_2e83ff_256x240.png +0 -0
- assets/css/images/ui-icons_454545_256x240.png +0 -0
- assets/css/images/ui-icons_888888_256x240.png +0 -0
- assets/css/images/ui-icons_cd0a0a_256x240.png +0 -0
- assets/css/jquery-ui.css +1177 -0
- assets/css/jquery-ui.min.css +0 -0
- assets/css/jquery.dataTables.css +0 -0
- assets/css/jquery.fs.selecter-arrow.png +0 -0
- assets/css/jquery.fs.selecter.css +0 -0
- assets/css/jquery.fs.tipper-icon.png +0 -0
- assets/css/jquery.remodal.css +0 -0
- assets/css/jquery.tagsinput.min.css +0 -0
- assets/css/minimal.png +0 -0
- assets/css/minimal@2x.png +0 -0
- assets/css/phpDataTables.css +0 -0
- assets/css/wpDataTablesSkin.css +0 -0
- assets/css/wpDataTablesSkin_1.css +0 -0
- assets/css/wpdatatables-excel.min.css +0 -0
- assets/css/wpdatatables.min.css +0 -0
- assets/css/wpdatatables_admin.css +0 -0
- assets/fonts/wpdatatables-icons.eot +0 -0
- assets/fonts/wpdatatables-icons.svg +0 -0
- assets/fonts/wpdatatables-icons.ttf +0 -0
- assets/fonts/wpdatatables-icons.woff +0 -0
- assets/fonts/wpdatatablesicons-base.eot +0 -0
- assets/fonts/wpdatatablesicons-base.svg +0 -0
- assets/fonts/wpdatatablesicons-base.ttf +0 -0
- assets/fonts/wpdatatablesicons-base.woff +0 -0
- assets/img/buttonplus.png +0 -0
- assets/img/chart_thumbs/google_area_chart.jpg +0 -0
- assets/img/chart_thumbs/google_bar_chart.jpg +0 -0
- assets/img/chart_thumbs/google_bubble_chart.jpg +0 -0
- assets/img/chart_thumbs/google_candlestick_chart.jpg +0 -0
- assets/img/chart_thumbs/google_column_chart.jpg +0 -0
- assets/img/chart_thumbs/google_donut_chart.jpg +0 -0
- assets/img/chart_thumbs/google_gauge_chart.jpg +0 -0
- assets/img/chart_thumbs/google_histogram.jpg +0 -0
- assets/img/chart_thumbs/google_line_chart.jpg +0 -0
- assets/img/chart_thumbs/google_pie_chart.jpg +0 -0
- assets/img/chart_thumbs/google_scatter_chart.jpg +0 -0
- assets/img/chart_thumbs/google_stepped_area_chart.jpg +0 -0
- assets/img/chart_thumbs/highcharts_3d_column_chart.jpg +0 -0
- assets/img/chart_thumbs/highcharts_3d_donut_chart.jpg +0 -0
- assets/img/chart_thumbs/highcharts_3d_pie_chart.jpg +0 -0
- assets/img/chart_thumbs/highcharts_angular_gauge_chart.jpg +0 -0
- assets/img/chart_thumbs/highcharts_basic_area_chart.jpg +0 -0
- assets/img/chart_thumbs/highcharts_basic_bar_chart.jpg +0 -0
- assets/img/chart_thumbs/highcharts_basic_column_chart.jpg +0 -0
- assets/img/chart_thumbs/highcharts_donut_chart.jpg +0 -0
- assets/img/chart_thumbs/highcharts_line_chart.jpg +0 -0
- assets/img/chart_thumbs/highcharts_pie_chart.jpg +0 -0
- assets/img/chart_thumbs/highcharts_pie_with_gradient_chart.jpg +0 -0
- assets/img/chart_thumbs/highcharts_scatter_plot.jpg +0 -0
- assets/img/chart_thumbs/highcharts_solid_gauge_chart.jpg +0 -0
- assets/img/chart_thumbs/highcharts_stacked_area_chart.jpg +0 -0
- assets/img/chart_thumbs/highcharts_stacked_bar_chart.jpg +0 -0
- assets/img/chart_thumbs/highcharts_stacked_column_chart.jpg +0 -0
- assets/img/document-blank-icon.png +0 -0
- assets/img/icons.png +0 -0
- assets/img/loadingAnimation.gif +0 -0
- assets/img/reportbuilder_addon.png +0 -0
- assets/img/spinner.gif +0 -0
- assets/img/vc-charts-icon.png +0 -0
- assets/img/vc-icon.png +0 -0
- assets/img/wpdatatables-logo.png +0 -0
- assets/index.html +0 -0
- assets/js/colorpicker/bg.png +0 -0
- assets/js/colorpicker/hue.png +0 -0
- assets/js/colorpicker/jquery.modcoder.excolor.js +13 -0
- assets/js/colorpicker/ok.png +0 -0
- assets/js/colorpicker/sel.gif +0 -0
- assets/js/colorpicker/shbg.png +0 -0
- assets/js/colorpicker/slider.gif +0 -0
- assets/js/colorpicker/transp.gif +0 -0
- assets/js/colorpicker/transp0.gif +0 -0
- assets/js/datepicker/legacy.js +10 -0
- assets/js/datepicker/picker.date.js +5 -0
- assets/js/datepicker/picker.js +7 -0
- assets/js/datepicker/picker.time.js +5 -0
- assets/js/export-tools/buttons.bootstrap.js +0 -0
- assets/js/export-tools/buttons.bootstrap.min.js +0 -0
- assets/js/export-tools/buttons.bootstrap4.js +0 -0
- assets/js/export-tools/buttons.bootstrap4.min.js +0 -0
- assets/js/export-tools/buttons.colVis.js +0 -0
- assets/js/export-tools/buttons.colVis.min.js +0 -0
- assets/js/export-tools/buttons.dataTables.css +0 -0
- assets/js/export-tools/buttons.flash.js +0 -0
- assets/js/export-tools/buttons.flash.min.js +0 -0
- assets/js/export-tools/buttons.foundation.js +0 -0
- assets/js/export-tools/buttons.foundation.min.js +0 -0
- assets/js/export-tools/buttons.html5.js +0 -0
- assets/js/export-tools/buttons.html5.min.js +0 -0
- assets/js/export-tools/buttons.jqueryui.js +0 -0
- assets/js/export-tools/buttons.jqueryui.min.js +0 -0
- assets/js/export-tools/buttons.print.js +0 -0
- assets/js/export-tools/buttons.print.min.js +0 -0
- assets/js/export-tools/dataTables.buttons.js +0 -0
- assets/js/export-tools/dataTables.buttons.min.js +0 -0
- assets/js/export-tools/jszip.js +0 -0
- assets/js/export-tools/jszip.min.js +0 -0
- assets/js/export-tools/pdfmake.js +12 -12
- assets/js/export-tools/pdfmake.min.js +0 -0
- assets/js/export-tools/vfs_fonts.js +0 -0
- assets/js/fileupload/jquery.fileupload-jquery-ui.js +144 -0
- assets/js/fileupload/jquery.fileupload-process.js +172 -0
- assets/js/fileupload/jquery.fileupload-ui.js +699 -0
- assets/js/fileupload/jquery.fileupload.js +1367 -0
- assets/js/fileupload/jquery.iframe-transport.js +208 -0
- assets/js/handsontable/handsontable.full.js +0 -0
- assets/js/handsontable/handsontable.full.min.js +0 -0
- assets/js/icheck/icheck.min.js +11 -0
- assets/js/jquery-datatables/FixedHeader.js +0 -0
- assets/js/jquery-datatables/jquery.dataTables.min.js +0 -0
- assets/js/jquery-datatables/jquery.dataTables.rowGrouping.js +0 -0
- assets/js/jquery-datatables/jquery.dataTables.rowGrouping.min.js +0 -0
- assets/js/jquery-datatables/media/swf/copy_cvs_xls_pdf.swf +0 -0
- assets/js/jsrender/jsrender.min.js +3 -3
- assets/js/jsrender/jsrender.min.js.map +0 -0
- assets/js/maskmoney/jquery.maskMoney.js +392 -0
- assets/js/moment/LICENSE +0 -0
- assets/js/moment/locale/af.js +0 -0
- assets/js/moment/locale/ar-ma.js +0 -0
- assets/js/moment/locale/ar-sa.js +0 -0
- assets/js/moment/locale/ar-tn.js +0 -0
- assets/js/moment/locale/ar.js +0 -0
- assets/js/moment/locale/az.js +0 -0
- assets/js/moment/locale/be.js +0 -0
- assets/js/moment/locale/bg.js +0 -0
- assets/js/moment/locale/bn.js +0 -0
- assets/js/moment/locale/bo.js +0 -0
- assets/js/moment/locale/br.js +0 -0
- assets/js/moment/locale/bs.js +0 -0
- assets/js/moment/locale/ca.js +0 -0
- assets/js/moment/locale/cs.js +0 -0
- assets/js/moment/locale/cv.js +0 -0
- assets/js/moment/locale/cy.js +0 -0
- assets/js/moment/locale/da.js +0 -0
- assets/js/moment/locale/de-at.js +0 -0
- assets/js/moment/locale/de.js +0 -0
- assets/js/moment/locale/dv.js +0 -0
- assets/js/moment/locale/el.js +0 -0
- assets/js/moment/locale/en-au.js +0 -0
- assets/js/moment/locale/en-ca.js +0 -0
- assets/js/moment/locale/en-gb.js +0 -0
- assets/js/moment/locale/en-ie.js +0 -0
- assets/js/moment/locale/en-nz.js +0 -0
- assets/js/moment/locale/eo.js +0 -0
- assets/js/moment/locale/es.js +0 -0
- assets/js/moment/locale/et.js +0 -0
- assets/js/moment/locale/eu.js +0 -0
- assets/js/moment/locale/fa.js +0 -0
- assets/js/moment/locale/fi.js +0 -0
- assets/js/moment/locale/fo.js +0 -0
- assets/js/moment/locale/fr-ca.js +0 -0
- assets/js/moment/locale/fr-ch.js +0 -0
- assets/js/moment/locale/fr.js +0 -0
- assets/js/moment/locale/fy.js +0 -0
- assets/js/moment/locale/gd.js +0 -0
- assets/js/moment/locale/gl.js +0 -0
- assets/js/moment/locale/he.js +0 -0
- assets/js/moment/locale/hi.js +0 -0
- assets/js/moment/locale/hr.js +0 -0
- assets/js/moment/locale/hu.js +0 -0
- assets/js/moment/locale/hy-am.js +0 -0
- assets/js/moment/locale/id.js +0 -0
- assets/js/moment/locale/is.js +0 -0
- assets/js/moment/locale/it.js +0 -0
- assets/js/moment/locale/ja.js +0 -0
- assets/js/moment/locale/jv.js +0 -0
- assets/js/moment/locale/ka.js +0 -0
- assets/js/moment/locale/kk.js +0 -0
- assets/js/moment/locale/km.js +0 -0
- assets/js/moment/locale/ko.js +0 -0
- assets/js/moment/locale/lb.js +0 -0
- assets/js/moment/locale/lo.js +0 -0
- assets/js/moment/locale/lt.js +0 -0
- assets/js/moment/locale/lv.js +0 -0
- assets/js/moment/locale/me.js +0 -0
- assets/js/moment/locale/mk.js +0 -0
- assets/js/moment/locale/ml.js +0 -0
- assets/js/moment/locale/mr.js +0 -0
- assets/js/moment/locale/ms-my.js +0 -0
- assets/js/moment/locale/ms.js +0 -0
- assets/js/moment/locale/my.js +0 -0
- assets/js/moment/locale/nb.js +0 -0
- assets/js/moment/locale/ne.js +0 -0
- assets/js/moment/locale/nl.js +0 -0
- assets/js/moment/locale/nn.js +0 -0
- assets/js/moment/locale/pl.js +0 -0
- assets/js/moment/locale/pt-br.js +0 -0
- assets/js/moment/locale/pt.js +0 -0
- assets/js/moment/locale/ro.js +0 -0
- assets/js/moment/locale/ru.js +0 -0
- assets/js/moment/locale/se.js +0 -0
- assets/js/moment/locale/si.js +0 -0
- assets/js/moment/locale/sk.js +0 -0
- assets/js/moment/locale/sl.js +0 -0
- assets/js/moment/locale/sq.js +0 -0
- assets/js/moment/locale/sr-cyrl.js +0 -0
- assets/js/moment/locale/sr.js +0 -0
- assets/js/moment/locale/sv.js +0 -0
- assets/js/moment/locale/sw.js +0 -0
- assets/js/moment/locale/ta.js +0 -0
- assets/js/moment/locale/te.js +0 -0
- assets/js/moment/locale/th.js +0 -0
- assets/js/moment/locale/tl-ph.js +0 -0
- assets/js/moment/locale/tlh.js +0 -0
- assets/js/moment/locale/tr.js +0 -0
- assets/js/moment/locale/tzl.js +0 -0
- assets/js/moment/locale/tzm-latn.js +0 -0
- assets/js/moment/locale/tzm.js +0 -0
- assets/js/moment/locale/uk.js +0 -0
- assets/js/moment/locale/uz.js +0 -0
- assets/js/moment/locale/vi.js +0 -0
- assets/js/moment/locale/zh-cn.js +0 -0
- assets/js/moment/locale/zh-tw.js +0 -0
- assets/js/moment/moment.js +0 -0
- assets/js/php-datatables/wpdatatables.funcs.js +334 -334
- assets/js/php-datatables/wpdatatables.funcs.min.js +0 -0
- assets/js/popup/jquery.remodal.min.js +0 -0
- assets/js/selecter/jquery.fs.selecter.min.js +0 -0
- assets/js/slider.gif +0 -0
- assets/js/tagsinput/jquery.tagsinput.js +0 -0
- assets/js/tagsinput/jquery.tagsinput.min.js +0 -0
- assets/js/urijs/URI.min.js +0 -0
- assets/js/wpdatatables/wpdatatables.js +0 -0
- assets/js/wpdatatables/wpdatatables.min.js +0 -0
- assets/js/wpdatatables/wpdatatables_admin.js +0 -0
- assets/js/wpdatatables/wpdatatables_chart_wizard.js +0 -0
- assets/js/wpdatatables/wpdatatables_edit_table.js +0 -0
- assets/js/wpdatatables/wpdatatables_mce.js +0 -0
- config/config.inc.php +0 -0
- controllers/wdt_admin.php +12 -7
- controllers/wdt_admin_ajax_actions.php +2 -0
- controllers/wdt_functions.php +4 -3
- languages/en_US/wpdatatables.mo +0 -0
- languages/en_US/wpdatatables.po +0 -0
- languages/nl_NL/nl_NL.mo +0 -0
- languages/nl_NL/nl_NL.po +0 -0
- languages/nl_NL/wpdatatables-nl_NL.mo +0 -0
- languages/nl_NL/wpdatatables-nl_NL.po +0 -0
- languages/ru_RU/wpdatatables-ru_RU.mo +0 -0
- languages/ru_RU/wpdatatables-ru_RU.po +0 -0
- lib/phpExcel/PHPExcel.php +0 -0
- lib/phpExcel/PHPExcel/Autoloader.php +0 -0
- lib/phpExcel/PHPExcel/CachedObjectStorage/APC.php +0 -0
- lib/phpExcel/PHPExcel/CachedObjectStorage/CacheBase.php +0 -0
- lib/phpExcel/PHPExcel/CachedObjectStorage/DiscISAM.php +0 -0
- lib/phpExcel/PHPExcel/CachedObjectStorage/ICache.php +0 -0
- lib/phpExcel/PHPExcel/CachedObjectStorage/Igbinary.php +0 -0
- lib/phpExcel/PHPExcel/CachedObjectStorage/Memcache.php +0 -0
- lib/phpExcel/PHPExcel/CachedObjectStorage/Memory.php +0 -0
- lib/phpExcel/PHPExcel/CachedObjectStorage/MemoryGZip.php +0 -0
- lib/phpExcel/PHPExcel/CachedObjectStorage/MemorySerialized.php +0 -0
- lib/phpExcel/PHPExcel/CachedObjectStorage/PHPTemp.php +0 -0
- lib/phpExcel/PHPExcel/CachedObjectStorage/SQLite.php +0 -0
- lib/phpExcel/PHPExcel/CachedObjectStorage/SQLite3.php +0 -0
- lib/phpExcel/PHPExcel/CachedObjectStorage/Wincache.php +0 -0
- lib/phpExcel/PHPExcel/CachedObjectStorageFactory.php +0 -0
- lib/phpExcel/PHPExcel/CalcEngine/CyclicReferenceStack.php +0 -0
- lib/phpExcel/PHPExcel/CalcEngine/Logger.php +0 -0
- lib/phpExcel/PHPExcel/Calculation.php +0 -0
- lib/phpExcel/PHPExcel/Calculation/Database.php +0 -0
- lib/phpExcel/PHPExcel/Calculation/DateTime.php +0 -0
- lib/phpExcel/PHPExcel/Calculation/Engineering.php +0 -0
- lib/phpExcel/PHPExcel/Calculation/Exception.php +0 -0
- lib/phpExcel/PHPExcel/Calculation/ExceptionHandler.php +0 -0
- lib/phpExcel/PHPExcel/Calculation/Financial.php +0 -0
- lib/phpExcel/PHPExcel/Calculation/FormulaParser.php +0 -0
- lib/phpExcel/PHPExcel/Calculation/FormulaToken.php +0 -0
- lib/phpExcel/PHPExcel/Calculation/Function.php +0 -0
- lib/phpExcel/PHPExcel/Calculation/Functions.php +0 -0
- lib/phpExcel/PHPExcel/Calculation/Logical.php +0 -0
- lib/phpExcel/PHPExcel/Calculation/LookupRef.php +0 -0
- lib/phpExcel/PHPExcel/Calculation/MathTrig.php +0 -0
- lib/phpExcel/PHPExcel/Calculation/Statistical.php +0 -0
- lib/phpExcel/PHPExcel/Calculation/TextData.php +0 -0
- lib/phpExcel/PHPExcel/Calculation/Token/Stack.php +0 -0
- lib/phpExcel/PHPExcel/Calculation/functionlist.txt +0 -0
- lib/phpExcel/PHPExcel/Cell.php +0 -0
- lib/phpExcel/PHPExcel/Cell/AdvancedValueBinder.php +0 -0
- lib/phpExcel/PHPExcel/Cell/DataType.php +0 -0
- lib/phpExcel/PHPExcel/Cell/DataValidation.php +0 -0
- lib/phpExcel/PHPExcel/Cell/DefaultValueBinder.php +0 -0
- lib/phpExcel/PHPExcel/Cell/Hyperlink.php +0 -0
- lib/phpExcel/PHPExcel/Cell/IValueBinder.php +0 -0
- lib/phpExcel/PHPExcel/Chart.php +0 -0
- lib/phpExcel/PHPExcel/Chart/Axis.php +0 -0
- lib/phpExcel/PHPExcel/Chart/DataSeries.php +0 -0
- lib/phpExcel/PHPExcel/Chart/DataSeriesValues.php +0 -0
- lib/phpExcel/PHPExcel/Chart/Exception.php +0 -0
- lib/phpExcel/PHPExcel/Chart/GridLines.php +0 -0
- lib/phpExcel/PHPExcel/Chart/Layout.php +0 -0
- lib/phpExcel/PHPExcel/Chart/Legend.php +0 -0
- lib/phpExcel/PHPExcel/Chart/PlotArea.php +0 -0
- lib/phpExcel/PHPExcel/Chart/Properties.php +0 -0
- lib/phpExcel/PHPExcel/Chart/Renderer/PHP Charting Libraries.txt +19 -19
- lib/phpExcel/PHPExcel/Chart/Renderer/jpgraph.php +0 -0
- lib/phpExcel/PHPExcel/Chart/Title.php +0 -0
- lib/phpExcel/PHPExcel/Comment.php +0 -0
- lib/phpExcel/PHPExcel/DocumentProperties.php +0 -0
- lib/phpExcel/PHPExcel/DocumentSecurity.php +0 -0
- lib/phpExcel/PHPExcel/Exception.php +0 -0
- lib/phpExcel/PHPExcel/HashTable.php +0 -0
- lib/phpExcel/PHPExcel/Helper/HTML.php +0 -0
- lib/phpExcel/PHPExcel/IComparable.php +0 -0
- lib/phpExcel/PHPExcel/IOFactory.php +0 -0
- lib/phpExcel/PHPExcel/NamedRange.php +0 -0
- lib/phpExcel/PHPExcel/Reader/Abstract.php +0 -0
- lib/phpExcel/PHPExcel/Reader/CSV.php +0 -0
- lib/phpExcel/PHPExcel/Reader/DefaultReadFilter.php +0 -0
- lib/phpExcel/PHPExcel/Reader/Excel2003XML.php +0 -0
- lib/phpExcel/PHPExcel/Reader/Excel2007.php +0 -0
- lib/phpExcel/PHPExcel/Reader/Excel2007/Chart.php +0 -0
- lib/phpExcel/PHPExcel/Reader/Excel2007/Theme.php +0 -0
- lib/phpExcel/PHPExcel/Reader/Excel5.php +0 -0
- lib/phpExcel/PHPExcel/Reader/Excel5/Color.php +0 -0
- lib/phpExcel/PHPExcel/Reader/Excel5/Color/BIFF5.php +0 -0
- lib/phpExcel/PHPExcel/Reader/Excel5/Color/BIFF8.php +0 -0
- lib/phpExcel/PHPExcel/Reader/Excel5/Color/BuiltIn.php +0 -0
- lib/phpExcel/PHPExcel/Reader/Excel5/ErrorCode.php +0 -0
- lib/phpExcel/PHPExcel/Reader/Excel5/Escher.php +0 -0
- lib/phpExcel/PHPExcel/Reader/Excel5/MD5.php +0 -0
- lib/phpExcel/PHPExcel/Reader/Excel5/RC4.php +0 -0
- lib/phpExcel/PHPExcel/Reader/Excel5/Style/Border.php +0 -0
- lib/phpExcel/PHPExcel/Reader/Excel5/Style/FillPattern.php +0 -0
- lib/phpExcel/PHPExcel/Reader/Exception.php +0 -0
- lib/phpExcel/PHPExcel/Reader/Gnumeric.php +0 -0
- lib/phpExcel/PHPExcel/Reader/HTML.php +0 -0
- lib/phpExcel/PHPExcel/Reader/IReadFilter.php +0 -0
- lib/phpExcel/PHPExcel/Reader/IReader.php +0 -0
- lib/phpExcel/PHPExcel/Reader/OOCalc.php +0 -0
- lib/phpExcel/PHPExcel/Reader/SYLK.php +0 -0
- lib/phpExcel/PHPExcel/ReferenceHelper.php +0 -0
- lib/phpExcel/PHPExcel/RichText.php +0 -0
- lib/phpExcel/PHPExcel/RichText/ITextElement.php +0 -0
- lib/phpExcel/PHPExcel/RichText/Run.php +0 -0
- lib/phpExcel/PHPExcel/RichText/TextElement.php +0 -0
- lib/phpExcel/PHPExcel/Settings.php +0 -0
- lib/phpExcel/PHPExcel/Shared/CodePage.php +0 -0
- lib/phpExcel/PHPExcel/Shared/Date.php +0 -0
- lib/phpExcel/PHPExcel/Shared/Drawing.php +0 -0
- lib/phpExcel/PHPExcel/Shared/Escher.php +0 -0
- lib/phpExcel/PHPExcel/Shared/Escher/DgContainer.php +0 -0
- lib/phpExcel/PHPExcel/Shared/Escher/DgContainer/SpgrContainer.php +0 -0
- lib/phpExcel/PHPExcel/Shared/Escher/DgContainer/SpgrContainer/SpContainer.php +0 -0
- lib/phpExcel/PHPExcel/Shared/Escher/DggContainer.php +0 -0
- lib/phpExcel/PHPExcel/Shared/Escher/DggContainer/BstoreContainer.php +0 -0
- lib/phpExcel/PHPExcel/Shared/Escher/DggContainer/BstoreContainer/BSE.php +0 -0
- lib/phpExcel/PHPExcel/Shared/Escher/DggContainer/BstoreContainer/BSE/Blip.php +0 -0
- lib/phpExcel/PHPExcel/Shared/Excel5.php +0 -0
- lib/phpExcel/PHPExcel/Shared/File.php +0 -0
- lib/phpExcel/PHPExcel/Shared/Font.php +0 -0
- lib/phpExcel/PHPExcel/Shared/JAMA/CHANGELOG.TXT +0 -0
- lib/phpExcel/PHPExcel/Shared/JAMA/CholeskyDecomposition.php +0 -0
- lib/phpExcel/PHPExcel/Shared/JAMA/EigenvalueDecomposition.php +0 -0
- lib/phpExcel/PHPExcel/Shared/JAMA/LUDecomposition.php +0 -0
- lib/phpExcel/PHPExcel/Shared/JAMA/Matrix.php +0 -0
- lib/phpExcel/PHPExcel/Shared/JAMA/QRDecomposition.php +0 -0
- lib/phpExcel/PHPExcel/Shared/JAMA/SingularValueDecomposition.php +0 -0
- lib/phpExcel/PHPExcel/Shared/JAMA/examples/LMQuadTest.php +116 -0
- lib/phpExcel/PHPExcel/Shared/JAMA/examples/LagrangeInterpolation.php +59 -0
- lib/phpExcel/PHPExcel/Shared/JAMA/examples/LagrangeInterpolation2.php +59 -0
- lib/phpExcel/PHPExcel/Shared/JAMA/examples/LevenbergMarquardt.php +185 -0
- lib/phpExcel/PHPExcel/Shared/JAMA/examples/MagicSquareExample.php +182 -0
- lib/phpExcel/PHPExcel/Shared/JAMA/examples/Stats.php +1605 -0
- lib/phpExcel/PHPExcel/Shared/JAMA/examples/benchmark.php +263 -0
- lib/phpExcel/PHPExcel/Shared/JAMA/examples/polyfit.php +73 -0
- lib/phpExcel/PHPExcel/Shared/JAMA/examples/tile.php +78 -0
- lib/phpExcel/PHPExcel/Shared/JAMA/tests/TestMatrix.php +415 -0
- lib/phpExcel/PHPExcel/Shared/JAMA/utils/Error.php +0 -0
- lib/phpExcel/PHPExcel/Shared/JAMA/utils/Maths.php +0 -0
- lib/phpExcel/PHPExcel/Shared/OLE.php +0 -0
- lib/phpExcel/PHPExcel/Shared/OLE/ChainedBlockStream.php +0 -0
- lib/phpExcel/PHPExcel/Shared/OLE/PPS.php +0 -0
- lib/phpExcel/PHPExcel/Shared/OLE/PPS/File.php +0 -0
- lib/phpExcel/PHPExcel/Shared/OLE/PPS/Root.php +0 -0
- lib/phpExcel/PHPExcel/Shared/OLERead.php +0 -0
- lib/phpExcel/PHPExcel/Shared/PCLZip/gnu-lgpl.txt +504 -504
- lib/phpExcel/PHPExcel/Shared/PCLZip/pclzip.lib.php +0 -0
- lib/phpExcel/PHPExcel/Shared/PCLZip/readme.txt +421 -421
- lib/phpExcel/PHPExcel/Shared/PasswordHasher.php +0 -0
- lib/phpExcel/PHPExcel/Shared/String.php +0 -0
- lib/phpExcel/PHPExcel/Shared/TimeZone.php +0 -0
- lib/phpExcel/PHPExcel/Shared/XMLWriter.php +0 -0
- lib/phpExcel/PHPExcel/Shared/ZipArchive.php +0 -0
- lib/phpExcel/PHPExcel/Shared/ZipStreamWrapper.php +0 -0
- lib/phpExcel/PHPExcel/Shared/trend/bestFitClass.php +0 -0
- lib/phpExcel/PHPExcel/Shared/trend/exponentialBestFitClass.php +0 -0
- lib/phpExcel/PHPExcel/Shared/trend/linearBestFitClass.php +0 -0
- lib/phpExcel/PHPExcel/Shared/trend/logarithmicBestFitClass.php +0 -0
- lib/phpExcel/PHPExcel/Shared/trend/polynomialBestFitClass.php +0 -0
- lib/phpExcel/PHPExcel/Shared/trend/powerBestFitClass.php +0 -0
- lib/phpExcel/PHPExcel/Shared/trend/trendClass.php +0 -0
- lib/phpExcel/PHPExcel/Style.php +0 -0
- lib/phpExcel/PHPExcel/Style/Alignment.php +0 -0
- lib/phpExcel/PHPExcel/Style/Border.php +0 -0
- lib/phpExcel/PHPExcel/Style/Borders.php +0 -0
- lib/phpExcel/PHPExcel/Style/Color.php +0 -0
- lib/phpExcel/PHPExcel/Style/Conditional.php +0 -0
- lib/phpExcel/PHPExcel/Style/Fill.php +0 -0
- lib/phpExcel/PHPExcel/Style/Font.php +0 -0
- lib/phpExcel/PHPExcel/Style/NumberFormat.php +0 -0
- lib/phpExcel/PHPExcel/Style/Protection.php +0 -0
- lib/phpExcel/PHPExcel/Style/Supervisor.php +0 -0
- lib/phpExcel/PHPExcel/Worksheet.php +0 -0
- lib/phpExcel/PHPExcel/Worksheet/AutoFilter.php +0 -0
- lib/phpExcel/PHPExcel/Worksheet/AutoFilter/Column.php +0 -0
- lib/phpExcel/PHPExcel/Worksheet/AutoFilter/Column/Rule.php +0 -0
- lib/phpExcel/PHPExcel/Worksheet/BaseDrawing.php +0 -0
- lib/phpExcel/PHPExcel/Worksheet/CellIterator.php +0 -0
- lib/phpExcel/PHPExcel/Worksheet/Column.php +0 -0
- lib/phpExcel/PHPExcel/Worksheet/ColumnCellIterator.php +0 -0
- lib/phpExcel/PHPExcel/Worksheet/ColumnDimension.php +0 -0
- lib/phpExcel/PHPExcel/Worksheet/ColumnIterator.php +0 -0
- lib/phpExcel/PHPExcel/Worksheet/Dimension.php +0 -0
- lib/phpExcel/PHPExcel/Worksheet/Drawing.php +0 -0
- lib/phpExcel/PHPExcel/Worksheet/Drawing/Shadow.php +0 -0
- lib/phpExcel/PHPExcel/Worksheet/HeaderFooter.php +0 -0
- lib/phpExcel/PHPExcel/Worksheet/HeaderFooterDrawing.php +0 -0
- lib/phpExcel/PHPExcel/Worksheet/MemoryDrawing.php +0 -0
- lib/phpExcel/PHPExcel/Worksheet/PageMargins.php +0 -0
- lib/phpExcel/PHPExcel/Worksheet/PageSetup.php +0 -0
- lib/phpExcel/PHPExcel/Worksheet/Protection.php +0 -0
- lib/phpExcel/PHPExcel/Worksheet/Row.php +0 -0
- lib/phpExcel/PHPExcel/Worksheet/RowCellIterator.php +0 -0
- lib/phpExcel/PHPExcel/Worksheet/RowDimension.php +0 -0
- lib/phpExcel/PHPExcel/Worksheet/RowIterator.php +0 -0
- lib/phpExcel/PHPExcel/Worksheet/SheetView.php +0 -0
- lib/phpExcel/PHPExcel/WorksheetIterator.php +0 -0
- lib/phpExcel/PHPExcel/Writer/Abstract.php +0 -0
- lib/phpExcel/PHPExcel/Writer/CSV.php +0 -0
- lib/phpExcel/PHPExcel/Writer/Excel2007.php +0 -0
- lib/phpExcel/PHPExcel/Writer/Excel2007/Chart.php +0 -0
- lib/phpExcel/PHPExcel/Writer/Excel2007/Comments.php +0 -0
- lib/phpExcel/PHPExcel/Writer/Excel2007/ContentTypes.php +0 -0
- lib/phpExcel/PHPExcel/Writer/Excel2007/DocProps.php +0 -0
- lib/phpExcel/PHPExcel/Writer/Excel2007/Drawing.php +0 -0
- lib/phpExcel/PHPExcel/Writer/Excel2007/Rels.php +0 -0
- lib/phpExcel/PHPExcel/Writer/Excel2007/RelsRibbon.php +0 -0
- lib/phpExcel/PHPExcel/Writer/Excel2007/RelsVBA.php +0 -0
- lib/phpExcel/PHPExcel/Writer/Excel2007/StringTable.php +0 -0
- lib/phpExcel/PHPExcel/Writer/Excel2007/Style.php +0 -0
- lib/phpExcel/PHPExcel/Writer/Excel2007/Theme.php +0 -0
- lib/phpExcel/PHPExcel/Writer/Excel2007/Workbook.php +0 -0
- lib/phpExcel/PHPExcel/Writer/Excel2007/Worksheet.php +0 -0
- lib/phpExcel/PHPExcel/Writer/Excel2007/WriterPart.php +0 -0
- lib/phpExcel/PHPExcel/Writer/Excel5.php +0 -0
- lib/phpExcel/PHPExcel/Writer/Excel5/BIFFwriter.php +0 -0
- lib/phpExcel/PHPExcel/Writer/Excel5/Escher.php +0 -0
- lib/phpExcel/PHPExcel/Writer/Excel5/Font.php +0 -0
- lib/phpExcel/PHPExcel/Writer/Excel5/Parser.php +0 -0
- lib/phpExcel/PHPExcel/Writer/Excel5/Workbook.php +0 -0
- lib/phpExcel/PHPExcel/Writer/Excel5/Worksheet.php +0 -0
- lib/phpExcel/PHPExcel/Writer/Excel5/Xf.php +0 -0
- lib/phpExcel/PHPExcel/Writer/Exception.php +0 -0
- lib/phpExcel/PHPExcel/Writer/HTML.php +0 -0
- lib/phpExcel/PHPExcel/Writer/IWriter.php +0 -0
- lib/phpExcel/PHPExcel/Writer/OpenDocument.php +0 -0
- lib/phpExcel/PHPExcel/Writer/OpenDocument/Cell/Comment.php +0 -0
- lib/phpExcel/PHPExcel/Writer/OpenDocument/Content.php +0 -0
- lib/phpExcel/PHPExcel/Writer/OpenDocument/Meta.php +0 -0
- lib/phpExcel/PHPExcel/Writer/OpenDocument/MetaInf.php +0 -0
- lib/phpExcel/PHPExcel/Writer/OpenDocument/Mimetype.php +0 -0
- lib/phpExcel/PHPExcel/Writer/OpenDocument/Settings.php +0 -0
- lib/phpExcel/PHPExcel/Writer/OpenDocument/Styles.php +0 -0
- lib/phpExcel/PHPExcel/Writer/OpenDocument/Thumbnails.php +0 -0
- lib/phpExcel/PHPExcel/Writer/OpenDocument/WriterPart.php +0 -0
- lib/phpExcel/PHPExcel/Writer/PDF.php +0 -0
- lib/phpExcel/PHPExcel/Writer/PDF/Core.php +0 -0
- lib/phpExcel/PHPExcel/Writer/PDF/DomPDF.php +0 -0
- lib/phpExcel/PHPExcel/Writer/PDF/mPDF.php +0 -0
- lib/phpExcel/PHPExcel/Writer/PDF/tcPDF.php +0 -0
- lib/phpExcel/PHPExcel/locale/bg/config +0 -0
- lib/phpExcel/PHPExcel/locale/cs/config +0 -0
- lib/phpExcel/PHPExcel/locale/cs/functions +0 -0
- lib/phpExcel/PHPExcel/locale/da/config +0 -0
- lib/phpExcel/PHPExcel/locale/da/functions +0 -0
- lib/phpExcel/PHPExcel/locale/de/config +0 -0
- lib/phpExcel/PHPExcel/locale/de/functions +0 -0
- lib/phpExcel/PHPExcel/locale/en/uk/config +0 -0
- lib/phpExcel/PHPExcel/locale/es/config +0 -0
- lib/phpExcel/PHPExcel/locale/es/functions +0 -0
- lib/phpExcel/PHPExcel/locale/fi/config +0 -0
- lib/phpExcel/PHPExcel/locale/fi/functions +0 -0
- lib/phpExcel/PHPExcel/locale/fr/config +0 -0
- lib/phpExcel/PHPExcel/locale/fr/functions +0 -0
- lib/phpExcel/PHPExcel/locale/hu/config +0 -0
- lib/phpExcel/PHPExcel/locale/hu/functions +0 -0
- lib/phpExcel/PHPExcel/locale/it/config +0 -0
- lib/phpExcel/PHPExcel/locale/it/functions +0 -0
- lib/phpExcel/PHPExcel/locale/nl/config +0 -0
- lib/phpExcel/PHPExcel/locale/nl/functions +0 -0
- lib/phpExcel/PHPExcel/locale/no/config +0 -0
- lib/phpExcel/PHPExcel/locale/no/functions +0 -0
- lib/phpExcel/PHPExcel/locale/pl/config +0 -0
- lib/phpExcel/PHPExcel/locale/pl/functions +0 -0
- lib/phpExcel/PHPExcel/locale/pt/br/config +0 -0
- lib/phpExcel/PHPExcel/locale/pt/br/functions +408 -408
- lib/phpExcel/PHPExcel/locale/pt/config +0 -0
- lib/phpExcel/PHPExcel/locale/pt/functions +408 -408
- lib/phpExcel/PHPExcel/locale/ru/config +0 -0
- lib/phpExcel/PHPExcel/locale/ru/functions +0 -0
- lib/phpExcel/PHPExcel/locale/sv/config +0 -0
- lib/phpExcel/PHPExcel/locale/sv/functions +408 -408
- lib/phpExcel/PHPExcel/locale/tr/config +0 -0
- lib/phpExcel/PHPExcel/locale/tr/functions +0 -0
- readme.txt +5 -2
- source/class.date.wpdatacolumn.php +2 -0
- source/class.datetime.wpdatacolumn.php +2 -0
- source/class.email.wpdatacolumn.php +3 -0
- source/class.float.wpdatacolumn.php +3 -0
- source/class.image.wpdatacolumn.php +3 -0
- source/class.int.wpdatacolumn.php +3 -0
- source/class.link.wpdatacolumn.php +3 -0
- source/class.sql.php +2 -0
- source/class.string.wpdatacolumn.php +3 -0
- source/class.time.wpdatacolumn.php +2 -0
- source/class.tpl.php +3 -0
- source/class.wdtbrowsechartstable.php +2 -0
- source/class.wdtbrowsetable.php +3 -1
- source/class.wdtexception.php +3 -0
- source/class.wdttools.php +2 -0
- source/class.wpdatacolumn.php +3 -0
- source/class.wpdatatable.php +2 -0
- source/lang/albanian.inc.php +0 -0
- source/lang/arabic.inc.php +0 -0
- source/lang/azerbaijan.inc.php +0 -0
- source/lang/bangla.inc.php +0 -0
- source/lang/bulgarian.inc.php +0 -0
- source/lang/catalan.inc.php +0 -0
- source/lang/chinese.inc.php +0 -0
- source/lang/croatian.inc.php +0 -0
- source/lang/czech.inc.php +0 -0
- source/lang/danish.inc.php +0 -0
- source/lang/dutch.inc.php +0 -0
- source/lang/estonian.inc.php +0 -0
- source/lang/filipino.inc.php +0 -0
- source/lang/finnish.inc.php +0 -0
- source/lang/french.inc.php +0 -0
- source/lang/georgian.inc.php +0 -0
- source/lang/german.inc.php +0 -0
- source/lang/greek.inc.php +0 -0
- source/lang/hebrew.inc.php +0 -0
- source/lang/hindi.inc.php +0 -0
- source/lang/hungarian.inc.php +0 -0
- source/lang/indonesian.inc.php +0 -0
- source/lang/irish.inc.php +0 -0
- source/lang/italian.inc.php +0 -0
- source/lang/japanese.inc.php +0 -0
- source/lang/latvian.inc.php +0 -0
- source/lang/lithuanian.inc.php +0 -0
- source/lang/macedonian.inc.php +0 -0
- source/lang/norwegian.inc.php +0 -0
- source/lang/persian.inc.php +0 -0
- source/lang/polish.inc.php +0 -0
- source/lang/portuguese.inc.php +0 -0
- source/lang/portuguese_brazil.inc.php +0 -0
- source/lang/romanian.inc.php +0 -0
- source/lang/russian.inc.php +0 -0
- source/lang/serbian.inc.php +0 -0
- source/lang/slovak.inc.php +0 -0
- source/lang/slovenian.inc.php +0 -0
- source/lang/spanish.inc.php +0 -0
- source/lang/swedish.inc.php +0 -0
- source/lang/thai.inc.php +0 -0
- source/lang/turkish.inc.php +0 -0
- source/lang/ukranian.inc.php +0 -0
- source/lang/urdu.inc.php +0 -0
- source/lang/vietnamese.inc.php +0 -0
- templates/addons.inc.php +2 -0
- templates/browse.inc.php +4 -1
- templates/browse_charts.inc.php +2 -0
- templates/chart_js_template.inc.php +2 -0
- templates/chart_wizard.inc.php +2 -0
- templates/constructor.inc.php +2 -0
- templates/edit_table.inc.php +3 -1
- templates/settings.inc.php +2 -0
- templates/wpdatatables_excel_table_main.inc.php +2 -0
- templates/wpdatatables_table_main.inc.php +2 -0
- templates/wrap_template.inc.php +2 -0
- 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(' ');
|
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={"&":"&","<":"<",">":">","\x00":"�","'":"'",'"':""","`":"`"},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={"&":"&","<":"<",">":">","\x00":"�","'":"'",'"':""","`":"`"},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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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(
|
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 |
-
|
314 |
-
|
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>σ:</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.
|
8 |
-
Stable tag: 1.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='
|
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
|
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.
|
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 |
******************************/
|