1 line
12 KiB
JavaScript
1 line
12 KiB
JavaScript
![]() |
!function(e){var c=function(g,f){this.$ns="bootstrap-markdown";this.$element=e(g);this.$editable={el:null,type:null,attrKeys:[],attrValues:[],content:null};this.$options=e.extend(true,{},e.fn.markdown.defaults,f);this.$oldContent=null;this.$isPreview=false;this.$editor=null;this.$textarea=null;this.$handler=[];this.$callback=[];this.$nextTab=[];this.showEditor()};c.prototype={constructor:c,__alterButtons:function(h,g){var i=this.$handler,f=(h=="all"),j=this;e.each(i,function(m,l){var n=true;if(f){n=false}else{n=l.indexOf(h)<0}if(n==false){g(j.$editor.find('button[data-handler="'+l+'"]'))}})},__buildButtons:function(j,g){var l,t=this.$ns,w=this.$handler,u=this.$callback;for(l=0;l<j.length;l++){var s,q=j[l];for(s=0;s<q.length;s++){var p,o=q[s].data,r=e("<div/>",{"class":"btn-group"});for(p=0;p<o.length;p++){var m=o[p],k="",v=t+"-"+m.name,n=m.btnText?m.btnText:"",f=m.btnClass?m.btnClass:"btn",h=m.tabIndex?m.tabIndex:"-1";if(m.toggle==true){k=' data-toggle="button"'}r.append('<button class="'+f+' btn-small" title="'+m.title+'" tabindex="'+h+'" data-provider="'+t+'" data-handler="'+v+'"'+k+'><i class="'+m.icon+'"></i> '+n+"</button>");w.push(v);u.push(m.callback)}g.append(r)}}return g},__setListener:function(){var g=typeof this.$textarea.attr("rows")!="undefined",f=this.$textarea.val().split("\n").length>5?this.$textarea.val().split("\n").length:"5",h=g?this.$textarea.attr("rows"):f;this.$textarea.attr("rows",h);this.$textarea.css("resize","none");this.$textarea.on("focus",e.proxy(this.focus,this)).on("keypress",e.proxy(this.keypress,this)).on("keyup",e.proxy(this.keyup,this));if(this.eventSupported("keydown")){this.$textarea.on("keydown",e.proxy(this.keydown,this))}this.$textarea.data("markdown",this)},__handle:function(j){var i=e(j.currentTarget),h=this.$handler,l=this.$callback,g=i.attr("data-handler"),k=h.indexOf(g),f=l[k];e(j.currentTarget).focus();f(this);if(g.indexOf("cmdSave")<0){this.$textarea.focus()}j.preventDefault()},showEditor:function(){var r=this,q,o=this.$ns,f=this.$element,p=f.css("height"),h=f.css("width"),j=this.$editable,t=this.$handler,s=this.$callback,u=this.$options,l=e("<div/>",{"class":"md-editor",click:function(){r.focus()}});if(this.$editor==null){var g=e("<div/>",{"class":"md-header"});if(u.buttons.length>0){g=this.__buildButtons(u.buttons,g)}if(u.additionalButtons.length>0){g=this.__buildButtons(u.additionalButtons,g)}l.append(g);if(f.is("textarea")){f.before(l);q=f;q.addClass("md-input");l.append(q)}else{var m=(typeof toMarkdown=="function")?toMarkdown(f.html()):f.html(),n=e.trim(m);q=e("<textarea/>",{"class":"md-input",val:n});l.append(q);j.el=f;j.type=f.prop("tagName").toLowerCase();j.content=f.html();e(f[0].attributes).each(function(){j.attrKeys.push(this.nodeName);j.attrValues.push(this.nodeValue)});f.replaceWith(l)}if(u.savable){var k=e("<div/>",{"class":"md-footer"}),i="cmdSave";t.push(i);s.push(u.onSave);k.append('<button class="btn btn-success" data-provider="'+o+'" data-handler="'+i+'"><i class="icon icon-white icon-ok"></i> Save</button>');l.append(k)}e.each(["height","width"],function(w,v){if(u[v]!="inherit"){if(jQuery.isNumeric(u[v])){l.css(v,u[v]+"px")}else{l.addClass(u[v])}}});this.$editor=l;this.$textarea=q;this.$editable=j;this.$oldContent=this.getContent();this.__setListener();this.$editor.attr("id",(new Date).getTime());this.$editor.on("click",'[data-provider="bootstrap-markdown"]',e.proxy(this.__handle,this))}else{this.$editor.show()}if(u.autofocus){this.$textarea.focus();this.$editor.addClass("active")}u.onShow(this);return this},showPreview:function(){var h=this.$options,i=h.onPreview(this),f=this.$textarea,k=f.next(),g=e("<div/>",{"class":"md-preview","data-provider":"markdown-preview"}),j;this.$isPreview=true;this.disableButtons("all").enableButtons("cmdPreview");if(typeof i=="string"){j=i}else{j=(typeof markdown=="object")?markdown.toHTML(f.val()):f.val()}g.html(j);if(k&&k.attr("class")=="md-footer"){g.insertBefore(k)}else{f.parent().append(g)}f.hide();g.data("markdown",this);return this},hidePreview:function(){this.$isPreview=false;var f=this.$editor.find('div[data-prov
|