I am trying to enable the script below in a document library. I originally found this script here.
Basically whenever a user drag and drops a file it pulls up a prompt to enter metadata.
It is working as intended if it is utilized in the parent level of the document library. However, there are multiple folders within the document library.
When a user drag and drops inside of a folder I think part of the script runs (the page refreshes as intended), however the edit form never pops up to ask the user for metadata.
I need this form to pop up as it does at the parent level.
I would greatly appreciate help in trying to get this last puzzle piece solved.
Thanks!
Update 2: (I hope I'm stating this right). In case it matters, the folders that I am trying to upload files within are are a custom content type. As I reflect on it, I'm reasonably confident that the script is failing because the script does not understand the location of the folder. Unfortunately my Javascript skills are weak at best, so I'm not sure how to correct the issue....
UPDATE: More context, I can tell that the script is evaluating to this point at the bottom of the code:
} else {
location.reload();
}
When I remove that reload text, it stops performing the page refresh. However, I still do not understand why the if statement does not evaluate correctly when inside of a folder.
<script type="text/javascript">
(function (_window) {
var maxTimeForReplaceUploadProgressFunc = 10000;
function replaceUploadProgressFunc() {
if (typeof _window.UploadProgressFunc != 'undefined') {
_window.Base_UploadProgressFunc = _window.UploadProgressFunc;
_window.UploadProgressFunc = Custom_UploadProgressFunc;
console.log('replaced dialog');
} else if (maxTimeForReplaceUploadProgressFunc > 0) {
maxTimeForReplaceUploadProgressFunc -= 100;
setTimeout(replaceUploadProgressFunc, 100);
}
}
setTimeout(replaceUploadProgressFunc, 100);
function Custom_UploadProgressFunc(percentDone, timeElapsed, state) {
_window.Base_UploadProgressFunc(percentDone, timeElapsed, state);
var messageType = ProgressMessage.EMPTY;
switch (state.status) {
case 1:
messageType = ProgressMessage.VALIDATION;
break;
case 3:
messageType = ProgressMessage.UPLOADING;
break;
case 4:
messageType = ProgressMessage.UPLOADED;
OpenEditFormForLastItem(state);
break;
case 5:
messageType = ProgressMessage.CANCELLED;
break;
}
function OpenEditFormForLastItem(state) {
var caml = '';
caml += "<View>";
caml += "<Query>";
caml += "<Where>";
if (state.files.length > 1) {
caml += "<In>";
caml += "<FieldRef Name='FileLeafRef'/>";
caml += "<Values>";
} else {
caml += "<Eq>";
caml += "<FieldRef Name='FileLeafRef'/>";
}
state.files.forEach(function (file) {
//only succesfull uploaded files that arent overwrites
console.log(file);
if (file.status === 5 /*&& !file.overwrite*/) {
caml += "<Value Type='File'>" + file.fileName + "</Value>";
}
}, this);
if (state.files.length > 1) {
caml += "</Values>";
caml += "</In>";
} else {
caml += "</Eq>";
}
caml += "</Where>";
caml += "<OrderBy><FieldRef Name='ID' Ascending='True' /></OrderBy>";
caml += "</Query>";
caml += "<ViewFields><FieldRef Name='ID' /></ViewFields>";
caml += "<RowLimit>500</RowLimit>";
caml += "</View>";
console.log(caml);
var cntxt = SP.ClientContext.get_current();
var web = cntxt.get_web();
var list = web.get_lists().getByTitle(window.ctx.ListTitle);
var query = new SP.CamlQuery();
query.set_viewXml(caml);
var items = list.getItems(query);
cntxt.load(list, 'DefaultEditFormUrl');
cntxt.load(items);
cntxt.executeQueryAsync(function () {
var listEnumerator = items.getEnumerator();
function openEditForItem() {
if (listEnumerator.moveNext()) {
var item = listEnumerator.get_current();
var id = item.get_id();
var options = SP.UI.$create_DialogOptions();
options.title = "Add File Metadata";
options.url = list.get_defaultEditFormUrl() + '?ID=' + id;
options.autoSize = true;
options.dialogReturnValueCallback = openEditForItem;
SP.UI.ModalDialog.showModalDialog(options);
} else {
location.reload();
}
}
openEditForItem();
}, function (error, args) {
console.log("failed to get new uploaded items");
console.log(error);
console.log(args);
});
}
}
})(window);
</script>