json-object-editor 0.10.654 → 0.10.657

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/js/joe.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /* --------------------------------------------------------
2
2
  *
3
- * json-object-editor - v0.10.654
3
+ * json-object-editor - v0.10.657
4
4
  * Created by: Corey Hadden
5
5
  *
6
6
  * -------------------------------------------------------- */
@@ -174,6 +174,27 @@ function JsonObjectEditor(specs){
174
174
  }});
175
175
  }
176
176
 
177
+ };
178
+ this.uploaderSetFileRole = function(uploader_id, filename, role){
179
+ try{
180
+ var joe_uploader = self.uploaders && self.uploaders[uploader_id];
181
+ if (!joe_uploader || !Array.isArray(joe_uploader.files)) { return; }
182
+ var file = joe_uploader.files.where({filename:filename})[0];
183
+ if (!file) { return; }
184
+ if (role) {
185
+ file.file_role = role;
186
+ } else {
187
+ delete file.file_role;
188
+ }
189
+ if (joe_uploader.preview) {
190
+ $(joe_uploader.preview).html(_renderUploaderFilePreviews(joe_uploader.files, joe_uploader.cuid));
191
+ }
192
+ if (typeof self.updateObject === 'function') {
193
+ self.updateObject(null, null, true);
194
+ }
195
+ }catch(e){
196
+ console.warn('uploaderSetFileRole error', e && e.message || e);
197
+ }
177
198
  };
178
199
  window._joes.push(this);
179
200
 
@@ -5335,6 +5356,19 @@ this.renderHTMLContent = function(specs){
5335
5356
  if(files && !$c.isArray(files)){
5336
5357
  files = [files];
5337
5358
  }
5359
+
5360
+ // Register uploader object (including optional file_roles) BEFORE we render
5361
+ // previews so that _renderUploaderFilePreviews can access role metadata.
5362
+ var uploader_obj = {
5363
+ cuid: uploader_id,
5364
+ prop: prop.name,
5365
+ files: files,
5366
+ max: prop.max || 0,
5367
+ // Optional file role configuration from schema (e.g. [{value,label,default}])
5368
+ roles: prop.file_roles || []
5369
+ };
5370
+ self.uploaders[uploader_id] = uploader_obj;
5371
+
5338
5372
  if(prop.field && self.current.object[prop.field]){
5339
5373
  var kfield = self.getField(prop.field);
5340
5374
  var preview = self.current.object[prop.field]
@@ -5362,13 +5396,6 @@ this.renderHTMLContent = function(specs){
5362
5396
  ;
5363
5397
  //var idprop = prop.idprop || '_id';
5364
5398
  //html+= __clearDiv__;
5365
- var uploader_obj = {
5366
- cuid:uploader_id,
5367
- prop:prop.name,
5368
- files:files,
5369
- max:prop.max || 0
5370
- }
5371
- self.uploaders[uploader_id] = uploader_obj;
5372
5399
  return html;
5373
5400
  };
5374
5401
  function _removeUploaderFile(id,filename){
@@ -5385,8 +5412,9 @@ this.renderHTMLContent = function(specs){
5385
5412
  var alink ="<a href='${url}${base64}' class='file-link' target='_blank'></a>";
5386
5413
  var delete_btn = '<joe-uploader-file-delete-btn class="svg-shadow" onclick="_joe.Fields.uploader.remove(\''+cuid+'\',\'${filename}\');">'+self.SVG.icon.close+'</joe-uploader-delete-btn>';
5387
5414
  var label = '';
5388
-
5389
-
5415
+ var uploader = self.uploaders && self.uploaders[cuid];
5416
+ var roles = uploader && uploader.roles;
5417
+
5390
5418
  files.map(function(file){
5391
5419
  var filesize = '<joe-uploader-file-label>${filename}</joe-uploader-file-label>';
5392
5420
  if(file.size){
@@ -5415,16 +5443,32 @@ this.renderHTMLContent = function(specs){
5415
5443
  label += '<joe-uploader-file-oaid >'+file.openai_file_id+'</joe-uploader-file-oaid>';
5416
5444
  }
5417
5445
 
5446
+ // Optional file role selector when roles are configured on this uploader
5447
+ var roleSelect = '';
5448
+ if (roles && roles.length) {
5449
+ var currentRole = file.file_role || '';
5450
+ var safeFilename = String(file.filename || '').replace(/'/g, "\\'");
5451
+ var optsHtml = '<option value=""></option>';
5452
+ roles.forEach(function(r){
5453
+ if (!r || !r.value) { return; }
5454
+ var lbl = r.label || r.value;
5455
+ var sel = (currentRole === r.value) ? ' selected' : '';
5456
+ optsHtml += '<option value="'+r.value.replace(/\"/g,'&quot;')+'"'+sel+'>'+lbl.replace(/</g,'&lt;').replace(/>/g,'&gt;')+'</option>';
5457
+ });
5458
+ var onchange = "_joe.uploaderSetFileRole('"+cuid+"','"+safeFilename+"', this.value)";
5459
+ roleSelect = '<div class=\"joe-uploader-file-role\"><select onchange=\"'+onchange+'\">'+optsHtml+'</select></div>';
5460
+ }
5461
+
5418
5462
  if((file.type && file.type.contains('image')) || (!file.type && (file.url||file.base64).split('.').contains(['jpg','jpeg','png','gif','svg']))){
5419
- jup_template = '<joe-uploader-file class="'+(file.uploaded && 'uploaded'||'')+'" style="background-image:url(${url}${base64})">'+alink+label+filesize+delete_btn+'</joe-uploader-file>';
5463
+ jup_template = '<joe-uploader-file class="'+(file.uploaded && 'uploaded'||'')+'" style="background-image:url(${url}${base64})">'+alink+label+roleSelect+filesize+delete_btn+'</joe-uploader-file>';
5420
5464
  }else if (docTypes.includes((file.url || file.base64).split('.').pop())) {
5421
5465
  jup_template = '<joe-uploader-file class="'+(file.uploaded && 'uploaded'||'')+'">'+
5422
5466
  '<joe-uploader-file-extension >.'+(file.type.split('/')[1] || 'docx')+'</joe-uploader-file-extension>'+
5423
- alink+label+filesize+delete_btn+'</joe-uploader-file>';
5467
+ alink+label+roleSelect+filesize+delete_btn+'</joe-uploader-file>';
5424
5468
  }else{
5425
5469
  jup_template = '<joe-uploader-file class="'+(file.uploaded && 'uploaded'||'')+'">'+
5426
5470
  '<joe-uploader-file-extension >.'+(file.type.split('/')[1] || '???')+'</joe-uploader-file-extension>'+
5427
- alink+label+filesize+delete_btn+'</joe-uploader-file>';
5471
+ alink+label+roleSelect+filesize+delete_btn+'</joe-uploader-file>';
5428
5472
  }
5429
5473
  // Build optional OpenAI retry/upload button
5430
5474
  var openaiBtn = '';