>  
>
>> I'll consider this topic closed.
>
>
> Not so fast. :D 
>

Cool. I had been digging around the original Json Editor stand-alone code, 
maybe I can point to something useful.

Warning: Code Blocks coming up. :D
 

>
> The "grid" feature requires a separate CSS module to work (bootstrap or 
>> foundation).
>>
>
> What happens without such a "module"?
>
> ...and then what is that "module" to provide so that you can use either 
> this or that "framework", e.g. bootstrap or some other?
>

When I tried @btheado's method (below), I also got overlapping elements (& 
I think he's right about conflicting CSS definitions...). See attached jpeg 
for a screenshot.

>
>    1. Open 
>    http://netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css in 
>    your browser and select all and copy to clipboard
>    2. Open https://btheado.github.io/jsoneditor.html in your browser
>    3. Create new tiddler titled "bootstrap" or whatever.
>    4. Paste clipboard contents into the body of the tiddler
>    5. Add the $:/tags/Stylesheet tag to the tiddler
>    6. Save the tiddler
>
> The stylesheet should now be applied and the json form becames misaligned 
> and unreadable :-(. Not sure if it is due to *some conflict the the 
> tiddlywiki styles* or if it is some other problem.
>

The easiest way to trigger this layout option is to include "format": 
"grid" in the object's schema.

 So, I dug into @jdorn <https://github.com/jdorn>/json-editor 
<https://github.com/jdorn/json-editor>'s source looking for references to 
the "grid" option. There is one reference in the "object.js" sub-file of 
the "jsoneditor.js" (distribution package) in the "layoutEditors: 
function()":
if (this.format === 'grid'){ do stuff to make grid } 
// Normal layout
else { do other stuff to make normal layout}

Withing the If statement, there is are this.theme.getGridRow() calls (which 
I think is where the bootstrap or foundation *.js files are referenced):
// Layout the form for Grid format
container = document.createElement('div');
for(i=0; i<rows.length; i++) {
var row = this.theme.getGridRow();
container.appendChild(row);
for(j=0; j<rows[i].editors.length; j++) {
  var key = rows[i].editors[j].key;
  var editor = this.editors[key];
  
  if(editor.options.hidden) editor.container.style.display = 'none';
  else 
this.theme.setGridColumnSize(editor.container,rows[i].editors[j].width);
  row.appendChild(editor.container);
  }
}
While the else{} block had this:
ontainer = document.createElement('div');
      $each(this.property_order, function(i,key) {
        var editor = self.editors[key];
        if(editor.property_removed) return;
        var row = self.theme.getGridRow();
        container.appendChild(row);
        
        if(editor.options.hidden) editor.container.style.display = 'none';
        else self.theme.setGridColumnSize(editor.container,12);
        row.appendChild(editor.container);
      });



Looking in the included theme.js sub-file, we have this: 
getGridRow: function() {
    var el = document.createElement('div');
    el.className = 'row';
    return el;
  }


To test the differences, I simplified the schema in @jdorn's sample 
(http://jeremydorn.com/json-editor/), and inspected the source code with 
and without the Grid option set.

Without "format" : "grid" set:
<div class="well well-sm" style="padding-bottom: 0px;">
<div>
<div>
<div class="row">
<div data-schematype="string" data-schemapath="root.name" class="col-md-12">
<div class=" form-group">
<label class=" control-label">name</label>
<input type="text" class="form-control" pattern=".{4,}" name="root[name]">
<p class="help-block">First and Last name</p>
</div>
<div/>
</div>
</div>
<div class="row">
<div data-schematype="integer" data-schemapath="root.age" class="col-md-12">
<div class=" form-group">
<label class=" control-label">age</label>
<input type="text" class="form-control" name="root[age]">
</div>
<div/>
</div>
</div>
<div class="row">
<div data-schematype="string" data-schemapath="root.favorite_color" 
class="col-md-12">
<div class=" form-group">
<label class=" control-label">favorite color</label>
<input type="color" class="form-control" data-schemaformat="color" 
name="root[favorite_color]">
</div>
<div/>
</div>
</div>
<div class="row">
<div data-schematype="string" data-schemapath="root.gender" 
class="col-md-12">
<div class=" form-group">
<label class=" control-label">gender</label>
<select class="form-control" name="root[gender]">
<option value="undefined"> </option>
<option value="male">male</option>
<option value="female">female</option>
</select>
</div>
<div/>
</div>
</div>
</div>
</div>
</div>

With "format" : "grid" applied:
<div class="well well-sm" style="padding-bottom: 0px;">
<div>
<div>
<div class="row">
<div data-schematype="string" data-schemapath="root.name" class="col-md-5">
<div class=" form-group">
<label class=" control-label">name</label>
<input type="text" class="form-control" pattern=".{4,}" name="root[name]">
<p class="help-block">First and Last name</p>
</div>
<div/>
</div>
<div data-schematype="integer" data-schemapath="root.age" class="col-md-2">
<div class=" form-group">
<label class=" control-label">age</label>
<input type="text" class="form-control" name="root[age]">
</div>
<div/>
</div>
<div data-schematype="string" data-schemapath="root.favorite_color" 
class="col-md-3">
<div class=" form-group">
<label class=" control-label">favorite color</label>
<input type="color" class="form-control" data-schemaformat="color" 
name="root[favorite_color]">
</div>
<div/>
</div>
<div data-schematype="string" data-schemapath="root.gender" 
class="col-md-2">
<div class=" form-group">
<label class=" control-label">gender</label>
<select class="form-control" name="root[gender]">
<option value="undefined"> </option>
<option value="male">male</option>
<option value="female">female</option>
</select>
</div>
<div/>
</div>
</div>
</div>
</div>
</div>


So it seems to change how these Row elements are nested, and applies a CSS 
class to define how many columns this element takes up (out of the 12 
column max used in the layout logic).

Hope that helps to understand this issue.

-- 
You received this message because you are subscribed to the Google Groups 
"TiddlyWiki" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/tiddlywiki.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/tiddlywiki/e8bf275c-d8ce-43f8-9c9d-a6f8e3c77f14%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to