Skip to content

Commit 1b204ca

Browse files
committed
Gulped
1 parent 2b57c7e commit 1b204ca

File tree

2 files changed

+83
-64
lines changed

2 files changed

+83
-64
lines changed

dist/schema-form.js

Lines changed: 82 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1308,88 +1308,107 @@ angular.module('schemaForm')
13081308
}
13091309
}
13101310
});
1311-
//Since we are dependant on up to three
1312-
//attributes we'll do a common watch
1311+
13131312
var lastDigest = {};
13141313
var childScope;
1315-
scope.$watch(function() {
13161314

1317-
var schema = scope.schema;
1318-
var form = scope.initialForm || ['*'];
1315+
// Common renderer function, can either be triggered by a watch or by an event.
1316+
var render = function(schema, form) {
1317+
var merged = schemaForm.merge(schema, form, ignore, scope.options);
1318+
var frag = document.createDocumentFragment();
1319+
1320+
// Create a new form and destroy the old one.
1321+
// Not doing keeps old form elements hanging around after
1322+
// they have been removed from the DOM
1323+
// https://github.com/Textalk/angular-schema-form/issues/200
1324+
if (childScope) {
1325+
childScope.$destroy();
1326+
}
1327+
childScope = scope.$new();
13191328

1320-
//The check for schema.type is to ensure that schema is not {}
1321-
if (form && schema && schema.type &&
1322-
(lastDigest.form !== form || lastDigest.schema !== schema) &&
1323-
Object.keys(schema.properties).length > 0) {
1324-
lastDigest.schema = schema;
1325-
lastDigest.form = form;
1329+
//make the form available to decorators
1330+
childScope.schemaForm = {form: merged, schema: schema};
13261331

1327-
var merged = schemaForm.merge(schema, form, ignore, scope.options);
1328-
var frag = document.createDocumentFragment();
1332+
//clean all but pre existing html.
1333+
element.children(':not(.schema-form-ignore)').remove();
13291334

1330-
// Create a new form and destroy the old one.
1331-
// Not doing keeps old form elements hanging around after
1332-
// they have been removed from the DOM
1333-
// https://github.com/Textalk/angular-schema-form/issues/200
1334-
if (childScope) {
1335-
childScope.$destroy();
1335+
// Find all slots.
1336+
var slots = {};
1337+
var slotsFound = element[0].querySelectorAll('*[sf-insert-field]');
1338+
1339+
for (var i = 0; i < slotsFound.length; i++) {
1340+
slots[slotsFound[i].getAttribute('sf-insert-field')] = slotsFound[i];
1341+
}
1342+
1343+
//Create directives from the form definition
1344+
angular.forEach(merged, function(obj, i) {
1345+
var n = document.createElement(attrs.sfDecorator ||
1346+
snakeCase(schemaFormDecorators.defaultDecorator, '-'));
1347+
n.setAttribute('form', 'schemaForm.form[' + i + ']');
1348+
1349+
// Check if there is a slot to put this in...
1350+
if (obj.key) {
1351+
var slot = slots[sfPath.stringify(obj.key)];
1352+
if (slot) {
1353+
while (slot.firstChild) {
1354+
slot.removeChild(slot.firstChild);
1355+
}
1356+
slot.appendChild(n);
1357+
return;
1358+
}
13361359
}
1337-
childScope = scope.$new();
13381360

1339-
//make the form available to decorators
1340-
childScope.schemaForm = {form: merged, schema: schema};
1361+
// ...otherwise add it to the frag
1362+
frag.appendChild(n);
1363+
1364+
});
13411365

1342-
//clean all but pre existing html.
1343-
element.children(':not(.schema-form-ignore)').remove();
1366+
element[0].appendChild(frag);
13441367

1345-
// Find all slots.
1346-
var slots = {};
1347-
var slotsFound = element[0].querySelectorAll('*[sf-insert-field]');
1368+
//compile only children
1369+
$compile(element.children())(childScope);
13481370

1349-
for (var i = 0; i < slotsFound.length; i++) {
1350-
slots[slotsFound[i].getAttribute('sf-insert-field')] = slotsFound[i];
1371+
//ok, now that that is done let's set any defaults
1372+
schemaForm.traverseSchema(schema, function(prop, path) {
1373+
if (angular.isDefined(prop['default'])) {
1374+
var val = sfSelect(path, scope.model);
1375+
if (angular.isUndefined(val)) {
1376+
sfSelect(path, scope.model, prop['default']);
1377+
}
13511378
}
1379+
});
13521380

1353-
//Create directives from the form definition
1354-
angular.forEach(merged, function(obj, i) {
1355-
var n = document.createElement(attrs.sfDecorator ||
1356-
snakeCase(schemaFormDecorators.defaultDecorator, '-'));
1357-
n.setAttribute('form','schemaForm.form['+i+']');
1358-
1359-
// Check if there is a slot to put this in...
1360-
if (obj.key) {
1361-
var slot = slots[sfPath.stringify(obj.key)];
1362-
if (slot) {
1363-
while (slot.firstChild) {
1364-
slot.removeChild(slot.firstChild);
1365-
}
1366-
slot.appendChild(n);
1367-
return;
1368-
}
1369-
}
1381+
scope.$emit('sf-render-finished', element);
1382+
};
13701383

1371-
// ...otherwise add it to the frag
1372-
frag.appendChild(n);
1384+
//Since we are dependant on up to three
1385+
//attributes we'll do a common watch
1386+
scope.$watch(function() {
13731387

1374-
});
1388+
var schema = scope.schema;
1389+
var form = scope.initialForm || ['*'];
13751390

1376-
element[0].appendChild(frag);
1391+
//The check for schema.type is to ensure that schema is not {}
1392+
if (form && schema && schema.type &&
1393+
(lastDigest.form !== form || lastDigest.schema !== schema) &&
1394+
Object.keys(schema.properties).length > 0) {
1395+
lastDigest.schema = schema;
1396+
lastDigest.form = form;
13771397

1378-
//compile only children
1379-
$compile(element.children())(childScope);
1398+
render(schema, form);
1399+
}
1400+
});
13801401

1381-
//ok, now that that is done let's set any defaults
1382-
schemaForm.traverseSchema(schema, function(prop, path) {
1383-
if (angular.isDefined(prop['default'])) {
1384-
var val = sfSelect(path, scope.model);
1385-
if (angular.isUndefined(val)) {
1386-
sfSelect(path, scope.model, prop['default']);
1387-
}
1388-
}
1389-
});
1390-
};
1391-
scope.$emit('sf-render-finished', element);
1402+
// We also listen to the event schemaFormRedraw so you can manually trigger a change if
1403+
// part of the form or schema is chnaged without it being a new instance.
1404+
scope.$on('schemaFormRedraw', function() {
1405+
var schema = scope.schema;
1406+
var form = scope.initialForm || ['*'];
1407+
if (schema) {
1408+
render(schema, form);
1409+
}
13921410
});
1411+
13931412
}
13941413
};
13951414
}

0 commit comments

Comments
 (0)