(function(window,wp,shortcode,$){'use strict';var views={},instances={};wp.mce=wp.mce||{};wp.mce.views={register:function(type,extend){views[type]=wp.mce.View.extend(_.extend(extend,{type:type}));},unregister:function(type){delete views[type];},get:function(type){return views[type];},unbind:function(){_.each(instances,function(instance){instance.unbind();});},setMarkers:function(content,editor){var pieces=[{content:content}],self=this,instance,current;_.each(views,function(view,type){current=pieces.slice();pieces=[];_.each(current,function(piece){var remaining=piece.content,result,text;if(piece.processed){pieces.push(piece);return;}
while(remaining&&(result=view.prototype.match(remaining))){if(result.index){pieces.push({content:remaining.substring(0,result.index)});}
result.options.editor=editor;instance=self.createInstance(type,result.content,result.options);text=instance.loader?'.':instance.text;pieces.push({content:instance.ignore?text:'<p data-wpview-marker="'+instance.encodedText+'">'+text+'</p>',processed:true});remaining=remaining.slice(result.index+result.content.length);}
if(remaining){pieces.push({content:remaining});}});});content=_.pluck(pieces,'content').join('');return content.replace(/<p>\s*<p data-wpview-marker=/g,'<p data-wpview-marker=').replace(/<\/p>\s*<\/p>/g,'</p>');},createInstance:function(type,text,options,force){var View=this.get(type),encodedText,instance;if(text.indexOf('[')!==-1&&text.indexOf(']')!==-1){text=text.replace(/\[[^\]]+\]/g,function(match){return match.replace(/[\r\n]/g,'');});}
if(!force){instance=this.getInstance(text);if(instance){return instance;}}
encodedText=encodeURIComponent(text);options=_.extend(options||{},{text:text,encodedText:encodedText});return instances[encodedText]=new View(options);},getInstance:function(object){if(typeof object==='string'){return instances[encodeURIComponent(object)];}
return instances[$(object).attr('data-wpview-text')];},getText:function(node){return decodeURIComponent($(node).attr('data-wpview-text')||'');},render:function(force){_.each(instances,function(instance){instance.render(null,force);});},update:function(text,editor,node,force){var instance=this.getInstance(node);if(instance){instance.update(text,editor,node,force);}},edit:function(editor,node){var instance=this.getInstance(node);if(instance&&instance.edit){instance.edit(instance.text,function(text,force){instance.update(text,editor,node,force);});}},remove:function(editor,node){var instance=this.getInstance(node);if(instance){instance.remove(editor,node);}}};wp.mce.View=function(options){_.extend(this,options);this.initialize();};wp.mce.View.extend=Backbone.View.extend;_.extend(wp.mce.View.prototype,{content:null,loader:true,initialize:function(){},getContent:function(){return this.content;},render:function(content,force){if(content!=null){this.content=content;}
content=this.getContent();if(!this.loader&&!content){return;}
force&&this.unbind();this.replaceMarkers();if(content){this.setContent(content,function(editor,node){$(node).data('rendered',true);this.bindNode.call(this,editor,node);},force?null:false);}else{this.setLoader();}},bindNode:function(){},unbindNode:function(){},unbind:function(){this.getNodes(function(editor,node){this.unbindNode.call(this,editor,node);},true);},getEditors:function(callback){_.each(tinymce.editors,function(editor){if(editor.plugins.wpview){callback.call(this,editor);}},this);},getNodes:function(callback,rendered){this.getEditors(function(editor){var self=this;$(editor.getBody()).find('[data-wpview-text="'+self.encodedText+'"]').filter(function(){var data;if(rendered==null){return true;}
data=$(this).data('rendered')===true;return rendered?data:!data;}).each(function(){callback.call(self,editor,this,this);});});},getMarkers:function(callback){this.getEditors(function(editor){var self=this;$(editor.getBody()).find('[data-wpview-marker="'+this.encodedText+'"]').each(function(){callback.call(self,editor,this);});});},replaceMarkers:function(){this.getMarkers(function(editor,node){var selected=node===editor.selection.getNode();var $viewNode;if(!this.loader&&$(node).text()!==tinymce.DOM.decode(this.text)){editor.dom.setAttrib(node,'data-wpview-marker',null);return;}
$viewNode=editor.$('<div class="wpview wpview-wrap" data-wpview-text="'+this.encodedText+'" data-wpview-type="'+this.type+'" contenteditable="false"></div>');editor.undoManager.ignore(function(){editor.$(node).replaceWith($viewNode);});if(selected){setTimeout(function(){editor.undoManager.ignore(function(){editor.selection.select($viewNode[0]);editor.selection.collapse();});});}});},removeMarkers:function(){this.getMarkers(function(editor,node){editor.dom.setAttrib(node,'data-wpview-marker',null);});},setContent:function(content,callback,rendered){if(_.isObject(content)&&(content.sandbox||content.head||content.body.indexOf('<script')!==-1)){this.setIframes(content.head||'',content.body,callback,rendered);}else if(_.isString(content)&&content.indexOf('<script')!==-1){this.setIframes('',content,callback,rendered);}else{this.getNodes(function(editor,node){content=content.body||content;if(content.indexOf('<iframe')!==-1){content+='<span class="mce-shim"></span>';}
editor.undoManager.transact(function(){node.innerHTML='';node.appendChild(_.isString(content)?editor.dom.createFragment(content):content);editor.dom.add(node,'span',{'class':'wpview-end'});});callback&&callback.call(this,editor,node);},rendered);}},setIframes:function(head,body,callback,rendered){var self=this;if(body.indexOf('[')!==-1&&body.indexOf(']')!==-1){var shortcodesRegExp=new RegExp('\\[\\/?(?:'+window.mceViewL10n.shortcodes.join('|')+')[^\\]]*?\\]','g');body=body.replace(shortcodesRegExp,function(match){return match.replace(/</g,'&lt;').replace(/>/g,'&gt;');});}
this.getNodes(function(editor,node){var dom=editor.dom,styles='',bodyClasses=editor.getBody().className||'',editorHead=editor.getDoc().getElementsByTagName('head')[0],iframe,iframeWin,iframeDoc,MutationObserver,observer,i,block;tinymce.each(dom.$('link[rel="stylesheet"]',editorHead),function(link){if(link.href&&link.href.indexOf('skins/lightgray/content.min.css')===-1&&link.href.indexOf('skins/wordpress/wp-content.css')===-1){styles+=dom.getOuterHTML(link);}});if(self.iframeHeight){dom.add(node,'span',{'data-mce-bogus':1,style:{display:'block',width:'100%',height:self.iframeHeight}},'\u200B');}
editor.undoManager.transact(function(){node.innerHTML='';iframe=dom.add(node,'iframe',{src:tinymce.Env.ie?'javascript:""':'',frameBorder:'0',allowTransparency:'true',scrolling:'no','class':'wpview-sandbox',style:{width:'100%',display:'block'},height:self.iframeHeight});dom.add(node,'span',{'class':'mce-shim'});dom.add(node,'span',{'class':'wpview-end'});});if(!iframe.contentWindow){return;}
iframeWin=iframe.contentWindow;iframeDoc=iframeWin.document;iframeDoc.open();iframeDoc.write('<!DOCTYPE html>'+'<html>'+'<head>'+'<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />'+
head+
styles+'<style>'+'html {'+'background: transparent;'+'padding: 0;'+'margin: 0;'+'}'+'body#wpview-iframe-sandbox {'+'background: transparent;'+'padding: 1px 0 !important;'+'margin: -1px 0 0 !important;'+'}'+'body#wpview-iframe-sandbox:before,'+'body#wpview-iframe-sandbox:after {'+'display: none;'+'content: "";'+'}'+'iframe {'+'max-width: 100%;'+'}'+'</style>'+'</head>'+'<body id="wpview-iframe-sandbox" class="'+bodyClasses+'">'+
body+'</body>'+'</html>');iframeDoc.close();function resize(){var $iframe;if(block){return;}
if(iframe.contentWindow){$iframe=$(iframe);self.iframeHeight=$(iframeDoc.body).height();if($iframe.height()!==self.iframeHeight){$iframe.height(self.iframeHeight);editor.nodeChanged();}}}
if(self.iframeHeight){block=true;setTimeout(function(){block=false;resize();},3000);}
function addObserver(){observer=new MutationObserver(_.debounce(resize,100));observer.observe(iframeDoc.body,{attributes:true,childList:true,subtree:true});}
$(iframeWin).on('load',resize);MutationObserver=iframeWin.MutationObserver||iframeWin.WebKitMutationObserver||iframeWin.MozMutationObserver;if(MutationObserver){if(!iframeDoc.body){iframeDoc.addEventListener('DOMContentLoaded',addObserver,false);}else{addObserver();}}else{for(i=1;i<6;i++){setTimeout(resize,i*700);}}
callback&&callback.call(self,editor,node);},rendered);},setLoader:function(dashicon){this.setContent('<div class="loading-placeholder">'+'<div class="dashicons dashicons-'+(dashicon||'admin-media')+'"></div>'+'<div class="wpview-loading"><ins></ins></div>'+'</div>');},setError:function(message,dashicon){this.setContent('<div class="wpview-error">'+'<div class="dashicons dashicons-'+(dashicon||'no')+'"></div>'+'<p>'+message+'</p>'+'</div>');},match:function(content){var match=shortcode.next(this.type,content);if(match){return{index:match.index,content:match.content,options:{shortcode:match.shortcode}};}},update:function(text,editor,node,force){_.find(views,function(view,type){var match=view.prototype.match(text);if(match){$(node).data('rendered',false);editor.dom.setAttrib(node,'data-wpview-text',encodeURIComponent(text));wp.mce.views.createInstance(type,text,match.options,force).render();editor.selection.select(node);editor.nodeChanged();editor.focus();return true;}});},remove:function(editor,node){this.unbindNode.call(this,editor,node);editor.dom.remove(node);editor.focus();}});})(window,window.wp,window.wp.shortcode,window.jQuery);(function(window,views,media,$){var base,gallery,av,embed,schema,parser,serializer;function verifyHTML(string){var settings={};if(!window.tinymce){return string.replace(/<[^>]+>/g,'');}
if(!string||(string.indexOf('<')===-1&&string.indexOf('>')===-1)){return string;}
schema=schema||new window.tinymce.html.Schema(settings);parser=parser||new window.tinymce.html.DomParser(settings,schema);serializer=serializer||new window.tinymce.html.Serializer(settings,schema);return serializer.serialize(parser.parse(string,{forced_root_block:false}));}
base={state:[],edit:function(text,update){var type=this.type,frame=media[type].edit(text);this.pausePlayers&&this.pausePlayers();_.each(this.state,function(state){frame.state(state).on('update',function(selection){update(media[type].shortcode(selection).string(),type==='gallery');});});frame.on('close',function(){frame.detach();});frame.open();}};gallery=_.extend({},base,{state:['gallery-edit'],template:media.template('editor-gallery'),initialize:function(){var attachments=media.gallery.attachments(this.shortcode,media.view.settings.post.id),attrs=this.shortcode.attrs.named,self=this;attachments.more().done(function(){attachments=attachments.toJSON();_.each(attachments,function(attachment){if(attachment.sizes){if(attrs.size&&attachment.sizes[attrs.size]){attachment.thumbnail=attachment.sizes[attrs.size];}else if(attachment.sizes.thumbnail){attachment.thumbnail=attachment.sizes.thumbnail;}else if(attachment.sizes.full){attachment.thumbnail=attachment.sizes.full;}}});self.render(self.template({verifyHTML:verifyHTML,attachments:attachments,columns:attrs.columns?parseInt(attrs.columns,10):media.galleryDefaults.columns}));}).fail(function(jqXHR,textStatus){self.setError(textStatus);});}});av=_.extend({},base,{action:'parse-media-shortcode',initialize:function(){var self=this,maxwidth=null;if(this.url){this.loader=false;this.shortcode=media.embed.shortcode({url:this.text});}
if(self.editor){maxwidth=self.editor.getBody().clientWidth;}
wp.ajax.post(this.action,{post_ID:media.view.settings.post.id,type:this.shortcode.tag,shortcode:this.shortcode.string(),maxwidth:maxwidth}).done(function(response){self.render(response);}).fail(function(response){if(self.url){self.ignore=true;self.removeMarkers();}else{self.setError(response.message||response.statusText,'admin-media');}});this.getEditors(function(editor){editor.on('wpview-selected',function(){self.pausePlayers();});});},pausePlayers:function(){this.getNodes(function(editor,node,content){var win=$('iframe.wpview-sandbox',content).get(0);if(win&&(win=win.contentWindow)&&win.mejs){_.each(win.mejs.players,function(player){try{player.pause();}catch(e){}});}});}});embed=_.extend({},av,{action:'parse-embed',edit:function(text,update){var frame=media.embed.edit(text,this.url),self=this;this.pausePlayers();frame.state('embed').props.on('change:url',function(model,url){if(url&&model.get('url')){frame.state('embed').metadata=model.toJSON();}});frame.state('embed').on('select',function(){var data=frame.state('embed').metadata;if(self.url){update(data.url);}else{update(media.embed.shortcode(data).string());}});frame.on('close',function(){frame.detach();});frame.open();}});views.register('gallery',_.extend({},gallery));views.register('audio',_.extend({},av,{state:['audio-details']}));views.register('video',_.extend({},av,{state:['video-details']}));views.register('playlist',_.extend({},av,{state:['playlist-edit','video-playlist-edit']}));views.register('embed',_.extend({},embed));views.register('embedURL',_.extend({},embed,{match:function(content){var re=/(^|<p>(?:<span data-mce-type="bookmark"[^>]+>\s*<\/span>)?)(https?:\/\/[^\s"]+?)((?:<span data-mce-type="bookmark"[^>]+>\s*<\/span>)?<\/p>\s*|$)/gi;var match=re.exec(content);if(match){return{index:match.index+match[1].length,content:match[2],options:{url:true}};}}}));})(window,window.wp.mce.views,window.wp.media,window.jQuery);