Skip to content

Commit 9dc9334

Browse files
Merge pull request #1 from mwasiluk/master
Merge branch 'mwasiluk-master'
2 parents e70ac61 + da00e16 commit 9dc9334

11 files changed

+117
-52
lines changed

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,6 @@ tmp
3838
*.iml
3939
out
4040
gen
41-
/nbproject/private/
41+
/nbproject/private/
42+
43+
nbproject

demo/demo.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ angular.module('app', ['mwFormBuilder', 'mwFormViewer', 'mwFormUtils', 'pascalpr
44
prefix: '../dist/i18n/',
55
suffix: '/angular-surveys.json'
66
});
7-
$translateProvider.preferredLanguage('es');
7+
$translateProvider.preferredLanguage('en');
88
})
99
.controller('DemoController', function($q,$http, $translate, mwFormResponseUtils) {
1010

@@ -28,6 +28,14 @@ angular.module('app', ['mwFormBuilder', 'mwFormViewer', 'mwFormUtils', 'pascalpr
2828
ctrl.formOptions = {
2929
autoStart: false
3030
};
31+
ctrl.optionsBuilder={
32+
/*elementButtons: [{title: 'My title tooltip', icon: 'fa fa-database', text: '', callback: ctrl.callback, filter: ctrl.filter, showInOpen: true}],
33+
customQuestionSelects: [
34+
{key:"category", label: 'Category', options: [{key:"1", label:"Uno"},{key:"2", label:"dos"},{key:"3", label:"tres"},{key:"4", label:"4"}], required: false},
35+
{key:"category2", label: 'Category2', options: [{key:"1", label:"Uno"},{key:"2", label:"dos"},{key:"3", label:"tres"},{key:"4", label:"4"}]}
36+
],
37+
elementTypes: ['question', 'image']*/
38+
};
3139
ctrl.formStatus= {};
3240
ctrl.responseData={};
3341
$http.get('response-data.json')

dist/form-builder.min.js

Lines changed: 7 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
angular.module('mwFormBuilder')
2+
.constant('MW_QUESTION_TYPES', ['text', 'textarea', 'radio', 'checkbox', 'grid', 'priority', 'division', 'number', 'date', 'time', 'email', 'range', 'url'])
3+
.constant('MW_ELEMENT_TYPES', ['question', 'image', 'paragraph'])
4+
.factory('mwFormBuilderOptions', function mwFormBuilderOptionsFactory(MW_ELEMENT_TYPES, MW_QUESTION_TYPES){
5+
6+
var defaultElementButtonOptions={
7+
title: null,
8+
icon: null,
9+
text: null,
10+
callback: null,
11+
filter: null,
12+
showInOpen:false,
13+
showInPreview:true,
14+
cssClass: ''
15+
};
16+
17+
var defaultCustomQuestionSelectOptions={
18+
key: null,
19+
label: null,
20+
selects: [],
21+
required: true
22+
};
23+
24+
var defaultOptions={
25+
elementTypes: MW_ELEMENT_TYPES,
26+
questionTypes: MW_QUESTION_TYPES,
27+
elementButtons: [],
28+
customQuestionSelects: [],
29+
customElements: [] //TODO
30+
};
31+
32+
function extendOptionList(optionList, defaultItemOptions){
33+
if(!optionList){
34+
return [];
35+
}
36+
return optionList.map(function (itemOptions){
37+
return angular.extend({}, defaultItemOptions, itemOptions);
38+
});
39+
}
40+
41+
var options = {
42+
43+
$init: function(customOptions){
44+
angular.extend(options, defaultOptions, customOptions);
45+
options.customQuestionSelects = extendOptionList(options.customQuestionSelects, defaultCustomQuestionSelectOptions);
46+
options.elementButtons = extendOptionList(options.elementButtons, defaultElementButtonOptions);
47+
48+
return options;
49+
}
50+
};
51+
52+
53+
return options;
54+
});

src/builder/form-builder.directive.js

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,29 +21,17 @@ angular.module('mwFormBuilder').directive('mwFormBuilder', function () {
2121
ctrl.formData.pages = [];
2222
ctrl.formData.pages.push(createEmptyPage(1));
2323
}
24-
mwFormBuilderOptions.questionTypes = MW_QUESTION_TYPES;
25-
mwFormBuilderOptions.elementButtons = [];
26-
mwFormBuilderOptions.additionalSelects = [];
27-
28-
if(ctrl.options){
29-
if(ctrl.options.questionTypes){
30-
mwFormBuilderOptions.questionTypes = ctrl.options.questionTypes;
31-
}
32-
if(ctrl.options.additionalSelects){
33-
mwFormBuilderOptions.additionalSelects = ctrl.options.additionalSelects;
34-
}
35-
if(ctrl.options.elementButtons){
36-
mwFormBuilderOptions.elementButtons = ctrl.options.elementButtons;
37-
}
38-
}
39-
4024

25+
ctrl.options = mwFormBuilderOptions.$init(ctrl.options);
26+
console.log('options',mwFormBuilderOptions);
4127

4228
ctrl.addPage = function(){
4329
ctrl.formData.pages.push(createEmptyPage(ctrl.formData.pages.length+1));
4430
};
4531

4632

33+
34+
4735
function createEmptyPage(number){
4836
var defaultPageFlow = null;
4937
if(ctrl.possiblePageFlow){

src/builder/form-builder.module.js

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1 @@
1-
angular.module('mwFormBuilder', ['ngSanitize', 'ui.bootstrap','ng-sortable', 'pascalprecht.translate'])
2-
.constant('MW_QUESTION_TYPES', ['text', 'textarea', 'radio', 'checkbox', 'grid', 'priority', 'division', 'number', 'date', 'time', 'email', 'range', 'url'])
3-
.value('mwFormBuilderOptions', {});
4-
5-
1+
angular.module('mwFormBuilder', ['ngSanitize', 'ui.bootstrap','ng-sortable', 'pascalprecht.translate']);

src/builder/form-page-builder.directive.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ angular.module('mwFormBuilder').directive('mwFormPageBuilder', function () {
1515
templateUrl: 'mw-form-page-builder.html',
1616
controllerAs: 'ctrl',
1717
bindToController: true,
18-
controller: function($timeout, mwFormUuid, mwFormClone){
18+
controller: function($timeout, mwFormUuid, mwFormClone, mwFormBuilderOptions){
1919
var ctrl = this;
2020
ctrl.hoverEdit = false;
2121
ctrl.formPage.namedPage = !!ctrl.formPage.name;
@@ -58,7 +58,8 @@ angular.module('mwFormBuilder').directive('mwFormPageBuilder', function () {
5858

5959
ctrl.addElement = function(type){
6060
if(!type){
61-
type='question';
61+
62+
type=mwFormBuilderOptions.elementTypes[0];
6263
}
6364
var element = createEmptyElement(type, ctrl.formPage.elements.length + 1);
6465
ctrl.activeElement=element;
@@ -98,6 +99,10 @@ angular.module('mwFormBuilder').directive('mwFormPageBuilder', function () {
9899
updateElementsOrderNo();
99100
};
100101

102+
ctrl.isElementTypeEnabled = function(elementType){
103+
return mwFormBuilderOptions.elementTypes.indexOf(elementType) !== -1;
104+
};
105+
101106
ctrl.addQuestion = function(){
102107
ctrl.addElement('question');
103108
};

src/builder/form-page-element-builder.directive.js

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,16 @@ angular.module('mwFormBuilder').directive('mwFormPageElementBuilder', function (
2626
element.callback(ctrl.pageElement);
2727
}
2828
};
29-
ctrl.filter = function(element){
30-
if (element.filter && typeof element.filter === "function") {
31-
return element.filter(ctrl.pageElement);
29+
ctrl.filter = function(button){
30+
if(!button.showInOpen && ctrl.isActive){
31+
return false;
32+
}
33+
if(!button.showInPreview && !ctrl.isActive){
34+
return false;
35+
}
36+
37+
if (button.filter && typeof button.filter === "function") {
38+
return button.filter(ctrl.pageElement);
3239
}
3340
return true;
3441
};

src/builder/mw-form-page-builder.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,9 @@
5757
<span class="sr-only">Split button!</span>
5858
</button>
5959
<ul uib-dropdown-menu aria-labelledby="simple-dropdown" role="menu">
60-
<li><button type="button" ng-click="ctrl.addQuestion()"><span translate="mwForm.elements.question">Pytanie</span><i class="fa fa-question-circle fa-lg fa-fw" style="margin-left: 10px;"></i></button></li>
61-
<li><button type="button" ng-click="ctrl.addImage()"><span translate="mwForm.elements.image">Obraz</span><i class="fa fa-picture-o fa-lg fa-fw" style="margin-left: 10px;"></i></button></li>
62-
<li><button type="button" ng-click="ctrl.addParagraph()"><span translate="mwForm.elements.paragraph">Obraz</span><i class="fa fa-paragraph fa-lg fa-fw" style="margin-left: 10px;"></i></button></li>
60+
<li ng-if="ctrl.isElementTypeEnabled('question')"><button type="button" ng-click="ctrl.addQuestion()"><span translate="mwForm.elements.question">Pytanie</span><i class="fa fa-question-circle fa-lg fa-fw" style="margin-left: 10px;"></i></button></li>
61+
<li ng-if="ctrl.isElementTypeEnabled('image')"><button type="button" ng-click="ctrl.addImage()"><span translate="mwForm.elements.image">Obraz</span><i class="fa fa-picture-o fa-lg fa-fw" style="margin-left: 10px;"></i></button></li>
62+
<li ng-if="ctrl.isElementTypeEnabled('paragraph')"><button type="button" ng-click="ctrl.addParagraph()"><span translate="mwForm.elements.paragraph">Obraz</span><i class="fa fa-paragraph fa-lg fa-fw" style="margin-left: 10px;"></i></button></li>
6363

6464
</ul>
6565
</div>

src/builder/mw-form-page-element-builder.html

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,17 @@
22
<div class="mw-form-page-element-builder" ng-class="{'active': ctrl.isActive, 'inactive draggable': !ctrl.isActive}">
33
<!--{{ctrl.pageElement.orderNo}}-->
44
<div class="mw-page-element-actions-tab" ng-switch="ctrl.isActive&&!ctrl.readOnly">
5-
<div ng-switch-when="true">
5+
<span class="mw-additional-buttons">
6+
<button type="button" ng-click="ctrl.callback($event,button)"
7+
ng-attr-title="{{button.title | translate}}" ng-class="button.cssClass" class="edit-button"
8+
aria-label="{{button.title | translate}}" aria-hidden="false" ng-if="ctrl.filter(button) && !ctrl.readOnly"
9+
ng-repeat="button in ctrl.options.elementButtons"
10+
uib-popover="{{button.title | translate}}" popover-trigger="mouseenter" popover-append-to-body popover-placement="right"
11+
>
12+
<i class="{{button.icon}}"></i> {{button.text}}
13+
</button>
14+
</span>
15+
<span ng-switch-when="true">
616
<button type="button" class="move-down-button" ng-click="ctrl.moveDown()" ng-if="!ctrl.isLast"
717
ng-attr-title="{{'mwForm.buttons.moveDown' | translate}}" uib-popover="{{'mwForm.buttons.moveDown' | translate}}" popover-trigger="mouseenter" popover-placement="top">
818
<i class="fa fa-chevron-down"></i>
@@ -14,8 +24,8 @@
1424
<button type="button" class="remove-button" mw-confirm-click confirmed-action="ctrl.removeElement()"
1525
ng-attr-title="{{'mwForm.buttons.remove' | translate}}" uib-popover="{{'mwForm.buttons.remove' | translate}}" popover-trigger="mouseenter" popover-placement="top">
1626
<i class="fa fa-trash"></i></button>
17-
</div>
18-
<div ng-switch-when="false">
27+
</span>
28+
<span ng-switch-when="false">
1929
<button type="button" aria-label="{{'mwForm.buttons.clone' | translate}}" aria-hidden="false" class="edit-button" ng-click="ctrl.cloneElement($event)" ng-if="!ctrl.readOnly"
2030
ng-attr-title="{{'mwForm.buttons.clone' | translate}}" uib-popover="{{'mwForm.buttons.clone' | translate}}" popover-trigger="mouseenter" popover-placement="top">
2131
<i class="fa fa-clone"></i>
@@ -28,15 +38,9 @@
2838
ng-attr-title="{{'mwForm.buttons.view' | translate}}" uib-popover="{{'mwForm.buttons.view' | translate}}" popover-trigger="mouseenter" popover-placement="top">
2939
<i class="fa fa-eye"></i>
3040
</button>
31-
<button type="button" ng-click="ctrl.callback($event,button)"
32-
ng-attr-title="{{button.title | translate}}" class="edit-button"
33-
aria-label="{{button.title | translate}}" aria-hidden="false" ng-if="ctrl.filter(button) && !ctrl.readOnly"
34-
ng-repeat="button in ctrl.options.elementButtons"
35-
uib-popover="{{button.title | translate}}" popover-trigger="mouseenter" popover-append-to-body popover-placement="right"
36-
>
37-
<i class="{{button.icon}}"></i> {{button.text}}
38-
</button>
39-
</div>
41+
42+
</span>
43+
4044
</div>
4145
<div ng-switch="ctrl.pageElement.type">
4246
<mw-form-question-builder ng-switch-when="question" question="ctrl.pageElement.question" form-object="ctrl.formObject" on-ready="ctrl.onReady()" is-preview="!ctrl.isActive" read-only="ctrl.readOnly"></mw-form-question-builder>

0 commit comments

Comments
 (0)