diff --git a/bower.json b/bower.json index 917aaa9..67d81ba 100644 --- a/bower.json +++ b/bower.json @@ -54,7 +54,9 @@ "textAngular": "~1.4.6", "angular-xeditable": "~0.5.0", "ng-js-tree": "~0.0.7", - "angular-ui-select": "^0.19.6" + "angular-ui-select": "^0.19.6", + "angular-upload": "^1.0.12", + "ng-tags-input": "^3.2.0" }, "resolutions": { "angular": "~1.5.9", diff --git a/package.json b/package.json index d3a2247..a7c6f65 100644 --- a/package.json +++ b/package.json @@ -44,5 +44,8 @@ }, "scripts": { "postinstall": "bower install" + }, + "dependencies": { + "ng-tags-input": "^3.2.0" } } diff --git a/src/app/pages/surveys/create/create.html b/src/app/pages/surveys/create/create.html index bb79b55..dfb9d44 100644 --- a/src/app/pages/surveys/create/create.html +++ b/src/app/pages/surveys/create/create.html @@ -1,8 +1,8 @@ <div id="surveys" class="widgets"> <div class="row"> - <div class="col-md-8 col-lg-8"> - <div id="survey-builder" class="panel panel-default bootstrap-panel"> + <div id="survey-builder" class="col-md-12 col-lg-12 {{ !display.survey ? 'slide-out-blurred-left' : '' }}"> + <div class="panel panel-default bootstrap-panel"> <div class="panel-heading"><h2 ng-model="survey.name" ng-attr-contenteditable="{{ editmode }}" class="panel-title pull-left">{{ survey.name }}</h2></div> <div class="panel-body"> <p ng-model="survey.description" ng-attr-contenteditable="{{ editmode }}"></p> @@ -36,14 +36,14 @@ </div> </div> - <div id="sidebar" class="col-md-4 col-lg-4" style="display:none;"> + <div id="survey-sending" class="col-md-8 col-lg-8 {{ display.surveySending ? 'roll-in-blurred-left' : 'invisible' }}"> + <div class="panel panel-default bootstrap-panel"> + <div class="panel-heading"><h2 class="panel-title pull-left">Send your survey</h2></div> + <div class="panel-body"> - <div id="survey-lists" class="panel panel-default bootstrap-panel"> - <div class="panel-heading"><h2 class="panel-title pull-left">Send your survey</h2></div> - <div class="panel-body"> - - <div class="form-group"> - <ui-select multiple ng-model="lists.selected" + + <div> + <ui-select multiple ng-model="lists.selected" ng-disabled="false" search-enabled="true" append-to-body="true" @@ -55,32 +55,53 @@ {{multipleItem.name}} </ui-select-choices> </ui-select> + <input type="text" class="form-control compose-input default-color" placeholder="Subject" ng-model="boxCtrl.subject"> + + <div class="control-group"> + <span class="control-label" style="display: block;float: left;margin: 7px;">360 Survey : </span> + <div><ba-switcher switcher-style="primary" switcher-value="survey.s360"></ba-switcher></div> + + </div> + + <div class="compose-container"> + <text-angular-toolbar ta-toolbar-class="toolbarMain" name="toolbarMain" ta-toolbar="[['h1','h2','h3','bold','italics', 'underline', 'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull'],['userName', 'surveyLink']]"></text-angular-toolbar> + <text-angular name="htmlcontent" ta-target-toolbars='toolbarMain,toolbarFooter' ng-model="boxCtrl.text"></text-angular> + </div> + </div> + <div class="compose-footer clearfix"> + <button type="button" ng-click="sendSurvey()" class="btn btn-send">Send</button> + <button type="button" ng-click="cancelSending()" class="btn btn-danger">Cancel</button> + <text-angular-toolbar ta-toolbar-class="toolbarFooter" name="toolbarFooter" ta-toolbar="[['insertLink', 'insertImage', 'html', 'quote','insertVideo']]"></text-angular-toolbar> + + </div> + + + + </div> + </div> + </div> + + <div id="sidebar" class="col-md-4 col-lg-4 {{ display.sidebar ? 'roll-in-blurred-right' : 'invisible' }}"> + + <div id="survey-lists" class="panel panel-default bootstrap-panel"> + <div class="panel-heading"><h2 class="panel-title pull-left">Memebrs this survey will be sent to</h2></div> + <div class="panel-body"> + + <div class="feed-messages-container" track-width="smallContainerWidth" min-width="360"> <div class="feed-message" ng-repeat="l in lists.selected"> - <!--<img class="photo-icon" ng-src="{{m.name.split(' ')[0] | profilePicture}}">--> + <h3>{{l.name}}</h3> <img class="photo-icon roll-in-blurred-right" ng-src="{{m | profilePicture}}" ng-repeat="m in l.members"> </div> </div> - <div class="actions"> - <div class="btn-group"> - <button ng-click="sendSurvey()" class="btn btn-success btn-lg"> - Send the Survey - </button> - </div> - - <div class="btn-group"> - <button ng-click="cancelSending()" class="btn btn-danger btn-lg"> - Cancel - </button> - </div> - </div> + </div> </div> diff --git a/src/app/pages/surveys/create/create.module.js b/src/app/pages/surveys/create/create.module.js index d3d6413..1e65678 100644 --- a/src/app/pages/surveys/create/create.module.js +++ b/src/app/pages/surveys/create/create.module.js @@ -5,15 +5,73 @@ (function () { 'use strict'; - angular.module('BlurAdmin.pages.surveys.create',['BlurAdmin.pages.surveys', 'ui.select', 'ngSanitize']) - .directive('tagInput', tagInput); + angular.module('BlurAdmin.pages.surveys.create',['BlurAdmin.pages.surveys', 'ui.select', 'ngSanitize', 'textAngular', 'ngTagsInput']) + .directive('tagInput', tagInput) + .config(function($provide){ + $provide.decorator('taOptions', ['taRegisterTool', '$delegate', function(taRegisterTool, taOptions){ + // $delegate is the taOptions we are decorating + // register the tool with textAngular + function insertTextAtCursor(text) { + var sel, range; + if (window.getSelection) { + sel = window.getSelection(); + if (sel.getRangeAt && sel.rangeCount) { + range = sel.getRangeAt(0); + range.deleteContents(); + range.insertNode(document.createTextNode(text)); + } + } else if (document.selection && document.selection.createRange) { + document.selection.createRange().text = text; + } + } + + function moveCaret(charCount) { + var sel, range; + if (window.getSelection) { + sel = window.getSelection(); + if (sel.rangeCount > 0) { + var textNode = sel.focusNode; + sel.collapse(textNode.nextSibling, charCount); + } + } else if ((sel = window.document.selection)) { + if (sel.type != "Control") { + range = sel.createRange(); + range.move("character", charCount); + range.select(); + } + } + } + + taRegisterTool('userName', { + iconclass: "fa fa-user", + tooltiptext: "Insert the member name", + action: function(){ + insertTextAtCursor("{{MEMBER_NAME}}"); + return moveCaret(1); + } + }); + taRegisterTool('surveyLink', { + iconclass: "fa fa-external-link", + tooltiptext: "Insert the Survey link", + action: function(){ + insertTextAtCursor("{{SURVEY_LINK}}"); + return moveCaret(1); + } + }); + // add the button to the default toolbar definition + taOptions.toolbar[1].push('colourRed'); + return taOptions; + }]); + }); function tagInput() { return { restrict: 'A', link: function( $scope, elem, attr) { + console.log("tagInput", $scope); $(elem).tagsinput({ - tagClass: 'label label-' + attr.tagInput + tagClass: 'label label-' + attr.tagInput, + val: 'test' }); } }; diff --git a/src/app/pages/surveys/create/createTabCtrl.js b/src/app/pages/surveys/create/createTabCtrl.js index 049481a..76ca5a7 100644 --- a/src/app/pages/surveys/create/createTabCtrl.js +++ b/src/app/pages/surveys/create/createTabCtrl.js @@ -46,6 +46,15 @@ $scope.survey.description = 'Page Description'; $scope.survey.elements = []; + $scope.display = {}; + $scope.display.survey = true; + $scope.display.sidebar = false; + $scope.display.surveySending = false; + + $scope.emailsTexts = [] + $scope.emailsTexts["s_360"] = "<p>Dear {{MEMBER_NAME}},<br><br>You have been selected to participate in a 360 Feedback Survey.<br><br>The purpose of a 360 Feedback Survey is to provide feedback to our leaders that will enable them to develop and improve.<br><br>To gain access to the site, please click on the link below.<br><br>{{SURVEY_LINK}}<br><br>We appreciate your assistance in this process and request that you complete the 360 feedback by .<br><br>Please be sure to answer all questions as honestly and as accurately as you can - all information received is kept strictly confidential. Thank you for taking the time to participate in this survey.<br><br>If you have any questions regarding the survey process or experience any technical difficulties, please contact .<br><br>Thank you for your participation<br></p>" + $scope.emailsTexts["s_default"] = "Normal" + $scope.progressFunction = function() { return $timeout(function() {}, 3000); }; @@ -89,6 +98,7 @@ comment: false, commentLabel: '', tags:[], + tagsJoined:'', items: (type == 'multiple') ? [item] : [], }; } @@ -172,8 +182,9 @@ $scope.submitSurvey=function(){ $scope.saveSurvey(); - $("#sidebar").fadeIn(); - $("#survey-actions").fadeOut(); + $scope.display.survey = false; + $scope.display.sidebar = true; + $scope.display.surveySending = true; }; $scope.sendSurvey=function(){ @@ -183,8 +194,9 @@ }; $scope.cancelSending=function(){ - $("#sidebar").fadeOut(); - $("#survey-actions").fadeIn(); + $scope.display.survey = true; + $scope.display.sidebar = false; + $scope.display.surveySending = false; }; $scope.updateBuilder=function(){ @@ -204,6 +216,11 @@ SurveyService .get(id) .then(function (data){ + $log.info("data[0]",data[0].elements); + angular.forEach(data[0].elements, function(elem) { + elem.tagsJoined = elem.tags.join(); + }); + $scope.survey = data[0]; $scope.updateBuilder(); $log.info("Got the survey data",$scope.survey); diff --git a/src/app/pages/surveys/create/widgets/multiple.html b/src/app/pages/surveys/create/widgets/multiple.html index 7508f52..a98d351 100644 --- a/src/app/pages/surveys/create/widgets/multiple.html +++ b/src/app/pages/surveys/create/widgets/multiple.html @@ -82,7 +82,10 @@ <div class="form-group"> <label class="col-md-12">Question Tags</label> <div class="col-md-12"> - <input type="text" tag-input="primary" ng-model="element.tags" ng-list data-role="tagsinput" placeholder="Add Tag"> + + <tags-input track-by-expr="$index" class="bootstrap" ng-model="element.tags" use-strings="true"> + + </tags-input> </div> </div> <!-- End Tags --> diff --git a/src/app/pages/surveys/surveys.module.js b/src/app/pages/surveys/surveys.module.js index 6f323d9..1b52c36 100644 --- a/src/app/pages/surveys/surveys.module.js +++ b/src/app/pages/surveys/surveys.module.js @@ -8,8 +8,7 @@ angular.module('BlurAdmin.pages.surveys', [ 'BlurAdmin.pages.surveys.create', 'BlurAdmin.pages.surveys.list', - ]) - .config(routeConfig); + ]).config(routeConfig); /** @ngInject */ function routeConfig($stateProvider) { diff --git a/src/app/pages/teams/lists/ListsTabCtrl.js b/src/app/pages/teams/lists/ListsTabCtrl.js index e4e5ff7..ecb715e 100644 --- a/src/app/pages/teams/lists/ListsTabCtrl.js +++ b/src/app/pages/teams/lists/ListsTabCtrl.js @@ -226,7 +226,7 @@ }; - vm.updateMembers = function (members, action, multi = false) { + vm.updateMembers = function (members, action, multi) { if (confirm("Are you sure?")) { console.log('updateMembers:members', members) diff --git a/src/sass/theme/_layout.scss b/src/sass/theme/_layout.scss index 9b79ac7..2d1544d 100644 --- a/src/sass/theme/_layout.scss +++ b/src/sass/theme/_layout.scss @@ -248,13 +248,13 @@ a { margin-top: -25px; } -#surveys [contenteditable='true']:hover{ +#surveys #survey-builder [contenteditable='true']:hover{ cursor:pointer; border: 1px dashed; padding: 5px; position:relative; } -#surveys [contenteditable='true']:after{ +#surveys #survey-builder [contenteditable='true']:after{ content: "\f040"; font-family: FontAwesome; opacity: 0; @@ -262,6 +262,75 @@ a { right: 10px; top: 5px; } -#surveys [contenteditable='true']:hover:after{ +#surveys #survey-builder [contenteditable='true']:hover:after{ opacity: 1; +} + +#surveys #survey-sending .compose-container .ta-text.ta-editor { + background-color: #F5F5F5; +} + +#surveys #survey-sending input { + margin : 10px 0; +} + +#surveys #survey-sending .btn-group, .btn-group-vertical { + margin-right: 20px; +} + + + + + + +.bootstrap .tags { + background-color: #fff; + border: 1px solid #ccc; + border-radius: 4px; + box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} + +.bootstrap .tags.focused { + border-color: #66afe9; + box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 8px rgba(102,175,233,0.6); +} + +.bootstrap .tags .tag-item { + background: #428bca; + border: 1px solid #357ebd; + border-radius: 4px; + color: #fff; +} + +.bootstrap .tags .tag-item.selected { + background: #d9534f; + border: 1px solid #d43f3a; + border-radius: 4px; + color: #fff; +} + +.bootstrap .tags .tag-item button { + background: transparent; + color: #000; + opacity: .4; +} + +.bootstrap .autocomplete { + border-radius: 4px; +} + +.bootstrap .autocomplete .suggestion-item.selected { + color: #262626; + background-color: #e9e9e9; +} + +.bootstrap .autocomplete .suggestion-item em { + font-weight: normal; + background-color: #ffff00; +} + +.bootstrap .autocomplete .suggestion-item.selected em { + color: #262626; + background-color: #ffff00; } \ No newline at end of file