Skip to content

Commit

Permalink
Merge branch 'novaip-master'
Browse files Browse the repository at this point in the history
  • Loading branch information
mwasiluk committed Mar 30, 2016
2 parents 568ca05 + 5b8445f commit 396e737
Show file tree
Hide file tree
Showing 5 changed files with 134 additions and 105 deletions.
5 changes: 3 additions & 2 deletions dist/form-builder.min.js

Large diffs are not rendered by default.

6 changes: 4 additions & 2 deletions karma.conf.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,15 @@ module.exports = function(config) {
files:[
'bower_components/jquery/dist/jquery.min.js',
'bower_components/jquery-ui/jquery-ui.min.js',
'bower_components/bootstrap/dist/js/bootstrap.min.js',
'bower_components/angular/angular.js',
'bower_components/angular-mocks/angular-mocks.js',
'bower_components/angular-bootstrap/ui-bootstrap.min.js',
'bower_components/angular-bootstrap/ui-bootstrap-tpls.min.js',
'bower_components/angular-sanitize/angular-sanitize.min.js',
'bower_components/angular-translate/angular-translate.min.js',
'bower_components/angular-translate-loader-static-files/angular-translate-loader-static-files.min.js',
'bower_components/angular-ui-sortable/sortable.min.js',
'bower_components/Sortable/Sortable.min.js',
'bower_components/Sortable/ng-sortable.js',
'bower_components/angular-elastic/elastic.js',
'dist/*.js',
'test/*.js'
Expand Down
29 changes: 24 additions & 5 deletions src/builder/form-builder.directive.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,20 +17,31 @@ angular.module('mwFormBuilder').directive('mwFormBuilder', function () {
bindToController: true,
controller: function(mwFormUuid, MW_QUESTION_TYPES, mwFormBuilderOptions){
var ctrl = this;
ctrl.currentPage = 0;
ctrl.pageSize = 10;
ctrl.pagesSize = [10,25,50,100];
if(!ctrl.formData.pages || !ctrl.formData.pages.length){
ctrl.formData.pages = [];
ctrl.formData.pages.push(createEmptyPage(1));
}

ctrl.options = mwFormBuilderOptions.$init(ctrl.options);
console.log('options',mwFormBuilderOptions);

ctrl.numberOfPages=function(){
return Math.ceil(ctrl.formData.pages.length/ctrl.pageSize);
};
ctrl.lastPage = function(){
ctrl.currentPage = Math.ceil(ctrl.formData.pages.length/ctrl.pageSize - 1);
};
ctrl.addPage = function(){
ctrl.lastPage();
ctrl.formData.pages.push(createEmptyPage(ctrl.formData.pages.length+1));
};



ctrl.onChangePageSize = function(){
if(ctrl.currentPage > Math.ceil(ctrl.formData.pages.length/ctrl.pageSize - 1)){
ctrl.currentPage = Math.ceil(ctrl.formData.pages.length/ctrl.pageSize - 1);
}
};


function createEmptyPage(number){
var defaultPageFlow = null;
Expand Down Expand Up @@ -179,3 +190,11 @@ angular.module('mwFormBuilder').directive('mwFormBuilder', function () {
}
};
});


angular.module('mwFormBuilder').filter('mwStartFrom', function() {
return function(input, start) {
start = +start; //parse to int
return input.slice(start);
};
});
35 changes: 32 additions & 3 deletions src/builder/mw-form-builder.html
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,43 @@


<div class="form-page-list">
<mw-form-page-builder ng-repeat="page in ctrl.formData.pages" form-page="page" form-object="ctrl.formData" is-first="$first" is-last="$last" read-only="ctrl.readOnly"></mw-form-page-builder>
<mw-form-page-builder ng-repeat="page in ctrl.formData.pages| mwStartFrom:ctrl.currentPage * ctrl.pageSize | limitTo:ctrl.pageSize" form-page="page" form-object="ctrl.formData" is-first="$first" is-last="$last" read-only="ctrl.readOnly"></mw-form-page-builder>
</div>
<div class="row">
<div class="col-sm-9">
<div class="row">
<div class="col-sm-6">
<button class="btn btn-default" ng-disabled="ctrl.currentPage === 0" ng-click="ctrl.currentPage = 0">
<i class="fa fa-angle-double-left"></i>
</button>
<button class="btn btn-default" ng-disabled="ctrl.currentPage === 0" ng-click="ctrl.currentPage = ctrl.currentPage - 1">
<i class="fa fa-angle-left"></i>
</button>
{{ctrl.currentPage + 1}}/{{ctrl.numberOfPages()}}
<button class="btn btn-default" ng-disabled="ctrl.currentPage >= ctrl.formData.pages.length / ctrl.pageSize - 1" ng-click="ctrl.currentPage = ctrl.currentPage + 1">
<i class="fa fa-angle-right"></i>
</button>
<button class="btn btn-default" ng-disabled="ctrl.currentPage >= ctrl.formData.pages.length / ctrl.pageSize - 1" ng-click="ctrl.lastPage()">
<i class="fa fa-angle-double-right"></i>
</button>
</div>
<div class="col-sm-2">
<select ng-change="ctrl.onChangePageSize()" class="form-control" ng-model="ctrl.pageSize" ng-options="item for item in ctrl.pagesSize" />
</div>
</div>

</div>
<div class="col-sm-3">
<div class="row">

<button type="button" class="btn btn-default mw-add-new-page-button" ng-click="ctrl.addPage()" ng-if="!ctrl.readOnly"><i class="fa fa-plus"></i> <span translate="mwForm.buttons.addPage"></span></button>
<div class="col-sm-12 text-right">
<button type="button" class="btn btn-default mw-add-new-page-button" ng-click="ctrl.addPage()" ng-if="!ctrl.readOnly"><i class="fa fa-plus"></i> <span translate="mwForm.buttons.addPage"></span></button>
</div>
</div>

</div>
</div>
<mw-form-confirmation-page-builder form-object="ctrl.formData" read-only="ctrl.readOnly"></mw-form-confirmation-page-builder>

</form>

</div>
164 changes: 71 additions & 93 deletions src/builder/utils.js
Original file line number Diff line number Diff line change
@@ -1,107 +1,85 @@
angular.module('mwFormBuilder')
.service('mwFormUuid', function () {
function s4() {
.service('mwFormUuid', function () {
function s4() {
return Math.floor((1 + Math.random()) * 0x10000)
.toString(16)
.substring(1);
}
this.get = function () {
.toString(16)
.substring(1);
}

this.get = function () {
return s4() + s4() + s4() + s4() + s4() + s4() + s4() + s4();


};
}).factory('mwFormClone', ["mwFormUuid", function (mwFormUuid) {
var service = {};
var checkedObjects = [];

service.resetIds = function (obj, root) {
if (root) {
checkedObjects = [];
}
if (checkedObjects.indexOf(obj) >= 0) {
return;
}
checkedObjects.push(obj);
if (!obj === Object(obj)) {
return;
}
};
})
.factory('mwFormClone', ["mwFormUuid", function (mwFormUuid) {
var service = {};
var checkedObjects = [];

if (Array.isArray(obj)) {
obj.forEach(service.resetIds);
return;
}
service.resetIds = function (obj, root) {
if (root) {
checkedObjects = [];
}
if (checkedObjects.indexOf(obj) >= 0) {
return;
}
checkedObjects.push(obj);
if (!obj === Object(obj)) {
return;
}

for (var property in obj) {
if (obj.hasOwnProperty(property)) {
service.resetIds(obj[property]);
}
}
if (Array.isArray(obj)) {
obj.forEach(service.resetIds);
return;
}

if (obj.hasOwnProperty('id')) {
var newId = mwFormUuid.get();
var oldId = obj.id;
obj.id = newId;
}
};
for (var property in obj) {
if (obj.hasOwnProperty(property)) {
service.resetIds(obj[property]);
}
}

service.cloneElement = function (pageElement) {
var element = {};
angular.copy(pageElement, element);
service.resetIds(element, true);
return element;
};
if (obj.hasOwnProperty('id')) {
var newId = mwFormUuid.get();
var oldId = obj.id;
obj.id = newId;
}
};

service.clonePage = function (formPage) {
var _page = {};
angular.copy(formPage, _page);
_page.id = mwFormUuid.get();
var _elements = [];
if (Array.isArray(formPage.elements)) {
for (var i = 0; i < formPage.elements.length; i++) {
_elements.push(service.cloneElement(formPage.elements[i]));
}
}
_page.elements = _elements;
return _page;
};
service.cloneElement = function (pageElement) {
var element = {};
angular.copy(pageElement, element);
service.resetIds(element, true);
return element;
};

service.cloneForm = function (form) {
var _form = {};
angular.copy(form, _form);
var _pages = [];
if (Array.isArray(form.pages)) {
for (var i = 0; i < form.pages.length; i++) {
_pages.push(service.clonePage(form.pages[i]));
}
}
_form.pages = _pages;
return _form;
};
service.clonePage = function (formPage) {
var _page = {};
angular.copy(formPage, _page);
_page.id = mwFormUuid.get();
var _elements = [];
if (Array.isArray(formPage.elements)) {
for (var i = 0; i < formPage.elements.length; i++) {
_elements.push(service.cloneElement(formPage.elements[i]));
}
}
_page.elements = _elements;
return _page;
};

return service;
service.cloneForm = function (form) {
var _form = {};
angular.copy(form, _form);
var _pages = [];
if (Array.isArray(form.pages)) {
for (var i = 0; i < form.pages.length; i++) {
_pages.push(service.clonePage(form.pages[i]));
}
}
_form.pages = _pages;
return _form;
};

}]);
return service;

/* .factory('CollectionsUtil', function(){
return{
replaceByEqualObject: function(collection, referenceObjects, equalFn){
return _.map(collection, function(element){
var foundRefObj = _.find(referenceObjects, function(refObj){
if(equalFn){
return equalFn(element, refObj);
}else{
return _.isEqual(element, refObj);
}
});
if(foundRefObj){
return foundRefObj;
}else{
return element;
}
});
},
isNotEmptyArray: function(object){
return object && $.isArray(object) && object.length > 0;
}
}
});*/
}]);

0 comments on commit 396e737

Please sign in to comment.