blob: 142c91091726e2180a83692f1673f3a895b62363 [file] [log] [blame]
/**
* angular-ui-codemirror - This directive allows you to add CodeMirror to your textarea elements.
* @version v0.1.0 - 2013-12-28
* @link http://angular-ui.github.com
* @license MIT
*/
"use strict";angular.module("ui.codemirror",[]).constant("uiCodemirrorConfig",{}).directive("uiCodemirror",["uiCodemirrorConfig",function(a){return{restrict:"EA",require:"?ngModel",priority:1,compile:function(b){if(angular.isUndefined(window.CodeMirror))throw new Error("ui-codemirror need CodeMirror to work... (o rly?)");var c=b.text(),d=new window.CodeMirror(function(a){angular.forEach(b.prop("attributes"),function(b){"ui-codemirror"===b.name?a.setAttribute("ui-codemirror-opts",b.textContent):a.setAttribute(b.name,b.textContent)}),b.parent().length<=0&&b.wrap("<div>"),b.replaceWith(a)},{value:c});return function(b,c,e,f){function g(a){for(var b in a)a.hasOwnProperty(b)&&d.setOption(b,a[b])}var h,i;h=a.codemirror||{},i=angular.extend({},h,b.$eval(e.uiCodemirror),b.$eval(e.uiCodemirrorOpts)),g(i),angular.isDefined(b.$eval(e.uiCodemirror))&&b.$watch(e.uiCodemirror,g,!0),d.on("change",function(a){var c=a.getValue();f&&c!==f.$viewValue&&f.$setViewValue(c),b.$$phase||b.$apply()}),f&&(f.$formatters.push(function(a){if(angular.isUndefined(a)||null===a)return"";if(angular.isObject(a)||angular.isArray(a))throw new Error("ui-codemirror cannot use an object or an array as a model");return a}),f.$render=function(){var a=f.$viewValue||"";d.setValue(a)}),e.uiRefresh&&b.$watch(e.uiRefresh,function(a,b){a!==b&&d.refresh()}),angular.isFunction(i.onLoad)&&i.onLoad(d)}}}}]);