/*! * ui-grid - v4.7.1 - 2019-02-06 * Copyright (c) 2019 ; License: MIT */ !function(){"use strict";var e=angular.module("ui.grid.importer",["ui.grid"]);e.constant("uiGridImporterConstants",{featureName:"importer"}),e.service("uiGridImporterService",["$q","uiGridConstants","uiGridImporterConstants","gridUtil","$compile","$interval","i18nService","$window",function(e,i,r,o,t,n,a,s){var l={initializeGrid:function(e,r){r.importer={$scope:e},this.defaultGridOptions(r.options);var t={events:{importer:{}},methods:{importer:{importFile:function(e){l.importThisFile(r,e)}}}};r.api.registerEventsFromObject(t.events),r.api.registerMethodsFromObject(t.methods),r.options.enableImporter&&r.options.importerShowMenu&&(r.api.core.addToGridMenu?l.addToMenu(r):n(function(){r.api.core.addToGridMenu&&l.addToMenu(r)},100,1))},defaultGridOptions:function(e){e.enableImporter||void 0===e.enableImporter?s.hasOwnProperty("File")&&s.hasOwnProperty("FileReader")&&s.hasOwnProperty("FileList")&&s.hasOwnProperty("Blob")?e.enableImporter=!0:(o.logError("The File APIs are not fully supported in this browser, grid importer cannot be used."),e.enableImporter=!1):e.enableImporter=!1,e.importerProcessHeaders=e.importerProcessHeaders||l.processHeaders,e.importerHeaderFilter=e.importerHeaderFilter||function(e){return e},e.importerErrorCallback&&"function"==typeof e.importerErrorCallback||delete e.importerErrorCallback,!0!==e.enableImporter||e.importerDataAddCallback||(o.logError("You have not set an importerDataAddCallback, importer is disabled"),e.enableImporter=!1),e.importerShowMenu=!1!==e.importerShowMenu,e.importerObjectCallback=e.importerObjectCallback||function(e,r){return r}},addToMenu:function(e){e.api.core.addToGridMenu(e,[{title:a.getSafeText("gridMenu.importerTitle"),order:150},{templateUrl:"ui-grid/importerMenuItemContainer",action:function(){this.grid.api.importer.importAFile(e)},order:151}])},importThisFile:function(e,r){if(r){var t=new FileReader;switch(r.type){case"application/json":t.onload=l.importJsonClosure(e);break;default:t.onload=l.importCsvClosure(e)}t.readAsText(r)}else o.logError("No file object provided to importThisFile, should be impossible, aborting")},importJsonClosure:function(o){return function(e){var r,t=[],i=l.parseJson(o,e);null!==i&&(i.forEach(function(e){r=l.newObject(o),angular.extend(r,e),r=o.options.importerObjectCallback(o,r),t.push(r)}),l.addObjects(o,t))}},parseJson:function(r,t){var e;try{e=JSON.parse(t.target.result)}catch(e){return void l.alertError(r,"importer.invalidJson","File could not be processed, is it valid json? Content was: ",t.target.result)}return Array.isArray(e)?e:(l.alertError(r,"importer.jsonNotarray","Import failed, file is not an array, file was: ",t.target.result),[])},importCsvClosure:function(i){return function(e){var r=l.parseCsv(e);if(!r||r.length<1)l.alertError(i,"importer.invalidCsv","File could not be processed, is it valid csv? Content was: ",e.target.result);else{var t=l.createCsvObjects(i,r);t&&0!==t.length?l.addObjects(i,t):l.alertError(i,"importer.noObjects","Objects were not able to be derived, content was: ",e.target.result)}}},parseCsv:function(e){var r=e.target.result;return CSV.parse(r)},createCsvObjects:function(r,e){var t=r.options.importerProcessHeaders(r,e.shift());if(!t||0===t.length)return l.alertError(r,"importer.noHeaders","Column names could not be derived, content was: ",e),[];var i,o=[];return e.forEach(function(e){i=l.newObject(r),null!==e&&e.forEach(function(e,r){null!==t[r]&&(i[t[r]]=e)}),i=r.options.importerObjectCallback(r,i),o.push(i)}),o},processHeaders:function(e,r){var t=[];if(e.options.columnDefs&&0!==e.options.columnDefs.length){var i=l.flattenColumnDefs(e,e.options.columnDefs);return r.forEach(function(e){i[e]?t.push(i[e]):i[e.toLowerCase()]?t.push(i[e.toLowerCase()]):t.push(null)}),t}return r.forEach(function(e){t.push(e.replace(/[^0-9a-zA-Z\-_]/g,"_"))}),t},flattenColumnDefs:function(r,e){var t={};return e.forEach(function(e){e.name&&(t[e.name]=e.field||e.name,t[e.name.toLowerCase()]=e.field||e.name),e.field&&(t[e.field]=e.field||e.name,t[e.field.toLowerCase()]=e.field||e.name),e.displayName&&(t[e.displayName]=e.field||e.name,t[e.displayName.toLowerCase()]=e.field||e.name),e.displayName&&r.options.importerHeaderFilter&&(t[r.options.importerHeaderFilter(e.displayName)]=e.field||e.name,t[r.options.importerHeaderFilter(e.displayName).toLowerCase()]=e.field||e.name)}),t},addObjects:function(e,r){if(e.api.rowEdit){var t=e.registerDataChangeCallback(function(){e.api.rowEdit.setRowsDirty(r),t()},[i.dataChange.ROW]);e.importer.$scope.$on("$destroy",t)}e.importer.$scope.$apply(e.options.importerDataAddCallback(e,r))},newObject:function(e){return void 0!==e.options&&void 0!==e.options.importerNewObject?new e.options.importerNewObject:{}},alertError:function(e,r,t,i){e.options.importerErrorCallback?e.options.importerErrorCallback(e,r,t,i):(s.alert(a.getSafeText(r)),o.logError(t+i))}};return l}]),e.directive("uiGridImporter",["uiGridImporterConstants","uiGridImporterService","gridUtil","$compile",function(e,o,r,t){return{replace:!0,priority:0,require:"^uiGrid",scope:!1,link:function(e,r,t,i){o.initializeGrid(e,i.grid)}}}]),e.directive("uiGridImporterMenuItem",["uiGridImporterConstants","uiGridImporterService","gridUtil","$compile",function(e,a,s,r){return{replace:!0,priority:0,require:"?^uiGrid",scope:!1,templateUrl:"ui-grid/importerMenuItem",link:function(e,r,t,i){var o;var n=r[0].querySelectorAll(".ui-grid-importer-file-chooser");1!==n.length?s.logError("Found > 1 or < 1 file choosers within the menu item, error, cannot continue"):n[0].addEventListener("change",function(e){var r=e.srcElement||e.target;if(r&&r.files&&1===r.files.length){var t=r.files[0];void 0!==i&&i?(o=i.grid,a.importThisFile(o,t),r.form.reset()):s.logError("Could not import file because UI Grid was not found.")}},!1)}}}])}(),angular.module("ui.grid.importer").run(["$templateCache",function(e){"use strict";e.put("ui-grid/importerMenuItem",'
'),e.put("ui-grid/importerMenuItemContainer","")}]);