diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index 33c94ef8..a579c654 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -1,6 +1,12 @@
Angular-xeditable changelog
=============================
+Version 0.10.0 Jun 24, 2019
+
+----------------------------
+[enh #747] Add Bootstrap 4 template (ckosloski)
+[enh #745] Allow users to disable checkboxes based on a condition (lohxx)
+
Version 0.9.0 Jul 20, 2018
----------------------------
diff --git a/bower.json b/bower.json
index 20ee628e..cf0dbc2f 100644
--- a/bower.json
+++ b/bower.json
@@ -1,6 +1,6 @@
{
"name": "angular-xeditable",
- "version": "0.9.0",
+ "version": "0.10.0",
"description": "Edit in place for AngularJS",
"author": "https://github.com/vitalets",
"license": "MIT",
diff --git a/dist/css/xeditable.min.css b/dist/css/xeditable.min.css
index b3ff1d32..750222c9 100644
--- a/dist/css/xeditable.min.css
+++ b/dist/css/xeditable.min.css
@@ -1,7 +1,7 @@
/*!
-angular-xeditable - 0.9.0
+angular-xeditable - 0.10.0
Edit-in-place for angular.js
-Build date: 2018-07-20
+Build date: 2019-06-24
*/
.editable-wrap{display:inline-block;white-space:pre;margin:0}.editable-wrap .editable-controls,.editable-wrap .editable-error{margin-bottom:0}.editable-wrap .editable-controls>input,.editable-wrap .editable-controls>select,.editable-wrap .editable-controls>textarea{margin-bottom:0}.editable-wrap .editable-input{display:inline-block}.editable-buttons{display:inline-block;vertical-align:top}.editable-buttons button{margin-left:5px}.editable-input.editable-has-buttons{width:auto}.editable-text{white-space:nowrap}.editable-bsdate{white-space:nowrap}.editable-bstime{white-space:nowrap}.editable-bstime .editable-input input[type=text]{width:46px}.editable-bstime .well-small{margin-bottom:0;padding:10px}.editable-range output{display:inline-block;min-width:30px;vertical-align:top;text-align:center}.editable-color input[type=color]{width:50px}.editable-checkbox label span,.editable-checklist label span,.editable-radiolist label span{margin-left:7px;margin-right:10px}.editable-hide{display:none!important}.editable-click,a.editable-click{text-decoration:none;color:#428bca;border-bottom:dashed 1px #428bca}.editable-click:hover,a.editable-click:hover{text-decoration:none;color:#2a6496;border-bottom-color:#2a6496}.editable-empty,.editable-empty:hover,.editable-empty:focus,a.editable-empty,a.editable-empty:hover,a.editable-empty:focus{font-style:italic;color:#D14;text-decoration:none}.ui-popover-wrapper a{display:inline!important}.ui-popover-wrapper form{display:none!important}.popover-wrapper>a{display:inline!important}.popover-wrapper{display:inline;position:relative}.popover-wrapper form{position:absolute;top:-53px;background:#FFF;border:1px solid #AAA;border-radius:5px;padding:7px;width:auto;display:inline-block;left:50%;z-index:101}.popover-wrapper form:before{content:"";width:0;height:0;border-left:10px solid transparent;border-right:10px solid transparent;border-top:10px solid #AAA;position:absolute;bottom:-10px}.popover-wrapper form:after{content:"";width:0;height:0;border-left:9px solid transparent;border-right:9px solid transparent;border-top:9px solid #FFF;position:absolute;bottom:-9px}@media screen and (max-width:750px){.popover-wrapper form{margin-left:-60px}.popover-wrapper form:before{left:50px}.popover-wrapper form:after{left:51px}}@media screen and (min-width:750px){.popover-wrapper form{margin-left:-110px}.popover-wrapper form:before{left:100px}.popover-wrapper form:after{left:101px}}
\ No newline at end of file
diff --git a/dist/js/xeditable.js b/dist/js/xeditable.js
index 3b146cfc..b0be5459 100644
--- a/dist/js/xeditable.js
+++ b/dist/js/xeditable.js
@@ -1,67 +1,67 @@
/*!
-angular-xeditable - 0.9.0
+angular-xeditable - 0.10.0
Edit-in-place for angular.js
-Build date: 2018-07-20
+Build date: 2019-06-24
*/
/**
- * Angular-xeditable module
+ * Angular-xeditable module
*
*/
angular.module('xeditable', [])
/**
- * Default options.
+ * Default options.
*
* @namespace editable-options
*/
//todo: maybe better have editableDefaults, not options...
.value('editableOptions', {
/**
- * Theme. Possible values `bs3`, `bs2`, `default`.
+ * Theme. Possible values `bs4`, `bs3`, `bs2`, `default`.
* Default is `default`
- *
+ *
* @var {string} theme
* @memberOf editable-options
- */
+ */
theme: 'default',
/**
- * icon_set. Possible values `font-awesome`, `default`.
+ * icon_set. Possible values `font-awesome`, `default`.
* Default is `default`
- *
+ *
* @var {string} icon set
* @memberOf editable-options
- */
+ */
icon_set: 'default',
/**
- * Whether to show buttons for single editable element.
- * Possible values `right`, `no`.
+ * Whether to show buttons for single editable element.
+ * Possible values `right`, `no`.
* Default is `right`
- *
+ *
* @var {string} buttons
* @memberOf editable-options
- */
+ */
buttons: 'right',
/**
- * Default value for `blur` attribute of single editable element.
- * Can be `cancel|submit|ignore`.
+ * Default value for `blur` attribute of single editable element.
+ * Can be `cancel|submit|ignore`.
* Default is `cancel`
- *
+ *
* @var {string} blurElem
* @memberOf editable-options
*/
blurElem: 'cancel',
/**
- * Default value for `blur` attribute of editable form.
- * Can be `cancel|submit|ignore`.
+ * Default value for `blur` attribute of editable form.
+ * Can be `cancel|submit|ignore`.
* Default is `ignore`.
- *
+ *
* @var {string} blurForm
* @memberOf editable-options
*/
blurForm: 'ignore',
/**
- * How input elements get activated. Possible values: `focus|select|none`.
+ * How input elements get activated. Possible values: `focus|select|none`.
* Default is `focus`
*
* @var {string} activate
@@ -69,17 +69,17 @@ angular.module('xeditable', [])
*/
activate: 'focus',
/**
- * Whether to disable x-editable. Can be overloaded on each element.
+ * Whether to disable x-editable. Can be overloaded on each element.
* Default is `false`
*
* @var {boolean} isDisabled
* @memberOf editable-options
*/
isDisabled: false,
-
+
/**
- * Event, on which the edit mode gets activated.
- * Can be any event.
+ * Event, on which the edit mode gets activated.
+ * Can be any event.
* Default is `click`
*
* @var {string} activationEvent
@@ -88,7 +88,7 @@ angular.module('xeditable', [])
activationEvent: 'click',
/**
- * The default title of the submit button.
+ * The default title of the submit button.
* Default is `Submit`
*
* @var {string} submitButtonTitle
@@ -97,7 +97,7 @@ angular.module('xeditable', [])
submitButtonTitle: 'Submit',
/**
- * The default aria label of the submit button.
+ * The default aria label of the submit button.
* Default is `Submit`
*
* @var {string} submitButtonAriaLabel
@@ -106,7 +106,7 @@ angular.module('xeditable', [])
submitButtonAriaLabel: 'Submit',
/**
- * The default title of the cancel button.
+ * The default title of the cancel button.
* Default is `Cancel`
*
* @var {string} cancelButtonTitle
@@ -115,7 +115,7 @@ angular.module('xeditable', [])
cancelButtonTitle: 'Cancel',
/**
- * The default aria label of the cancel button.
+ * The default aria label of the cancel button.
* Default is `Cancel`
*
* @var {string} cancelButtonAriaLabel
@@ -124,7 +124,7 @@ angular.module('xeditable', [])
cancelButtonAriaLabel: 'Cancel',
/**
- * The default title of the clear button.
+ * The default title of the clear button.
* Default is `Clear`
*
* @var {string} clearButtonTitle
@@ -133,7 +133,7 @@ angular.module('xeditable', [])
clearButtonTitle: 'Clear',
/**
- * The default aria label of the clear button.
+ * The default aria label of the clear button.
* Default is `Clear`
*
* @var {string} clearButtonAriaLabel
@@ -142,7 +142,7 @@ angular.module('xeditable', [])
clearButtonAriaLabel: 'Clear',
/**
- * Whether to display the clear button.
+ * Whether to display the clear button.
* Default is `false`
*
* @var {boolean} displayClearButton
@@ -253,8 +253,10 @@ angular.module('xeditable').directive('editableBsdate', ['editableDirectiveFacto
//See if calendar button should be displayed
if (showCalendarButton === "true") {
- var buttonDatePicker = angular.element(' ');
- var buttonWrapper = angular.element(' ');
+ var buttonDatePicker = angular.element(' ');
+ var buttonWrapper = angular.element(' ');
buttonDatePicker.attr('ng-click', attrs.eNgClick);
@@ -376,6 +378,7 @@ angular.module('xeditable').directive('editableChecklist', [
var parsed = editableNgOptionsParser(this.attrs.eNgOptions);
var ngChangeHtml = '';
var ngChecklistComparatorHtml = '';
+ var ngDisabled = '';
if (this.attrs.eNgChange) {
ngChangeHtml = ' ng-change="' + this.attrs.eNgChange + '"';
@@ -384,10 +387,14 @@ angular.module('xeditable').directive('editableChecklist', [
if (this.attrs.eChecklistComparator) {
ngChecklistComparatorHtml = ' checklist-comparator="' + this.attrs.eChecklistComparator + '"';
}
+
+ if(this.attrs.eNgDisabled){
+ ngDisabled = ' ng-disabled="' + this.attrs.eNgDisabled+'"';
+ }
var html = ''+
' '+
+ ngChangeHtml + ngChecklistComparatorHtml + ngDisabled+'>'+
' ';
this.inputEl.removeAttr('ng-model');
@@ -2615,19 +2622,28 @@ angular.module('xeditable').factory('editableIcons', function() {
'bs2': {
ok: 'icon-ok icon-white',
cancel: 'icon-remove',
- clear: 'icon-trash'
+ clear: 'icon-trash',
+ calendar: 'icon-calendar'
},
'bs3': {
ok: 'glyphicon glyphicon-ok',
cancel: 'glyphicon glyphicon-remove',
- clear: 'glyphicon glyphicon-trash'
+ clear: 'glyphicon glyphicon-trash',
+ calendar: 'glyphicon glyphicon-calendar'
+ },
+ 'bs4': {
+ ok: 'fa fa-check',
+ cancel: 'fa fa-times',
+ clear: 'fa fa-trash',
+ calendar: 'fa fa-calendar'
}
},
external: {
'font-awesome': {
ok: 'fa fa-check',
cancel: 'fa fa-times',
- clear: 'fa fa-trash'
+ clear: 'fa fa-trash',
+ calendar: 'fa fa-calendar'
}
}
};
@@ -2672,8 +2688,9 @@ angular.module('xeditable').factory('editableThemes', function() {
cancelTpl: ''+
' '+
' ',
- resetTpl: 'clear '
-
+ resetTpl: 'clear ',
+ calendarButtonClass: 'btn',
+ buttonGroupAppendClass: 'input-append'
},
//bs3
@@ -2694,6 +2711,8 @@ angular.module('xeditable').factory('editableThemes', function() {
buttonsClass: '',
//bs3 specific prop to change standard inputs class: input-sm, input-lg
inputClass: '',
+ calendarButtonClass: 'btn btn-default',
+ buttonGroupAppendClass: 'input-group-btn',
postrender: function() {
//apply `form-control` class to std inputs
switch(this.directiveName) {
@@ -2734,7 +2753,69 @@ angular.module('xeditable').factory('editableThemes', function() {
}
}
},
-
+
+ //bs4
+ 'bs4': {
+ formTpl: '
',
+ noformTpl: ' ',
+ controlsTpl: '
',
+ inputTpl: '',
+ errorTpl: '
',
+ buttonsTpl: ' ',
+ submitTpl: ' ',
+ cancelTpl: ''+
+ ' '+
+ ' ',
+ resetTpl: 'clear ',
+
+ //bs4 specific prop to change buttons class: btn-sm, btn-lg
+ buttonsClass: '',
+ //bs4 specific prop to change standard inputs class: form-control-sm, form-control-lg
+ inputClass: '',
+ calendarButtonClass: 'btn btn-secondary',
+ buttonGroupAppendClass: 'input-group-append',
+ postrender: function() {
+ //apply `form-control` class to std inputs
+ switch(this.directiveName) {
+ case 'editableText':
+ case 'editableSelect':
+ case 'editableTextarea':
+ case 'editableEmail':
+ case 'editableTel':
+ case 'editableNumber':
+ case 'editableUrl':
+ case 'editableSearch':
+ case 'editableDate':
+ case 'editableDatetime':
+ case 'editableBsdate':
+ case 'editableTime':
+ case 'editableMonth':
+ case 'editableWeek':
+ case 'editablePassword':
+ case 'editableDatetimeLocal':
+ this.inputEl.addClass('form-control');
+ this.inputEl.attr('ng-class', "{'is-invalid': $error}");
+ if (this.theme.inputClass) {
+ // don`t apply `form-control-sm` and `form-control-lg` to select multiple
+ // should be fixed in bs itself!
+ if(this.inputEl.attr('multiple') &&
+ (this.theme.inputClass === 'form-control-sm' || this.theme.inputClass === 'form-control-lg')) {
+ break;
+ }
+ this.inputEl.addClass(this.theme.inputClass);
+ }
+ break;
+ case 'editableCheckbox':
+ this.editorEl.addClass('form-check');
+ }
+
+ //apply buttonsClass (bs4 specific!)
+ if(this.buttonsEl && this.theme.buttonsClass) {
+ this.buttonsEl.find('button').addClass(this.theme.buttonsClass);
+ }
+ }
+ },
+
//semantic-ui
'semantic': {
formTpl: '',
diff --git a/dist/js/xeditable.min.js b/dist/js/xeditable.min.js
index feb74116..6826e248 100644
--- a/dist/js/xeditable.min.js
+++ b/dist/js/xeditable.min.js
@@ -1,7 +1,7 @@
/*!
-angular-xeditable - 0.9.0
+angular-xeditable - 0.10.0
Edit-in-place for angular.js
-Build date: 2018-07-20
+Build date: 2019-06-24
*/
-angular.module("xeditable",[]).value("editableOptions",{theme:"default",icon_set:"default",buttons:"right",blurElem:"cancel",blurForm:"ignore",activate:"focus",isDisabled:!1,activationEvent:"click",submitButtonTitle:"Submit",submitButtonAriaLabel:"Submit",cancelButtonTitle:"Cancel",cancelButtonAriaLabel:"Cancel",clearButtonTitle:"Clear",clearButtonAriaLabel:"Clear",displayClearButton:!1}),angular.module("xeditable").directive("editableBsdate",["editableDirectiveFactory","$injector","$parse",function(a,b,c){var d=b.get("uibDatepickerConfig"),e=b.get("uibDatepickerPopupConfig"),f=[["eIsOpen","is-open"],["eDateDisabled","date-disabled"],["eDatepickerPopup","uib-datepicker-popup"],["eShowButtonBar","show-button-bar"],["eCurrentText","current-text"],["eClearText","clear-text"],["eCloseText","close-text"],["eCloseOnDateSelection","close-on-date-selection"],["eDatepickerAppendToBody","datepicker-append-to-body"],["eOnOpenFocus","on-open-focus"],["eName","name"],["eDateDisabled","date-disabled"],["eAltInputFormats","alt-input-formats"],["eDatepickerTemplateUrl","datepicker-template-url"]],g=[["eFormatDay","formatDay"],["eFormatMonth","formatMonth"],["eFormatYear","formatYear"],["eFormatDayHeader","formatDayHeader"],["eFormatDayTitle","formatDayTitle"],["eFormatMonthTitle","formatMonthTitle"],["eMaxMode","maxMode"],["eMinMode","minMode"],["eDatepickerMode","datepickerMode"]];return a({directiveName:"editableBsdate",inputTpl:"
",render:function(){this.parent.render.call(this);var a=this.attrs,b=this.scope,h=angular.element(' ');h.attr("uib-datepicker-popup",a.eDatepickerPopupXEditable||e.datepickerPopup),h.attr("year-range",a.eYearRange||20),h.attr("ng-readonly",a.eReadonly||!1);for(var i=f.length-1;i>=0;i--){var j=a[f[i][0]];"undefined"!=typeof j&&h.attr(f[i][1],j)}a.eNgChange&&(h.attr("ng-change",a.eNgChange),this.inputEl.removeAttr("ng-change")),a.eStyle&&(h.attr("style",a.eStyle),this.inputEl.removeAttr("style"));var k={maxDate:b.$eval(a.eMaxDate)||d.maxDate,minDate:b.$eval(a.eMinDate)||d.minDate,showWeeks:a.eShowWeeks?"true"===a.eShowWeeks.toLowerCase():d.showWeeks,startingDay:a.eStartingDay||0,initDate:b.$eval(a.eInitDate)||new Date};if(a.eDatepickerOptions){var l=c(a.eDatepickerOptions)(b);angular.extend(k,l)}for(var m=g.length-1;m>=0;m--){var n=a[g[m][0]];"undefined"!=typeof n&&(k[g[m][1]]=n)}b.dateOptions=k;var o=angular.isDefined(a.eShowCalendarButton)?a.eShowCalendarButton:"true";if("true"===o){var p=angular.element(' '),q=angular.element(' ');p.attr("ng-click",a.eNgClick),q.append(p),this.inputEl.append(q)}else h.attr("ng-click",a.eNgClick);h.attr("datepicker-options","dateOptions"),this.inputEl.prepend(h),this.inputEl.removeAttr("class"),this.inputEl.removeAttr("ng-click"),this.inputEl.removeAttr("is-open"),this.inputEl.removeAttr("init-date"),this.inputEl.removeAttr("datepicker-popup"),this.inputEl.removeAttr("required"),this.inputEl.removeAttr("ng-model"),this.inputEl.removeAttr("date-picker-append-to-body"),this.inputEl.removeAttr("name"),this.inputEl.attr("class","input-group")},autosubmit:function(){var a=this;a.inputEl.bind("change",function(){setTimeout(function(){a.scope.$apply(function(){a.scope.$form.$submit()})},500)}),a.inputEl.bind("keydown",function(b){9===b.keyCode&&"submit"===a.editorEl.attr("blur")&&a.scope.$apply(function(){a.scope.$form.$submit()})})}})}]),angular.module("xeditable").directive("editableBstime",["editableDirectiveFactory",function(a){return a({directiveName:"editableBstime",inputTpl:"
",render:function(){this.parent.render.call(this);var a=angular.element('
');a.attr("ng-model",this.inputEl.attr("ng-model")),this.inputEl.removeAttr("ng-model"),this.attrs.eNgChange&&(a.attr("ng-change",this.inputEl.attr("ng-change")),this.inputEl.removeAttr("ng-change")),this.inputEl.wrap(a)}})}]),angular.module("xeditable").directive("editableCheckbox",["editableDirectiveFactory",function(a){return a({directiveName:"editableCheckbox",inputTpl:' ',render:function(){this.parent.render.call(this),this.inputEl.wrap(" "),this.attrs.eTitle&&this.inputEl.parent().append(""+this.attrs.eTitle+" ")},autosubmit:function(){var a=this;a.inputEl.bind("change",function(){setTimeout(function(){a.scope.$apply(function(){a.scope.$form.$submit()})},500)})}})}]),angular.module("xeditable").directive("editableChecklist",["editableDirectiveFactory","editableNgOptionsParser",function(a,b){return a({directiveName:"editableChecklist",inputTpl:" ",useCopy:!0,render:function(){this.parent.render.call(this);var a=b(this.attrs.eNgOptions),c="",d="";this.attrs.eNgChange&&(c=' ng-change="'+this.attrs.eNgChange+'"'),this.attrs.eChecklistComparator&&(d=' checklist-comparator="'+this.attrs.eChecklistComparator+'"');var e=' ';this.inputEl.removeAttr("ng-model"),this.inputEl.removeAttr("ng-options"),this.inputEl.removeAttr("ng-change"),this.inputEl.removeAttr("checklist-comparator"),this.inputEl.html(e)}})}]),angular.module("xeditable").directive("editableCombodate",["editableDirectiveFactory","editableCombodate",function(a,b){return a({directiveName:"editableCombodate",inputTpl:' ',render:function(){this.parent.render.call(this);var a={value:new Date(this.scope.$data)},c=this;angular.forEach(["format","template","minYear","maxYear","yearDescending","minuteStep","secondStep","firstItem","errorClass","customClass","roundTime","smartDays"],function(b){var d="e"+b.charAt(0).toUpperCase()+b.slice(1);d in c.attrs&&("minYear"==b||"maxYear"==b||"minuteStep"==b||"secondStep"==b?a[b]=parseInt(c.attrs[d],10):a[b]=c.attrs[d])});var d=b.getInstance(this.inputEl,a);d.$widget.find("select").bind("change",function(a){c.scope.$data=d.getValue()?moment(d.getValue(),d.options.format).toDate().toISOString():null}).change()}})}]),function(){var a=function(a){return a.toLowerCase().replace(/-(.)/g,function(a,b){return b.toUpperCase()})},b="text|password|email|tel|number|url|search|color|date|datetime|datetime-local|time|month|week|file".split("|");angular.forEach(b,function(b){var c=a("editable-"+b);angular.module("xeditable").directive(c,["editableDirectiveFactory",function(a){return a({directiveName:c,inputTpl:' ',render:function(){this.parent.render.call(this);var a=this.attrs;this.scope;if(a.eInputgroupleft||a.eInputgroupright){if(this.inputEl.wrap('
'),a.eInputgroupleft){var b=angular.element(' ');this.inputEl.parent().prepend(b)}if(a.eInputgroupright){var c=angular.element(' ');this.inputEl.parent().append(c)}}if(a.eLabel){var d=angular.element(""+a.eLabel+" ");a.eInputgroupleft||a.eInputgroupright?this.inputEl.parent().parent().prepend(d):this.inputEl.parent().prepend(d)}a.eFormclass&&(this.editorEl.addClass(a.eFormclass),this.inputEl.removeAttr("formclass"))},autosubmit:function(){var a=this;a.inputEl.bind("keydown",function(b){9===b.keyCode&&"submit"===a.editorEl.attr("blur")&&a.scope.$apply(function(){a.scope.$form.$submit()})})}})}])}),angular.module("xeditable").directive("editableRange",["editableDirectiveFactory","$interpolate",function(a,b){return a({directiveName:"editableRange",inputTpl:' ',render:function(){this.parent.render.call(this),this.inputEl.after(""+b.startSymbol()+"$data"+b.endSymbol()+" ")}})}])}(),angular.module("xeditable").directive("editableTagsInput",["editableDirectiveFactory","editableUtils",function(a,b){var c=a({directiveName:"editableTagsInput",inputTpl:" ",useCopy:!0,render:function(){this.parent.render.call(this),this.inputEl.append(b.rename("auto-complete",this.attrs.$autoCompleteElement)),this.inputEl.removeAttr("ng-model"),this.inputEl.attr("ng-model","$parent.$data")}}),d=c.link;return c.link=function(a,b,c,e){var f=b.find("editable-tags-input-auto-complete");return c.$autoCompleteElement=f.clone(),f.remove(),d(a,b,c,e)},c}]),angular.module("xeditable").directive("editableRadiolist",["editableDirectiveFactory","editableNgOptionsParser","$interpolate",function(a,b,c){return a({directiveName:"editableRadiolist",inputTpl:" ",render:function(){this.parent.render.call(this);var a=b(this.attrs.eNgOptions),d="",e="";this.attrs.eNgChange&&(d=' ng-change="'+this.attrs.eNgChange+'"'),this.attrs.eName&&(e=' name="'+this.attrs.eName+'"');var f=' ';this.inputEl.removeAttr("ng-model"),this.inputEl.removeAttr("ng-options"),this.inputEl.removeAttr("ng-change"),this.inputEl.html(f)},autosubmit:function(){var a=this;a.inputEl.bind("change",function(){setTimeout(function(){a.scope.$apply(function(){a.scope.$form.$submit()})},500)})}})}]),angular.module("xeditable").directive("editableSelect",["editableDirectiveFactory",function(a){return a({directiveName:"editableSelect",inputTpl:" ",render:function(){if(this.parent.render.call(this),this.attrs.ePlaceholder){var a=angular.element(''+this.attrs.ePlaceholder+" ");this.inputEl.append(a)}},autosubmit:function(){var a=this;a.attrs.hasOwnProperty("eMultiple")||a.inputEl.bind("change",function(){a.scope.$apply(function(){a.scope.$form.$submit()})})}})}]),angular.module("xeditable").directive("editableTextarea",["editableDirectiveFactory",function(a){return a({directiveName:"editableTextarea",inputTpl:"",render:function(){this.parent.render.call(this),this.attrs.eFormclass&&(this.editorEl.addClass(this.attrs.eFormclass),this.inputEl.removeAttr("formclass"))},addListeners:function(){var a=this;a.parent.addListeners.call(a),a.single&&"no"!==a.buttons&&a.autosubmit()},autosubmit:function(){var a=this;a.inputEl.bind("keydown",function(b){a.attrs.submitOnEnter?13!==b.keyCode||b.shiftKey||a.scope.$apply(function(){a.scope.$form.$submit()}):((b.ctrlKey||b.metaKey)&&13===b.keyCode||9===b.keyCode&&"submit"===a.editorEl.attr("blur"))&&a.scope.$apply(function(){a.scope.$form.$submit()})})}})}]),angular.module("xeditable").directive("editableUidate",["editableDirectiveFactory",function(a){return a({directiveName:"editableUidate",inputTpl:' ',render:function(){this.parent.render.call(this),this.inputEl.attr("ui-date",this.attrs.eUiDate),this.inputEl.attr("placeholder",this.attrs.ePlaceholder)}})}]),angular.module("xeditable").directive("editableUiSelect",["editableDirectiveFactory","editableUtils",function(a,b){var c=a({directiveName:"editableUiSelect",inputTpl:" ",render:function(){this.parent.render.call(this),this.inputEl.append(b.rename("ui-select-match",this.attrs.$matchElement)),this.inputEl.append(b.rename("ui-select-choices",this.attrs.$choicesElement)),this.inputEl.removeAttr("ng-model"),this.inputEl.attr("ng-model","$parent.$parent.$data")},autosubmit:function(){var a=this;a.inputEl.bind("change",function(){setTimeout(function(){a.scope.$apply(function(){a.scope.$form.$submit()})},500)}),a.inputEl.bind("keydown",function(b){9===b.keyCode&&"submit"===a.editorEl.attr("blur")&&a.scope.$apply(function(){a.scope.$form.$submit()})})}}),d=c.link;return c.link=function(a,b,c,e){var f=b.find("editable-ui-select-match"),g=b.find("editable-ui-select-choices");return c.$matchElement=f.clone(),c.$choicesElement=g.clone(),f.remove(),g.remove(),d(a,b,c,e)},c}]),angular.module("xeditable").factory("editableController",["$q","editableUtils",function(a,b){function c(a,c,d,e,f,g,h,i,j,k,l,m){var n,o,p=this;p.scope=a,p.elem=d,p.attrs=c,p.inputEl=null,p.editorEl=null,p.single=!0,p.error="",p.theme=f[c.editableTheme]||f[h.theme]||f["default"],p.parent={};var q=c.editableTheme||h.theme||"default",r=c.editableIconSet||h.icon_set;p.icon_set="default"===r?g["default"][q]:g.external[r],p.inputTpl="",p.directiveName="",p.useCopy=!1,p.single=null,p.buttons="right",p.popover=!1,p.init=function(b){if(p.single=b,p.name=c.eName||c[p.directiveName],!c[p.directiveName])throw"You should provide value for `"+p.directiveName+"` in editable element!";n=e(c[p.directiveName]),p.single?p.buttons=p.attrs.buttons||h.buttons:p.buttons="no",c.eName&&p.scope.$watch("$data",function(a){p.scope.$form.$data[c.eName]=a}),c.onshow&&(p.onshow=function(){return p.catchError(e(c.onshow)(a))}),c.onhide&&(p.onhide=function(){return e(c.onhide)(a)}),c.oncancel&&(p.oncancel=function(){return e(c.oncancel)(a)}),c.onbeforesave&&(p.onbeforesave=function(){return p.catchError(e(c.onbeforesave)(a))}),c.onaftersave&&(p.onaftersave=function(){return p.catchError(e(c.onaftersave)(a))}),c.popover&&(p.popover=p.attrs.popover),a.$parent.$watch(c[p.directiveName],function(a,b){p.setLocalValue(),p.handleEmpty()})},p.render=function(){var a=p.theme;p.inputEl=angular.element(p.inputTpl),p.controlsEl=angular.element(a.controlsTpl),p.controlsEl.append(p.inputEl),"no"!==p.buttons&&(p.buttonsEl=angular.element(a.buttonsTpl),p.submitEl=angular.element(a.submitTpl),p.resetEl=angular.element(a.resetTpl),p.cancelEl=angular.element(a.cancelTpl),p.submitEl.attr("title",h.submitButtonTitle),p.submitEl.attr("aria-label",h.submitButtonAriaLabel),p.cancelEl.attr("title",h.cancelButtonTitle),p.cancelEl.attr("aria-label",h.cancelButtonAriaLabel),p.resetEl.attr("title",h.clearButtonTitle),p.resetEl.attr("aria-label",h.clearButtonAriaLabel),p.icon_set&&(p.submitEl.find("span").addClass(p.icon_set.ok),p.cancelEl.find("span").addClass(p.icon_set.cancel),p.resetEl.find("span").addClass(p.icon_set.clear)),p.buttonsEl.append(p.submitEl).append(p.cancelEl),h.displayClearButton&&p.buttonsEl.append(p.resetEl),p.controlsEl.append(p.buttonsEl),p.inputEl.addClass("editable-has-buttons")),p.errorEl=angular.element(a.errorTpl),p.controlsEl.append(p.errorEl),p.editorEl=angular.element(p.single?a.formTpl:a.noformTpl),p.editorEl.append(p.controlsEl);for(var d in c.$attr)if(!(d.length<=1)){var e=!1,f=d.substring(1,2);if("e"===d.substring(0,1)&&f===f.toUpperCase()&&(e=d.substring(1),"Form"!==e&&"NgSubmit"!==e)){var g=e.substring(0,1),i=e.substring(1,2);e=i===i.toUpperCase()&&g===g.toUpperCase()?g.toLowerCase()+"-"+b.camelToDash(e.substring(1)):g.toLowerCase()+b.camelToDash(e.substring(1));var j="value"!==e&&""===c[d]?e:c[d];p.inputEl.attr(e,j)}}if(p.inputEl.addClass("editable-input"),p.inputEl.attr("ng-model","$parent.$data"),p.editorEl.addClass(b.camelToDash(p.directiveName)),p.single&&(p.editorEl.attr("editable-form","$form"),p.editorEl.attr("blur",p.attrs.blur||h.blurElem)),p.popover){var k=angular.element("
");k.append(p.editorEl),p.editorEl=k,m.put("popover.html",p.editorEl[0].outerHTML)}angular.isFunction(a.postrender)&&a.postrender.call(p)},p.setLocalValue=function(){p.scope.$data=p.useCopy?angular.copy(n(a.$parent)):n(a.$parent)};var s=null;p.show=function(){return p.setLocalValue(),p.render(),d.after(p.editorEl),s=a.$new(),j(p.editorEl)(s),p.addListeners(),d.addClass("editable-hide"),p.onshow()},p.hide=function(){return s.$destroy(),p.controlsEl.remove(),p.editorEl.remove(),d.removeClass("editable-hide"),p.popover&&m.remove("popover.html"),p.onhide()},p.cancel=function(){p.oncancel()},p.addListeners=function(){p.inputEl.bind("keyup",function(a){if(p.single)switch(a.keyCode){case 27:p.scope.$apply(function(){p.scope.$form.$cancel()})}}),p.single&&"no"===p.buttons&&p.autosubmit(),p.editorEl.bind("click",function(a){a.which&&1!==a.which||p.scope.$form.$visible&&(p.scope.$form._clicked=!0)})},p.setWaiting=function(a){a?(o=!p.inputEl.attr("disabled")&&!p.inputEl.attr("ng-disabled")&&!p.inputEl.attr("ng-enabled"),o&&(p.inputEl.attr("disabled","disabled"),p.buttonsEl&&p.buttonsEl.find("button").attr("disabled","disabled"))):o&&(p.inputEl.removeAttr("disabled"),p.buttonsEl&&p.buttonsEl.find("button").removeAttr("disabled"))},p.activate=function(a,b){setTimeout(function(){var c=p.inputEl[0];"focus"===h.activate&&c.focus?(void 0!==a&&""!==a&&c.setSelectionRange&&(b=b||a,c.onfocus=function(){setTimeout(function(){try{this.setSelectionRange(a,b)}catch(c){}}.bind(this))}),"editableRadiolist"==p.directiveName||"editableChecklist"==p.directiveName||"editableBsdate"==p.directiveName||"editableTagsInput"==p.directiveName?c.querySelector(".ng-pristine").focus():c.focus()):"select"===h.activate&&(c.select?c.select():c.focus&&c.focus())},0)},p.setError=function(b){angular.isObject(b)||(a.$error=l.trustAsHtml(b),p.error=b)},p.catchError=function(a,b){return angular.isObject(a)&&b!==!0?k.when(a).then(angular.bind(this,function(a){this.catchError(a,!0)}),angular.bind(this,function(a){this.catchError(a,!0)})):b&&angular.isObject(a)&&a.status&&200!==a.status&&a.data&&angular.isString(a.data)?(this.setError(a.data),a=a.data):angular.isString(a)&&this.setError(a),a},p.save=function(){n.assign(a.$parent,p.useCopy?angular.copy(p.scope.$data):p.scope.$data)},p.handleEmpty=function(){var b=n(a.$parent),c=null===b||void 0===b||""===b||angular.isArray(b)&&0===b.length;d.toggleClass("editable-empty",c)},p.autosubmit=angular.noop,p.onshow=angular.noop,p.onhide=angular.noop,p.oncancel=angular.noop,p.onbeforesave=angular.noop,p.onaftersave=angular.noop}return c.$inject=["$scope","$attrs","$element","$parse","editableThemes","editableIcons","editableOptions","$rootScope","$compile","$q","$sce","$templateCache"],c}]),angular.module("xeditable").factory("editableDirectiveFactory",["$parse","$compile","editableThemes","$rootScope","$document","editableController","editableFormController","editableOptions",function(a,b,c,d,e,f,g,h){return function(b){return{restrict:"A",scope:!0,require:[b.directiveName,"?^form"],controller:f,link:function(c,f,i,j){var k,l=j[0],m=!1;if(j[1])k=j[1],m=void 0===i.eSingle;else if(i.eForm){var n=a(i.eForm)(c);if(n)k=n,m=!0;else if(f&&"function"==typeof f.parents&&f.parents().last().find('form[name="'+i.eForm+'"]').length)k=null,m=!0;else for(var o=0;o=0&&a.splice(c,1),b},camelToDash:function(a){var b=/[A-Z]/g;return a.replace(b,function(a,b){return(b?"-":"")+a.toLowerCase()})},dashToCamel:function(a){var b=/([\:\-\_]+(.))/g,c=/^moz([A-Z])/;return a.replace(b,function(a,b,c,d){return d?c.toUpperCase():c}).replace(c,"Moz$1")},rename:function(a,b){if(b[0]&&b[0].attributes){var c=angular.element("<"+a+"/>");c.html(b.html());for(var d=b[0].attributes,e=0;e').html(this.getTemplate()),this.initCombos(),this.options.smartDays){var a=this;this.$widget.find("select").bind("change",function(b){(angular.element(b.target).hasClass("month")||angular.element(b.target).hasClass("year"))&&a.fillCombo("day")})}this.$widget.find("select").css("width","auto"),this.$element.css("display","none").after(this.$widget),this.setValue(this.$element.val()||this.options.value)},getTemplate:function(){var a=this.options.template,b=this.options.customClass;return angular.forEach(this.map,function(b,c){b=b[0];var d=new RegExp(b+"+"),e=b.length>1?b.substring(1,2):b;a=a.replace(d,"{"+e+"}")}),a=a.replace(/ /g," "),angular.forEach(this.map,function(c,d){c=c[0];var e=c.length>1?c.substring(1,2):c;a=a.replace("{"+e+"}",' ')}),a},initCombos:function(){for(var a in this.map){var b=this.$widget[0].querySelectorAll("."+a);this["$"+a]=b.length?angular.element(b):null,this.fillCombo(a)}},fillCombo:function(a){var b=this["$"+a];if(b){var c="fill"+a.charAt(0).toUpperCase()+a.slice(1),d=this[c](),e=b.val();b.html("");for(var f=0;f'+d[f][1]+"");b.val(e)}},fillCommon:function(a){var b,c=[];if("name"===this.options.firstItem){b=moment.relativeTime||moment.langData()._relativeTime;var d="function"==typeof b[a]?b[a](1,!0,a,!1):b[a];d=d.split(" ").reverse()[0],c.push(["",d])}else"empty"===this.options.firstItem&&c.push(["",""]);return c},fillDay:function(){var a,b,c=this.fillCommon("d"),d=-1!==this.options.template.indexOf("DD"),e=31;if(this.options.smartDays&&this.$month&&this.$year){var f=parseInt(this.$month.val(),10),g=parseInt(this.$year.val(),10);isNaN(f)||isNaN(g)||(e=moment([g,f]).daysInMonth())}for(b=1;e>=b;b++)a=d?this.leadZero(b):b,c.push([b,a]);return c},fillMonth:function(){var a,b,c=this.fillCommon("M"),d=-1!==this.options.template.indexOf("MMMM"),e=-1!==this.options.template.indexOf("MMM"),f=-1!==this.options.template.indexOf("MM");for(b=0;11>=b;b++)a=d?moment().date(1).month(b).format("MMMM"):e?moment().date(1).month(b).format("MMM"):f?this.leadZero(b+1):b+1,c.push([b,a]);return c},fillYear:function(){var a,b,c=[],d=-1!==this.options.template.indexOf("YYYY");for(b=this.options.maxYear;b>=this.options.minYear;b--)a=d?b:(b+"").substring(2),c[this.options.yearDescending?"push":"unshift"]([b,a]);return c=this.fillCommon("y").concat(c)},fillHour:function(){var a,b,c=this.fillCommon("h"),d=-1!==this.options.template.indexOf("h"),e=(-1!==this.options.template.indexOf("H"),-1!==this.options.template.toLowerCase().indexOf("hh")),f=d?1:0,g=d?12:23;for(b=f;g>=b;b++)a=e?this.leadZero(b):b,c.push([b,a]);return c},fillMinute:function(){var a,b,c=this.fillCommon("m"),d=-1!==this.options.template.indexOf("mm");for(b=0;59>=b;b+=this.options.minuteStep)a=d?this.leadZero(b):b,c.push([b,a]);return c},fillSecond:function(){var a,b,c=this.fillCommon("s"),d=-1!==this.options.template.indexOf("ss");for(b=0;59>=b;b+=this.options.secondStep)a=d?this.leadZero(b):b,c.push([b,a]);return c},fillAmpm:function(){var a=-1!==this.options.template.indexOf("a"),b=(-1!==this.options.template.indexOf("A"),[["am",a?"am":"AM"],["pm",a?"pm":"PM"]]);return b},getValue:function(a){var b,c={},d=this,e=!1;return angular.forEach(this.map,function(a,b){if("ampm"!==b){var f="day"===b?1:0;return c[b]=d["$"+b]?parseInt(d["$"+b].val(),10):f,isNaN(c[b])?(e=!0,!1):void 0}}),e?"":(this.$ampm&&(12===c.hour?c.hour="am"===this.$ampm.val()?0:12:c.hour="am"===this.$ampm.val()?c.hour:c.hour+12),b=moment([c.year,c.month,c.day,c.hour,c.minute,c.second]),this.highlight(b),a=void 0===a?this.options.format:a,null===a?b.isValid()?b:null:b.isValid()?b.format(a):"")},setValue:function(a){function b(a,b){var c={};return angular.forEach(a.children("option"),function(a,d){var e=angular.element(a).attr("value");if(""!==e){var f=Math.abs(e-b);("undefined"==typeof c.distance||f=12?(e.ampm="pm",e.hour>12&&(e.hour-=12)):(e.ampm="am",0===e.hour&&(e.hour=12))),angular.forEach(e,function(a,c){d["$"+c]&&("minute"===c&&d.options.minuteStep>1&&d.options.roundTime&&(a=b(d["$"+c],a)),"second"===c&&d.options.secondStep>1&&d.options.roundTime&&(a=b(d["$"+c],a)),
-d["$"+c].val(a))}),this.options.smartDays&&this.fillCombo("day"),this.$element.val(c.format(this.options.format)).triggerHandler("change"))}},highlight:function(a){a.isValid()?this.options.errorClass?this.$widget.removeClass(this.options.errorClass):this.$widget.find("select").css("border-color",this.borderColor):this.options.errorClass?this.$widget.addClass(this.options.errorClass):(this.borderColor||(this.borderColor=this.$widget.find("select").css("border-color")),this.$widget.find("select").css("border-color","red"))},leadZero:function(a){return 9>=a?"0"+a:a},destroy:function(){this.$widget.remove(),this.$element.removeData("combodate").show()}},{getInstance:function(b,c){return new a(b,c)}}}]),angular.module("xeditable").factory("editableIcons",function(){var a={"default":{bs2:{ok:"icon-ok icon-white",cancel:"icon-remove",clear:"icon-trash"},bs3:{ok:"glyphicon glyphicon-ok",cancel:"glyphicon glyphicon-remove",clear:"glyphicon glyphicon-trash"}},external:{"font-awesome":{ok:"fa fa-check",cancel:"fa fa-times",clear:"fa fa-trash"}}};return a}),angular.module("xeditable").factory("editableThemes",function(){var a={"default":{formTpl:'',noformTpl:' ',controlsTpl:' ',inputTpl:"",errorTpl:'
',buttonsTpl:' ',submitTpl:'save ',cancelTpl:'cancel ',resetTpl:'clear '},bs2:{formTpl:'',noformTpl:' ',controlsTpl:'
',inputTpl:"",errorTpl:'
',buttonsTpl:' ',submitTpl:' ',cancelTpl:' ',resetTpl:'clear '},bs3:{formTpl:'',noformTpl:' ',controlsTpl:'
',inputTpl:"",errorTpl:'
',buttonsTpl:' ',submitTpl:' ',cancelTpl:' ',resetTpl:'clear ',buttonsClass:"",inputClass:"",postrender:function(){switch(this.directiveName){case"editableText":case"editableSelect":case"editableTextarea":case"editableEmail":case"editableTel":case"editableNumber":case"editableUrl":case"editableSearch":case"editableDate":case"editableDatetime":case"editableBsdate":case"editableTime":case"editableMonth":case"editableWeek":case"editablePassword":case"editableDatetimeLocal":if(this.inputEl.addClass("form-control"),this.theme.inputClass){if(this.inputEl.attr("multiple")&&("input-sm"===this.theme.inputClass||"input-lg"===this.theme.inputClass))break;this.inputEl.addClass(this.theme.inputClass)}break;case"editableCheckbox":this.editorEl.addClass("checkbox")}this.buttonsEl&&this.theme.buttonsClass&&this.buttonsEl.find("button").addClass(this.theme.buttonsClass)}},semantic:{formTpl:'',noformTpl:' ',controlsTpl:'
',inputTpl:"",errorTpl:'
',buttonsTpl:' ',submitTpl:' ',cancelTpl:' ',resetTpl:'clear '}};return a});
\ No newline at end of file
+angular.module("xeditable",[]).value("editableOptions",{theme:"default",icon_set:"default",buttons:"right",blurElem:"cancel",blurForm:"ignore",activate:"focus",isDisabled:!1,activationEvent:"click",submitButtonTitle:"Submit",submitButtonAriaLabel:"Submit",cancelButtonTitle:"Cancel",cancelButtonAriaLabel:"Cancel",clearButtonTitle:"Clear",clearButtonAriaLabel:"Clear",displayClearButton:!1}),angular.module("xeditable").directive("editableBsdate",["editableDirectiveFactory","$injector","$parse",function(a,b,c){var d=b.get("uibDatepickerConfig"),e=b.get("uibDatepickerPopupConfig"),f=[["eIsOpen","is-open"],["eDateDisabled","date-disabled"],["eDatepickerPopup","uib-datepicker-popup"],["eShowButtonBar","show-button-bar"],["eCurrentText","current-text"],["eClearText","clear-text"],["eCloseText","close-text"],["eCloseOnDateSelection","close-on-date-selection"],["eDatepickerAppendToBody","datepicker-append-to-body"],["eOnOpenFocus","on-open-focus"],["eName","name"],["eDateDisabled","date-disabled"],["eAltInputFormats","alt-input-formats"],["eDatepickerTemplateUrl","datepicker-template-url"]],g=[["eFormatDay","formatDay"],["eFormatMonth","formatMonth"],["eFormatYear","formatYear"],["eFormatDayHeader","formatDayHeader"],["eFormatDayTitle","formatDayTitle"],["eFormatMonthTitle","formatMonthTitle"],["eMaxMode","maxMode"],["eMinMode","minMode"],["eDatepickerMode","datepickerMode"]];return a({directiveName:"editableBsdate",inputTpl:"
",render:function(){this.parent.render.call(this);var a=this.attrs,b=this.scope,h=angular.element(' ');h.attr("uib-datepicker-popup",a.eDatepickerPopupXEditable||e.datepickerPopup),h.attr("year-range",a.eYearRange||20),h.attr("ng-readonly",a.eReadonly||!1);for(var i=f.length-1;i>=0;i--){var j=a[f[i][0]];"undefined"!=typeof j&&h.attr(f[i][1],j)}a.eNgChange&&(h.attr("ng-change",a.eNgChange),this.inputEl.removeAttr("ng-change")),a.eStyle&&(h.attr("style",a.eStyle),this.inputEl.removeAttr("style"));var k={maxDate:b.$eval(a.eMaxDate)||d.maxDate,minDate:b.$eval(a.eMinDate)||d.minDate,showWeeks:a.eShowWeeks?"true"===a.eShowWeeks.toLowerCase():d.showWeeks,startingDay:a.eStartingDay||0,initDate:b.$eval(a.eInitDate)||new Date};if(a.eDatepickerOptions){var l=c(a.eDatepickerOptions)(b);angular.extend(k,l)}for(var m=g.length-1;m>=0;m--){var n=a[g[m][0]];"undefined"!=typeof n&&(k[g[m][1]]=n)}b.dateOptions=k;var o=angular.isDefined(a.eShowCalendarButton)?a.eShowCalendarButton:"true";if("true"===o){var p=angular.element(' '),q=angular.element(' ');p.attr("ng-click",a.eNgClick),q.append(p),this.inputEl.append(q)}else h.attr("ng-click",a.eNgClick);h.attr("datepicker-options","dateOptions"),this.inputEl.prepend(h),this.inputEl.removeAttr("class"),this.inputEl.removeAttr("ng-click"),this.inputEl.removeAttr("is-open"),this.inputEl.removeAttr("init-date"),this.inputEl.removeAttr("datepicker-popup"),this.inputEl.removeAttr("required"),this.inputEl.removeAttr("ng-model"),this.inputEl.removeAttr("date-picker-append-to-body"),this.inputEl.removeAttr("name"),this.inputEl.attr("class","input-group")},autosubmit:function(){var a=this;a.inputEl.bind("change",function(){setTimeout(function(){a.scope.$apply(function(){a.scope.$form.$submit()})},500)}),a.inputEl.bind("keydown",function(b){9===b.keyCode&&"submit"===a.editorEl.attr("blur")&&a.scope.$apply(function(){a.scope.$form.$submit()})})}})}]),angular.module("xeditable").directive("editableBstime",["editableDirectiveFactory",function(a){return a({directiveName:"editableBstime",inputTpl:"
",render:function(){this.parent.render.call(this);var a=angular.element('
');a.attr("ng-model",this.inputEl.attr("ng-model")),this.inputEl.removeAttr("ng-model"),this.attrs.eNgChange&&(a.attr("ng-change",this.inputEl.attr("ng-change")),this.inputEl.removeAttr("ng-change")),this.inputEl.wrap(a)}})}]),angular.module("xeditable").directive("editableCheckbox",["editableDirectiveFactory",function(a){return a({directiveName:"editableCheckbox",inputTpl:' ',render:function(){this.parent.render.call(this),this.inputEl.wrap(" "),this.attrs.eTitle&&this.inputEl.parent().append(""+this.attrs.eTitle+" ")},autosubmit:function(){var a=this;a.inputEl.bind("change",function(){setTimeout(function(){a.scope.$apply(function(){a.scope.$form.$submit()})},500)})}})}]),angular.module("xeditable").directive("editableChecklist",["editableDirectiveFactory","editableNgOptionsParser",function(a,b){return a({directiveName:"editableChecklist",inputTpl:" ",useCopy:!0,render:function(){this.parent.render.call(this);var a=b(this.attrs.eNgOptions),c="",d="",e="";this.attrs.eNgChange&&(c=' ng-change="'+this.attrs.eNgChange+'"'),this.attrs.eChecklistComparator&&(d=' checklist-comparator="'+this.attrs.eChecklistComparator+'"'),this.attrs.eNgDisabled&&(e=' ng-disabled="'+this.attrs.eNgDisabled+'"');var f=' ';this.inputEl.removeAttr("ng-model"),this.inputEl.removeAttr("ng-options"),this.inputEl.removeAttr("ng-change"),this.inputEl.removeAttr("checklist-comparator"),this.inputEl.html(f)}})}]),angular.module("xeditable").directive("editableCombodate",["editableDirectiveFactory","editableCombodate",function(a,b){return a({directiveName:"editableCombodate",inputTpl:' ',render:function(){this.parent.render.call(this);var a={value:new Date(this.scope.$data)},c=this;angular.forEach(["format","template","minYear","maxYear","yearDescending","minuteStep","secondStep","firstItem","errorClass","customClass","roundTime","smartDays"],function(b){var d="e"+b.charAt(0).toUpperCase()+b.slice(1);d in c.attrs&&("minYear"==b||"maxYear"==b||"minuteStep"==b||"secondStep"==b?a[b]=parseInt(c.attrs[d],10):a[b]=c.attrs[d])});var d=b.getInstance(this.inputEl,a);d.$widget.find("select").bind("change",function(a){c.scope.$data=d.getValue()?moment(d.getValue(),d.options.format).toDate().toISOString():null}).change()}})}]),function(){var a=function(a){return a.toLowerCase().replace(/-(.)/g,function(a,b){return b.toUpperCase()})},b="text|password|email|tel|number|url|search|color|date|datetime|datetime-local|time|month|week|file".split("|");angular.forEach(b,function(b){var c=a("editable-"+b);angular.module("xeditable").directive(c,["editableDirectiveFactory",function(a){return a({directiveName:c,inputTpl:' ',render:function(){this.parent.render.call(this);var a=this.attrs;this.scope;if(a.eInputgroupleft||a.eInputgroupright){if(this.inputEl.wrap('
'),a.eInputgroupleft){var b=angular.element(' ');this.inputEl.parent().prepend(b)}if(a.eInputgroupright){var c=angular.element(' ');this.inputEl.parent().append(c)}}if(a.eLabel){var d=angular.element(""+a.eLabel+" ");a.eInputgroupleft||a.eInputgroupright?this.inputEl.parent().parent().prepend(d):this.inputEl.parent().prepend(d)}a.eFormclass&&(this.editorEl.addClass(a.eFormclass),this.inputEl.removeAttr("formclass"))},autosubmit:function(){var a=this;a.inputEl.bind("keydown",function(b){9===b.keyCode&&"submit"===a.editorEl.attr("blur")&&a.scope.$apply(function(){a.scope.$form.$submit()})})}})}])}),angular.module("xeditable").directive("editableRange",["editableDirectiveFactory","$interpolate",function(a,b){return a({directiveName:"editableRange",inputTpl:' ',render:function(){this.parent.render.call(this),this.inputEl.after(""+b.startSymbol()+"$data"+b.endSymbol()+" ")}})}])}(),angular.module("xeditable").directive("editableTagsInput",["editableDirectiveFactory","editableUtils",function(a,b){var c=a({directiveName:"editableTagsInput",inputTpl:" ",useCopy:!0,render:function(){this.parent.render.call(this),this.inputEl.append(b.rename("auto-complete",this.attrs.$autoCompleteElement)),this.inputEl.removeAttr("ng-model"),this.inputEl.attr("ng-model","$parent.$data")}}),d=c.link;return c.link=function(a,b,c,e){var f=b.find("editable-tags-input-auto-complete");return c.$autoCompleteElement=f.clone(),f.remove(),d(a,b,c,e)},c}]),angular.module("xeditable").directive("editableRadiolist",["editableDirectiveFactory","editableNgOptionsParser","$interpolate",function(a,b,c){return a({directiveName:"editableRadiolist",inputTpl:" ",render:function(){this.parent.render.call(this);var a=b(this.attrs.eNgOptions),d="",e="";this.attrs.eNgChange&&(d=' ng-change="'+this.attrs.eNgChange+'"'),this.attrs.eName&&(e=' name="'+this.attrs.eName+'"');var f=' ';this.inputEl.removeAttr("ng-model"),this.inputEl.removeAttr("ng-options"),this.inputEl.removeAttr("ng-change"),this.inputEl.html(f)},autosubmit:function(){var a=this;a.inputEl.bind("change",function(){setTimeout(function(){a.scope.$apply(function(){a.scope.$form.$submit()})},500)})}})}]),angular.module("xeditable").directive("editableSelect",["editableDirectiveFactory",function(a){return a({directiveName:"editableSelect",inputTpl:" ",render:function(){if(this.parent.render.call(this),this.attrs.ePlaceholder){var a=angular.element(''+this.attrs.ePlaceholder+" ");this.inputEl.append(a)}},autosubmit:function(){var a=this;a.attrs.hasOwnProperty("eMultiple")||a.inputEl.bind("change",function(){a.scope.$apply(function(){a.scope.$form.$submit()})})}})}]),angular.module("xeditable").directive("editableTextarea",["editableDirectiveFactory",function(a){return a({directiveName:"editableTextarea",inputTpl:"",render:function(){this.parent.render.call(this),this.attrs.eFormclass&&(this.editorEl.addClass(this.attrs.eFormclass),this.inputEl.removeAttr("formclass"))},addListeners:function(){var a=this;a.parent.addListeners.call(a),a.single&&"no"!==a.buttons&&a.autosubmit()},autosubmit:function(){var a=this;a.inputEl.bind("keydown",function(b){a.attrs.submitOnEnter?13!==b.keyCode||b.shiftKey||a.scope.$apply(function(){a.scope.$form.$submit()}):((b.ctrlKey||b.metaKey)&&13===b.keyCode||9===b.keyCode&&"submit"===a.editorEl.attr("blur"))&&a.scope.$apply(function(){a.scope.$form.$submit()})})}})}]),angular.module("xeditable").directive("editableUidate",["editableDirectiveFactory",function(a){return a({directiveName:"editableUidate",inputTpl:' ',render:function(){this.parent.render.call(this),this.inputEl.attr("ui-date",this.attrs.eUiDate),this.inputEl.attr("placeholder",this.attrs.ePlaceholder)}})}]),angular.module("xeditable").directive("editableUiSelect",["editableDirectiveFactory","editableUtils",function(a,b){var c=a({directiveName:"editableUiSelect",inputTpl:" ",render:function(){this.parent.render.call(this),this.inputEl.append(b.rename("ui-select-match",this.attrs.$matchElement)),this.inputEl.append(b.rename("ui-select-choices",this.attrs.$choicesElement)),this.inputEl.removeAttr("ng-model"),this.inputEl.attr("ng-model","$parent.$parent.$data")},autosubmit:function(){var a=this;a.inputEl.bind("change",function(){setTimeout(function(){a.scope.$apply(function(){a.scope.$form.$submit()})},500)}),a.inputEl.bind("keydown",function(b){9===b.keyCode&&"submit"===a.editorEl.attr("blur")&&a.scope.$apply(function(){a.scope.$form.$submit()})})}}),d=c.link;return c.link=function(a,b,c,e){var f=b.find("editable-ui-select-match"),g=b.find("editable-ui-select-choices");return c.$matchElement=f.clone(),c.$choicesElement=g.clone(),f.remove(),g.remove(),d(a,b,c,e)},c}]),angular.module("xeditable").factory("editableController",["$q","editableUtils",function(a,b){function c(a,c,d,e,f,g,h,i,j,k,l,m){var n,o,p=this;p.scope=a,p.elem=d,p.attrs=c,p.inputEl=null,p.editorEl=null,p.single=!0,p.error="",p.theme=f[c.editableTheme]||f[h.theme]||f["default"],p.parent={};var q=c.editableTheme||h.theme||"default",r=c.editableIconSet||h.icon_set;p.icon_set="default"===r?g["default"][q]:g.external[r],p.inputTpl="",p.directiveName="",p.useCopy=!1,p.single=null,p.buttons="right",p.popover=!1,p.init=function(b){if(p.single=b,p.name=c.eName||c[p.directiveName],!c[p.directiveName])throw"You should provide value for `"+p.directiveName+"` in editable element!";n=e(c[p.directiveName]),p.single?p.buttons=p.attrs.buttons||h.buttons:p.buttons="no",c.eName&&p.scope.$watch("$data",function(a){p.scope.$form.$data[c.eName]=a}),c.onshow&&(p.onshow=function(){return p.catchError(e(c.onshow)(a))}),c.onhide&&(p.onhide=function(){return e(c.onhide)(a)}),c.oncancel&&(p.oncancel=function(){return e(c.oncancel)(a)}),c.onbeforesave&&(p.onbeforesave=function(){return p.catchError(e(c.onbeforesave)(a))}),c.onaftersave&&(p.onaftersave=function(){return p.catchError(e(c.onaftersave)(a))}),c.popover&&(p.popover=p.attrs.popover),a.$parent.$watch(c[p.directiveName],function(a,b){p.setLocalValue(),p.handleEmpty()})},p.render=function(){var a=p.theme;p.inputEl=angular.element(p.inputTpl),p.controlsEl=angular.element(a.controlsTpl),p.controlsEl.append(p.inputEl),"no"!==p.buttons&&(p.buttonsEl=angular.element(a.buttonsTpl),p.submitEl=angular.element(a.submitTpl),p.resetEl=angular.element(a.resetTpl),p.cancelEl=angular.element(a.cancelTpl),p.submitEl.attr("title",h.submitButtonTitle),p.submitEl.attr("aria-label",h.submitButtonAriaLabel),p.cancelEl.attr("title",h.cancelButtonTitle),p.cancelEl.attr("aria-label",h.cancelButtonAriaLabel),p.resetEl.attr("title",h.clearButtonTitle),p.resetEl.attr("aria-label",h.clearButtonAriaLabel),p.icon_set&&(p.submitEl.find("span").addClass(p.icon_set.ok),p.cancelEl.find("span").addClass(p.icon_set.cancel),p.resetEl.find("span").addClass(p.icon_set.clear)),p.buttonsEl.append(p.submitEl).append(p.cancelEl),h.displayClearButton&&p.buttonsEl.append(p.resetEl),p.controlsEl.append(p.buttonsEl),p.inputEl.addClass("editable-has-buttons")),p.errorEl=angular.element(a.errorTpl),p.controlsEl.append(p.errorEl),p.editorEl=angular.element(p.single?a.formTpl:a.noformTpl),p.editorEl.append(p.controlsEl);for(var d in c.$attr)if(!(d.length<=1)){var e=!1,f=d.substring(1,2);if("e"===d.substring(0,1)&&f===f.toUpperCase()&&(e=d.substring(1),"Form"!==e&&"NgSubmit"!==e)){var g=e.substring(0,1),i=e.substring(1,2);e=i===i.toUpperCase()&&g===g.toUpperCase()?g.toLowerCase()+"-"+b.camelToDash(e.substring(1)):g.toLowerCase()+b.camelToDash(e.substring(1));var j="value"!==e&&""===c[d]?e:c[d];p.inputEl.attr(e,j)}}if(p.inputEl.addClass("editable-input"),p.inputEl.attr("ng-model","$parent.$data"),p.editorEl.addClass(b.camelToDash(p.directiveName)),p.single&&(p.editorEl.attr("editable-form","$form"),p.editorEl.attr("blur",p.attrs.blur||h.blurElem)),p.popover){var k=angular.element("
");k.append(p.editorEl),p.editorEl=k,m.put("popover.html",p.editorEl[0].outerHTML)}angular.isFunction(a.postrender)&&a.postrender.call(p)},p.setLocalValue=function(){p.scope.$data=p.useCopy?angular.copy(n(a.$parent)):n(a.$parent)};var s=null;p.show=function(){return p.setLocalValue(),p.render(),d.after(p.editorEl),s=a.$new(),j(p.editorEl)(s),p.addListeners(),d.addClass("editable-hide"),p.onshow()},p.hide=function(){return s.$destroy(),p.controlsEl.remove(),p.editorEl.remove(),d.removeClass("editable-hide"),p.popover&&m.remove("popover.html"),p.onhide()},p.cancel=function(){p.oncancel()},p.addListeners=function(){p.inputEl.bind("keyup",function(a){if(p.single)switch(a.keyCode){case 27:p.scope.$apply(function(){p.scope.$form.$cancel()})}}),p.single&&"no"===p.buttons&&p.autosubmit(),p.editorEl.bind("click",function(a){a.which&&1!==a.which||p.scope.$form.$visible&&(p.scope.$form._clicked=!0)})},p.setWaiting=function(a){a?(o=!p.inputEl.attr("disabled")&&!p.inputEl.attr("ng-disabled")&&!p.inputEl.attr("ng-enabled"),o&&(p.inputEl.attr("disabled","disabled"),p.buttonsEl&&p.buttonsEl.find("button").attr("disabled","disabled"))):o&&(p.inputEl.removeAttr("disabled"),p.buttonsEl&&p.buttonsEl.find("button").removeAttr("disabled"))},p.activate=function(a,b){setTimeout(function(){var c=p.inputEl[0];"focus"===h.activate&&c.focus?(void 0!==a&&""!==a&&c.setSelectionRange&&(b=b||a,c.onfocus=function(){setTimeout(function(){try{this.setSelectionRange(a,b)}catch(c){}}.bind(this))}),"editableRadiolist"==p.directiveName||"editableChecklist"==p.directiveName||"editableBsdate"==p.directiveName||"editableTagsInput"==p.directiveName?c.querySelector(".ng-pristine").focus():c.focus()):"select"===h.activate&&(c.select?c.select():c.focus&&c.focus())},0)},p.setError=function(b){angular.isObject(b)||(a.$error=l.trustAsHtml(b),p.error=b)},p.catchError=function(a,b){return angular.isObject(a)&&b!==!0?k.when(a).then(angular.bind(this,function(a){this.catchError(a,!0)}),angular.bind(this,function(a){this.catchError(a,!0)})):b&&angular.isObject(a)&&a.status&&200!==a.status&&a.data&&angular.isString(a.data)?(this.setError(a.data),a=a.data):angular.isString(a)&&this.setError(a),a},p.save=function(){n.assign(a.$parent,p.useCopy?angular.copy(p.scope.$data):p.scope.$data)},p.handleEmpty=function(){var b=n(a.$parent),c=null===b||void 0===b||""===b||angular.isArray(b)&&0===b.length;d.toggleClass("editable-empty",c)},p.autosubmit=angular.noop,p.onshow=angular.noop,p.onhide=angular.noop,p.oncancel=angular.noop,p.onbeforesave=angular.noop,p.onaftersave=angular.noop}return c.$inject=["$scope","$attrs","$element","$parse","editableThemes","editableIcons","editableOptions","$rootScope","$compile","$q","$sce","$templateCache"],c}]),angular.module("xeditable").factory("editableDirectiveFactory",["$parse","$compile","editableThemes","$rootScope","$document","editableController","editableFormController","editableOptions",function(a,b,c,d,e,f,g,h){return function(b){return{restrict:"A",scope:!0,require:[b.directiveName,"?^form"],controller:f,link:function(c,f,i,j){var k,l=j[0],m=!1;if(j[1])k=j[1],m=void 0===i.eSingle;else if(i.eForm){var n=a(i.eForm)(c);if(n)k=n,m=!0;else if(f&&"function"==typeof f.parents&&f.parents().last().find('form[name="'+i.eForm+'"]').length)k=null,m=!0;else for(var o=0;o=0&&a.splice(c,1),b},camelToDash:function(a){var b=/[A-Z]/g;return a.replace(b,function(a,b){return(b?"-":"")+a.toLowerCase()})},dashToCamel:function(a){var b=/([\:\-\_]+(.))/g,c=/^moz([A-Z])/;return a.replace(b,function(a,b,c,d){return d?c.toUpperCase():c}).replace(c,"Moz$1")},rename:function(a,b){if(b[0]&&b[0].attributes){var c=angular.element("<"+a+"/>");c.html(b.html());for(var d=b[0].attributes,e=0;e').html(this.getTemplate()),this.initCombos(),this.options.smartDays){var a=this;this.$widget.find("select").bind("change",function(b){(angular.element(b.target).hasClass("month")||angular.element(b.target).hasClass("year"))&&a.fillCombo("day")})}this.$widget.find("select").css("width","auto"),this.$element.css("display","none").after(this.$widget),this.setValue(this.$element.val()||this.options.value)},getTemplate:function(){var a=this.options.template,b=this.options.customClass;return angular.forEach(this.map,function(b,c){b=b[0];var d=new RegExp(b+"+"),e=b.length>1?b.substring(1,2):b;a=a.replace(d,"{"+e+"}")}),a=a.replace(/ /g," "),angular.forEach(this.map,function(c,d){c=c[0];var e=c.length>1?c.substring(1,2):c;a=a.replace("{"+e+"}",' ')}),a},initCombos:function(){for(var a in this.map){var b=this.$widget[0].querySelectorAll("."+a);this["$"+a]=b.length?angular.element(b):null,this.fillCombo(a)}},fillCombo:function(a){var b=this["$"+a];if(b){var c="fill"+a.charAt(0).toUpperCase()+a.slice(1),d=this[c](),e=b.val();b.html("");for(var f=0;f'+d[f][1]+"");b.val(e)}},fillCommon:function(a){var b,c=[];if("name"===this.options.firstItem){b=moment.relativeTime||moment.langData()._relativeTime;var d="function"==typeof b[a]?b[a](1,!0,a,!1):b[a];d=d.split(" ").reverse()[0],c.push(["",d])}else"empty"===this.options.firstItem&&c.push(["",""]);return c},fillDay:function(){var a,b,c=this.fillCommon("d"),d=-1!==this.options.template.indexOf("DD"),e=31;if(this.options.smartDays&&this.$month&&this.$year){var f=parseInt(this.$month.val(),10),g=parseInt(this.$year.val(),10);isNaN(f)||isNaN(g)||(e=moment([g,f]).daysInMonth())}for(b=1;e>=b;b++)a=d?this.leadZero(b):b,c.push([b,a]);return c},fillMonth:function(){var a,b,c=this.fillCommon("M"),d=-1!==this.options.template.indexOf("MMMM"),e=-1!==this.options.template.indexOf("MMM"),f=-1!==this.options.template.indexOf("MM");for(b=0;11>=b;b++)a=d?moment().date(1).month(b).format("MMMM"):e?moment().date(1).month(b).format("MMM"):f?this.leadZero(b+1):b+1,c.push([b,a]);return c},fillYear:function(){var a,b,c=[],d=-1!==this.options.template.indexOf("YYYY");for(b=this.options.maxYear;b>=this.options.minYear;b--)a=d?b:(b+"").substring(2),c[this.options.yearDescending?"push":"unshift"]([b,a]);return c=this.fillCommon("y").concat(c)},fillHour:function(){var a,b,c=this.fillCommon("h"),d=-1!==this.options.template.indexOf("h"),e=(-1!==this.options.template.indexOf("H"),-1!==this.options.template.toLowerCase().indexOf("hh")),f=d?1:0,g=d?12:23;for(b=f;g>=b;b++)a=e?this.leadZero(b):b,c.push([b,a]);return c},fillMinute:function(){var a,b,c=this.fillCommon("m"),d=-1!==this.options.template.indexOf("mm");for(b=0;59>=b;b+=this.options.minuteStep)a=d?this.leadZero(b):b,c.push([b,a]);return c},fillSecond:function(){var a,b,c=this.fillCommon("s"),d=-1!==this.options.template.indexOf("ss");for(b=0;59>=b;b+=this.options.secondStep)a=d?this.leadZero(b):b,c.push([b,a]);return c},fillAmpm:function(){var a=-1!==this.options.template.indexOf("a"),b=(-1!==this.options.template.indexOf("A"),[["am",a?"am":"AM"],["pm",a?"pm":"PM"]]);return b},getValue:function(a){var b,c={},d=this,e=!1;return angular.forEach(this.map,function(a,b){if("ampm"!==b){var f="day"===b?1:0;return c[b]=d["$"+b]?parseInt(d["$"+b].val(),10):f,isNaN(c[b])?(e=!0,!1):void 0}}),e?"":(this.$ampm&&(12===c.hour?c.hour="am"===this.$ampm.val()?0:12:c.hour="am"===this.$ampm.val()?c.hour:c.hour+12),b=moment([c.year,c.month,c.day,c.hour,c.minute,c.second]),this.highlight(b),a=void 0===a?this.options.format:a,null===a?b.isValid()?b:null:b.isValid()?b.format(a):"")},setValue:function(a){function b(a,b){var c={};return angular.forEach(a.children("option"),function(a,d){var e=angular.element(a).attr("value");if(""!==e){var f=Math.abs(e-b);("undefined"==typeof c.distance||f=12?(e.ampm="pm",e.hour>12&&(e.hour-=12)):(e.ampm="am",0===e.hour&&(e.hour=12))),angular.forEach(e,function(a,c){d["$"+c]&&("minute"===c&&d.options.minuteStep>1&&d.options.roundTime&&(a=b(d["$"+c],a)),
+"second"===c&&d.options.secondStep>1&&d.options.roundTime&&(a=b(d["$"+c],a)),d["$"+c].val(a))}),this.options.smartDays&&this.fillCombo("day"),this.$element.val(c.format(this.options.format)).triggerHandler("change"))}},highlight:function(a){a.isValid()?this.options.errorClass?this.$widget.removeClass(this.options.errorClass):this.$widget.find("select").css("border-color",this.borderColor):this.options.errorClass?this.$widget.addClass(this.options.errorClass):(this.borderColor||(this.borderColor=this.$widget.find("select").css("border-color")),this.$widget.find("select").css("border-color","red"))},leadZero:function(a){return 9>=a?"0"+a:a},destroy:function(){this.$widget.remove(),this.$element.removeData("combodate").show()}},{getInstance:function(b,c){return new a(b,c)}}}]),angular.module("xeditable").factory("editableIcons",function(){var a={"default":{bs2:{ok:"icon-ok icon-white",cancel:"icon-remove",clear:"icon-trash",calendar:"icon-calendar"},bs3:{ok:"glyphicon glyphicon-ok",cancel:"glyphicon glyphicon-remove",clear:"glyphicon glyphicon-trash",calendar:"glyphicon glyphicon-calendar"},bs4:{ok:"fa fa-check",cancel:"fa fa-times",clear:"fa fa-trash",calendar:"fa fa-calendar"}},external:{"font-awesome":{ok:"fa fa-check",cancel:"fa fa-times",clear:"fa fa-trash",calendar:"fa fa-calendar"}}};return a}),angular.module("xeditable").factory("editableThemes",function(){var a={"default":{formTpl:'',noformTpl:' ',controlsTpl:' ',inputTpl:"",errorTpl:'
',buttonsTpl:' ',submitTpl:'save ',cancelTpl:'cancel ',resetTpl:'clear '},bs2:{formTpl:'',noformTpl:' ',controlsTpl:'
',inputTpl:"",errorTpl:'
',buttonsTpl:' ',submitTpl:' ',cancelTpl:' ',resetTpl:'clear ',calendarButtonClass:"btn",buttonGroupAppendClass:"input-append"},bs3:{formTpl:'',noformTpl:' ',controlsTpl:'
',inputTpl:"",errorTpl:'
',buttonsTpl:' ',submitTpl:' ',cancelTpl:' ',resetTpl:'clear ',buttonsClass:"",inputClass:"",calendarButtonClass:"btn btn-default",buttonGroupAppendClass:"input-group-btn",postrender:function(){switch(this.directiveName){case"editableText":case"editableSelect":case"editableTextarea":case"editableEmail":case"editableTel":case"editableNumber":case"editableUrl":case"editableSearch":case"editableDate":case"editableDatetime":case"editableBsdate":case"editableTime":case"editableMonth":case"editableWeek":case"editablePassword":case"editableDatetimeLocal":if(this.inputEl.addClass("form-control"),this.theme.inputClass){if(this.inputEl.attr("multiple")&&("input-sm"===this.theme.inputClass||"input-lg"===this.theme.inputClass))break;this.inputEl.addClass(this.theme.inputClass)}break;case"editableCheckbox":this.editorEl.addClass("checkbox")}this.buttonsEl&&this.theme.buttonsClass&&this.buttonsEl.find("button").addClass(this.theme.buttonsClass)}},bs4:{formTpl:'',noformTpl:' ',controlsTpl:'
',inputTpl:"",errorTpl:'
',buttonsTpl:' ',submitTpl:' ',cancelTpl:' ',resetTpl:'clear ',buttonsClass:"",inputClass:"",calendarButtonClass:"btn btn-secondary",buttonGroupAppendClass:"input-group-append",postrender:function(){switch(this.directiveName){case"editableText":case"editableSelect":case"editableTextarea":case"editableEmail":case"editableTel":case"editableNumber":case"editableUrl":case"editableSearch":case"editableDate":case"editableDatetime":case"editableBsdate":case"editableTime":case"editableMonth":case"editableWeek":case"editablePassword":case"editableDatetimeLocal":if(this.inputEl.addClass("form-control"),this.inputEl.attr("ng-class","{'is-invalid': $error}"),this.theme.inputClass){if(this.inputEl.attr("multiple")&&("form-control-sm"===this.theme.inputClass||"form-control-lg"===this.theme.inputClass))break;this.inputEl.addClass(this.theme.inputClass)}break;case"editableCheckbox":this.editorEl.addClass("form-check")}this.buttonsEl&&this.theme.buttonsClass&&this.buttonsEl.find("button").addClass(this.theme.buttonsClass)}},semantic:{formTpl:'',noformTpl:' ',controlsTpl:'
',inputTpl:"",errorTpl:'
',buttonsTpl:' ',submitTpl:' ',cancelTpl:' ',resetTpl:'clear '}};return a});
\ No newline at end of file
diff --git a/index.html b/index.html
index e14a5273..8abf1159 100644
--- a/index.html
+++ b/index.html
@@ -57,7 +57,7 @@
Home
GitHub
-
+
@@ -184,16 +184,24 @@
Overview
Angular-xeditable is a bundle of AngularJS directives that allows you to create
-editable elements . Such technique is also known as click-to-edit or edit-in-place . It is based on ideas of x-editable but was written from scratch
+editable elements .
+Such technique is also known as click-to-edit or edit-in-place .
+It is based on ideas of x-editable but was written from scratch
to use power of angular and support complex forms / editable grids.
-
Dependencies Basically it does not depend on any libraries except AngularJS itself. For themes you may need to include Twitter Bootstrap CSS. For some extra controls (e.g. datepicker) you may need to include angular-ui bootstrap . For ui-select you may need to include angular-ui ui-select . For ngTagsInput you may need to include mbenford ngTagsInput . If installing via NPM, jQuery and moment js will also be installed.
+
Dependencies Basically it does not depend on any libraries except AngularJS itself.
+For themes you may need to include Twitter Bootstrap CSS.
+For some extra controls (e.g. datepicker) you may need to include angular-ui bootstrap for Bootstrap 2/3.
+Include ui-bootstrap4 for Bootstrap 4.
+For ui-select you may need to include angular-ui ui-select .
+For ngTagsInput you may need to include mbenford ngTagsInput .
+If installing via NPM, jQuery and moment js will also be installed.
Controls & Features
-text
+text
textarea
select
checkbox
@@ -201,7 +209,7 @@ Controls & Features
date
time
datetime
-html5 inputs
+html5 inputs
typeahead
ui-select
ngTagsInput
@@ -223,14 +231,17 @@ Controls & Features
Get started
- Include Angular.js in your project
+ Include Angular.js in your project
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.min.js"></script> Optionally include Bootstrap CSS for theming
+Bootstrap 3
- <link href="https://netdna.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet">
+ <link href="https://netdna.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"> Boostrap 4
+
+ <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet">
- Install angular-xeditable via bower or download latest zip
- bower install angular-xeditable
+ Install angular-xeditable via bower or download latest zip
+ bower install angular-xeditable
Include angular-xeditable into your project
<link href="bower_components/angular-xeditable/dist/css/xeditable.css" rel="stylesheet">
@@ -242,11 +253,11 @@ Get started
Set theme in app.run:
app.run(['editableOptions', function(editableOptions) {
- editableOptions.theme = 'bs3'; // bootstrap3 theme. Can be also 'bs2', 'default'
+ editableOptions.theme = 'bs3'; // bootstrap3 theme. Can be also 'bs4', 'bs2', 'default'
}]);
- Markup element that should be editable
+ Markup element that should be editable
<div ng-controller="Ctrl">
<a href="#" editable-text="user.name">{{ user.name || "empty" }}</a>
</div>
@@ -255,11 +266,11 @@ Get started
app.controller('Ctrl', function($scope) {
$scope.user = {
name: 'awesome user'
- };
+ };
});
Enjoy!
-
+
@@ -575,7 +586,7 @@ Checklist
demo
@@ -584,6 +595,7 @@ demo
Also you should define e-ng-options
attribute to set value and display items.
Optionally define e-checklist-comparator
to use a function to determine which checkboxes are actually checked.
Please note , you should include checklist-model directive into your app: var app = angular.module("app", [..., "checklist-model"]);
.
+To disable a checkbox include the attribute e-ng-disabled
and pass a condition.
By default, checkboxes aligned horizontally . To align vertically just add following CSS :
.editable-checklist label {
display: block;
@@ -593,17 +605,17 @@ demo
html
<div ng-controller="ChecklistCtrl">
- <a href="#" editable-checklist="user.status" e-ng-options="s.value as s.text for s in statuses">
+ <a href="#" editable-checklist="user.status" e-ng-options="s.value as s.text for s in statuses" e-ng-disabled="disableCheckbox(s.value)">
{{ showStatus() }}
</a>
</div>
@@ -622,17 +641,17 @@ controller.js
app.controller('ChecklistCtrl', function($scope, $filter) {
$scope.user = {
status: [2, 3]
- };
+ };
$scope.statuses = [
{value: 1, text: 'status1'},
{value: 2, text: 'status2'},
{value: 3, text: 'status3'}
- ];
+ ];
$scope.showStatus = function() {
var selected = [];
- angular.forEach($scope.statuses, function(s) {
+ angular.forEach($scope.statuses, function(s) {
if ($scope.user.status.indexOf(s.value) >= 0) {
selected.push(s.text);
}
@@ -640,6 +659,13 @@ controller.js
return selected.length ? selected.join(', ') : 'Not set';
};
+ $scope.disableCheckbox = function (v) {
+ if ($scope.user.status.indexOf(v) === -1) {
+ return true
+ }
+ return false;
+ }
+
});
Overview
Angular-xeditable is a bundle of AngularJS directives that allows you to create -editable elements.
-Such technique is also known as click-to-edit or edit-in-place.
It is based on ideas of x-editable but was written from scratch +editable elements. +Such technique is also known as click-to-edit or edit-in-place. +It is based on ideas of x-editable but was written from scratch to use power of angular and support complex forms / editable grids.
Dependencies
Basically it does not depend on any libraries except AngularJS itself.
+For themes you may need to include Twitter Bootstrap CSS.
For some extra controls (e.g. datepicker) you may need to include angular-ui bootstrap.
For ui-select you may need to include angular-ui ui-select.
For ngTagsInput you may need to include mbenford ngTagsInput.
If installing via NPM, jQuery and moment js will also be installed.
Dependencies
Basically it does not depend on any libraries except AngularJS itself. +For themes you may need to include Twitter Bootstrap CSS. +For some extra controls (e.g. datepicker) you may need to include angular-ui bootstrap for Bootstrap 2/3. +Include ui-bootstrap4 for Bootstrap 4. +For ui-select you may need to include angular-ui ui-select. +For ngTagsInput you may need to include mbenford ngTagsInput. +If installing via NPM, jQuery and moment js will also be installed.
Controls & Features
-- text
+- text
- textarea
- select
- checkbox
@@ -201,7 +209,7 @@ - date
- time
- datetime
-- html5 inputs
+- html5 inputs
- typeahead
- ui-select
- ngTagsInput
@@ -223,14 +231,17 @@
@@ -575,7 +586,7 @@
-
+
{{ showStatus() }}
@@ -584,6 +595,7 @@
@@ -711,8 +737,10 @@
Controls & Features
Controls & Features
Get started
--
- - Install angular-xeditable via bower or download latest zip
-
+
- Install angular-xeditable viabower ordownload latest zip
+
- Include angular-xeditable into your project
- Set theme in app.run:
-
- Markup element that should be editable
+
- Markup element that should be editable
@@ -255,11 +266,11 @@ - Enjoy!
-
View starter templateDownload starter zip
+ View starter templateDownload starter zip
Include Angular.js in your project
+Include Angular.js in your project
Optionally include Bootstrap CSS for theming
+Bootstrap 3
- +Boostrap 4
+ +Get started
Checklist
demo
demo
Also you should definee-ng-options
attribute to set value and display items. Optionally definee-checklist-comparator
to use a function to determine which checkboxes are actually checked.Please note, you should include checklist-model directive into your app:
+var app = angular.module("app", [..., "checklist-model"]);
.To disable a checkbox include the attribute
e-ng-disabled
and pass a condition.By default, checkboxes aligned horizontally. To align vertically just add following CSS:
demo
-Date control is implemented via Angular-ui bootstrap datepicker.
+You should include additional
ui-bootstrap-tpls.min.js
:Date control is implemented via Angular-ui bootstrap datepicker.
+You should include additional
ui-bootstrap-tpls.min.js
for Bootstrap 3:For Bootstrap 4, include:
+Add
ui.bootstrap
as module dependency:And set
@@ -834,31 +862,14 @@editable-bsdate
attribute in editable element.To make the input field read-only and force the date to be selected from the popup, add the
e-readonly="true"
attribute.Add
e-ng-change
attribute to call a function when the value of the datepicker is changed.To hide the calendar button and display the calendar popup on click of the input field, set the
e-show-calendar-button
attribute to false.Other parameters can be defined via
e-*
syntax, e.g.e-datepicker-popup="dd-MMMM-yyyy"
.demo
-Time control is implemented via Angular-ui bootstrap timepicker.
+Currently it has only Bootstrap 2 version, Bootstrap 3 version is in progress.
You should include additional
ui-bootstrap-tpls.min.js
:Time control is implemented via Angular-ui bootstrap timepicker.
+You should include additional
ui-bootstrap-tpls.min.js
for Bootstrap 3:For Bootstrap 4, include:
+Add
ui.bootstrap
as module dependency:And set
-editable-bstime
attribute in editable element. Other parameters can be defined viae-*
syntax, e.g.e-minute-step="10"
.To get it working with Bootstrap 3 you should add following css:
-