json-object-editor 0.10.654 → 0.10.660
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/CHANGELOG.md +18 -1
- package/_www/mcp-test.html +287 -276
- package/css/joe-styles.css +6 -0
- package/css/joe.css +7 -1
- package/css/joe.min.css +1 -1
- package/docs/React_Form_Integration_Strategy.md +398 -0
- package/form-qs.json +1007 -0
- package/js/JsonObjectEditor.jquery.craydent.js +56 -12
- package/js/joe-ai.js +2275 -2052
- package/js/joe.js +57 -13
- package/js/joe.min.js +1 -1
- package/package.json +1 -1
- package/react-form-spa-ex.js +570 -0
- package/readme.md +34 -1
- package/server/fields/core.js +4 -1
- package/server/modules/MCP.js +1364 -1237
- package/server/modules/Sites.js +79 -0
- package/server/modules/Storage.js +28 -1
- package/server/plugins/chatgpt.js +1864 -1495
- package/server/schemas/ai_assistant.js +15 -1
- package/server/schemas/ai_prompt.js +389 -324
- package/server/schemas/ai_response.js +414 -374
- package/server/schemas/ai_widget_conversation.js +31 -0
|
@@ -168,6 +168,27 @@ function JsonObjectEditor(specs){
|
|
|
168
168
|
}});
|
|
169
169
|
}
|
|
170
170
|
|
|
171
|
+
};
|
|
172
|
+
this.uploaderSetFileRole = function(uploader_id, filename, role){
|
|
173
|
+
try{
|
|
174
|
+
var joe_uploader = self.uploaders && self.uploaders[uploader_id];
|
|
175
|
+
if (!joe_uploader || !Array.isArray(joe_uploader.files)) { return; }
|
|
176
|
+
var file = joe_uploader.files.where({filename:filename})[0];
|
|
177
|
+
if (!file) { return; }
|
|
178
|
+
if (role) {
|
|
179
|
+
file.file_role = role;
|
|
180
|
+
} else {
|
|
181
|
+
delete file.file_role;
|
|
182
|
+
}
|
|
183
|
+
if (joe_uploader.preview) {
|
|
184
|
+
$(joe_uploader.preview).html(_renderUploaderFilePreviews(joe_uploader.files, joe_uploader.cuid));
|
|
185
|
+
}
|
|
186
|
+
if (typeof self.updateObject === 'function') {
|
|
187
|
+
self.updateObject(null, null, true);
|
|
188
|
+
}
|
|
189
|
+
}catch(e){
|
|
190
|
+
console.warn('uploaderSetFileRole error', e && e.message || e);
|
|
191
|
+
}
|
|
171
192
|
};
|
|
172
193
|
window._joes.push(this);
|
|
173
194
|
|
|
@@ -5329,6 +5350,19 @@ this.renderHTMLContent = function(specs){
|
|
|
5329
5350
|
if(files && !$c.isArray(files)){
|
|
5330
5351
|
files = [files];
|
|
5331
5352
|
}
|
|
5353
|
+
|
|
5354
|
+
// Register uploader object (including optional file_roles) BEFORE we render
|
|
5355
|
+
// previews so that _renderUploaderFilePreviews can access role metadata.
|
|
5356
|
+
var uploader_obj = {
|
|
5357
|
+
cuid: uploader_id,
|
|
5358
|
+
prop: prop.name,
|
|
5359
|
+
files: files,
|
|
5360
|
+
max: prop.max || 0,
|
|
5361
|
+
// Optional file role configuration from schema (e.g. [{value,label,default}])
|
|
5362
|
+
roles: prop.file_roles || []
|
|
5363
|
+
};
|
|
5364
|
+
self.uploaders[uploader_id] = uploader_obj;
|
|
5365
|
+
|
|
5332
5366
|
if(prop.field && self.current.object[prop.field]){
|
|
5333
5367
|
var kfield = self.getField(prop.field);
|
|
5334
5368
|
var preview = self.current.object[prop.field]
|
|
@@ -5356,13 +5390,6 @@ this.renderHTMLContent = function(specs){
|
|
|
5356
5390
|
;
|
|
5357
5391
|
//var idprop = prop.idprop || '_id';
|
|
5358
5392
|
//html+= __clearDiv__;
|
|
5359
|
-
var uploader_obj = {
|
|
5360
|
-
cuid:uploader_id,
|
|
5361
|
-
prop:prop.name,
|
|
5362
|
-
files:files,
|
|
5363
|
-
max:prop.max || 0
|
|
5364
|
-
}
|
|
5365
|
-
self.uploaders[uploader_id] = uploader_obj;
|
|
5366
5393
|
return html;
|
|
5367
5394
|
};
|
|
5368
5395
|
function _removeUploaderFile(id,filename){
|
|
@@ -5379,8 +5406,9 @@ this.renderHTMLContent = function(specs){
|
|
|
5379
5406
|
var alink ="<a href='${url}${base64}' class='file-link' target='_blank'></a>";
|
|
5380
5407
|
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>';
|
|
5381
5408
|
var label = '';
|
|
5382
|
-
|
|
5383
|
-
|
|
5409
|
+
var uploader = self.uploaders && self.uploaders[cuid];
|
|
5410
|
+
var roles = uploader && uploader.roles;
|
|
5411
|
+
|
|
5384
5412
|
files.map(function(file){
|
|
5385
5413
|
var filesize = '<joe-uploader-file-label>${filename}</joe-uploader-file-label>';
|
|
5386
5414
|
if(file.size){
|
|
@@ -5409,16 +5437,32 @@ this.renderHTMLContent = function(specs){
|
|
|
5409
5437
|
label += '<joe-uploader-file-oaid >'+file.openai_file_id+'</joe-uploader-file-oaid>';
|
|
5410
5438
|
}
|
|
5411
5439
|
|
|
5440
|
+
// Optional file role selector when roles are configured on this uploader
|
|
5441
|
+
var roleSelect = '';
|
|
5442
|
+
if (roles && roles.length) {
|
|
5443
|
+
var currentRole = file.file_role || '';
|
|
5444
|
+
var safeFilename = String(file.filename || '').replace(/'/g, "\\'");
|
|
5445
|
+
var optsHtml = '<option value=""></option>';
|
|
5446
|
+
roles.forEach(function(r){
|
|
5447
|
+
if (!r || !r.value) { return; }
|
|
5448
|
+
var lbl = r.label || r.value;
|
|
5449
|
+
var sel = (currentRole === r.value) ? ' selected' : '';
|
|
5450
|
+
optsHtml += '<option value="'+r.value.replace(/\"/g,'"')+'"'+sel+'>'+lbl.replace(/</g,'<').replace(/>/g,'>')+'</option>';
|
|
5451
|
+
});
|
|
5452
|
+
var onchange = "_joe.uploaderSetFileRole('"+cuid+"','"+safeFilename+"', this.value)";
|
|
5453
|
+
roleSelect = '<div class=\"joe-uploader-file-role\"><select onchange=\"'+onchange+'\">'+optsHtml+'</select></div>';
|
|
5454
|
+
}
|
|
5455
|
+
|
|
5412
5456
|
if((file.type && file.type.contains('image')) || (!file.type && (file.url||file.base64).split('.').contains(['jpg','jpeg','png','gif','svg']))){
|
|
5413
|
-
jup_template = '<joe-uploader-file class="'+(file.uploaded && 'uploaded'||'')+'" style="background-image:url(${url}${base64})">'+alink+label+filesize+delete_btn+'</joe-uploader-file>';
|
|
5457
|
+
jup_template = '<joe-uploader-file class="'+(file.uploaded && 'uploaded'||'')+'" style="background-image:url(${url}${base64})">'+alink+label+roleSelect+filesize+delete_btn+'</joe-uploader-file>';
|
|
5414
5458
|
}else if (docTypes.includes((file.url || file.base64).split('.').pop())) {
|
|
5415
5459
|
jup_template = '<joe-uploader-file class="'+(file.uploaded && 'uploaded'||'')+'">'+
|
|
5416
5460
|
'<joe-uploader-file-extension >.'+(file.type.split('/')[1] || 'docx')+'</joe-uploader-file-extension>'+
|
|
5417
|
-
alink+label+filesize+delete_btn+'</joe-uploader-file>';
|
|
5461
|
+
alink+label+roleSelect+filesize+delete_btn+'</joe-uploader-file>';
|
|
5418
5462
|
}else{
|
|
5419
5463
|
jup_template = '<joe-uploader-file class="'+(file.uploaded && 'uploaded'||'')+'">'+
|
|
5420
5464
|
'<joe-uploader-file-extension >.'+(file.type.split('/')[1] || '???')+'</joe-uploader-file-extension>'+
|
|
5421
|
-
alink+label+filesize+delete_btn+'</joe-uploader-file>';
|
|
5465
|
+
alink+label+roleSelect+filesize+delete_btn+'</joe-uploader-file>';
|
|
5422
5466
|
}
|
|
5423
5467
|
// Build optional OpenAI retry/upload button
|
|
5424
5468
|
var openaiBtn = '';
|