text: tinymce.PluginManager.add("media", function (e, t) {
      function i(e) {
          return-1 != e.indexOf(".mp3") ? "audio/mpeg" : -1 != e.indexOf(".wav") ? "audio/wav" : -1 != e.indexOf(".mp4") ? "video/mp4" : -1 != e.indexOf(".webm") ? "video/webm" : -1 != e.indexOf(".ogg") ? "video/ogg" : -1 != e.indexOf(".swf") ? "application/x-shockwave-flash" : ""
      }
  
      function r(t) {
          var i = e.settings.media_scripts;
          if (i)for (var r = 0; r < i.length; r++)if (-1 !== t.indexOf(i[r].filter))return i[r]
      }
  
      function o() {
          function t(e) {
              var t, a, c, s;
              t = i.find("#width")[0], a = i.find("#height")[0], c = t.value(), s = a.value(), i.find("#constrain")[0].checked() && r && o && c && s && (e.control == t ? (s = Math.round(c / r * s), a.value(s)) : (c = Math.round(s / o * c), t.value(c))), r = c, o = s
          }
  
          var i, r, o, m, u = [
              {name: "source1", type: "filepicker", filetype: "media", size: 40, autofocus: !0, label: "Source"}
          ];
          e.settings.media_alt_source !== !1 && u.push({name: "source2", type: "filepicker", filetype: "media", size: 40, label: "Alternative source"}), e.settings.media_poster !== !1 && u.push({name: "poster", type: "filepicker", filetype: "image", size: 40, label: "Poster"}), e.settings.media_dimensions !== !1 && u.push({type: "container", label: "Dimensions", layout: "flex", align: "center", spacing: 5, items: [
              {name: "width", type: "textbox", maxLength: 3, size: 3, onchange: t},
              {type: "label", text: "x"},
              {name: "height", type: "textbox", maxLength: 3, size: 3, onchange: t},
              {name: "constrain", type: "checkbox", checked: !0, text: "Constrain proportions"}
          ]}), m = n(e.selection.getNode()), r = m.width, o = m.height, i = e.windowManager.open({title: "Insert/edit video", data: m, bodyType: "tabpanel", body: [
              {title: "General", type: "form", onShowTab: function () {
                  m = s(this.next().find("#embed").value()), this.fromJSON(m)
              }, items: u},
              {title: "Embed", type: "panel", layout: "flex", direction: "column", align: "stretch", padding: 10, spacing: 10, onShowTab: function () {
                  this.find("#embed").value(c(this.parent().toJSON()))
              }, items: [
                  {type: "label", text: "Paste your embed code below:", forId: "mcemediasource"},
                  {id: "mcemediasource", type: "textbox", flex: 1, name: "embed", value: a(), multiline: !0, label: "Source"}
              ]}
          ], onSubmit: function () {
              e.insertContent(c(this.toJSON()))
          }})
      }
  
      function a() {
          var t = e.selection.getNode();
          return t.getAttribute("data-mce-object") ? e.selection.getContent() : void 0
      }
  
      function c(o) {
          var a = "";
          if (!o.source1 && (tinymce.extend(o, s(o.embed)), !o.source1))return"";
          if (o.source2 || (o.source2 = ""), o.poster || (o.poster = ""), o.source1 = e.convertURL(o.source1, "source"), o.source2 = e.convertURL(o.source2, "source"), o.source1mime = i(o.source1), o.source2mime = i(o.source2), o.poster = e.convertURL(o.poster, "poster"), o.flashPlayerUrl = e.convertURL(t + "/moxieplayer.swf", "movie"), o.embed)a = m(o.embed, o, !0); else {
              tinymce.each(u, function (e) {
                  var t, i, r;
                  if (t = e.regex.exec(o.source1)) {
                      for (r = e.url, i = 0; t[i]; i++)r = r.replace("$" + i, function () {
                          return t[i]
                      });
                      o.source1 = r, o.type = e.type, o.width = o.width || e.w, o.height = o.height || e.h
                  }
              });
              var c = r(o.source1);
              c && (o.type = "script", o.width = c.width, o.height = c.height), o.width = o.width || 300, o.height = o.height || 150, tinymce.each(o, function (t, i) {
                  o[i] = e.dom.encode(t)
              }), "iframe" == o.type ? a += '<iframe src="' + o.source1 + '" width="' + o.width + '" height="' + o.height + '"></iframe>' : "application/x-shockwave-flash" == o.source1mime ? (a += '<object data="' + o.source1 + '" width="' + o.width + '" height="' + o.height + '" type="application/x-shockwave-flash">', o.poster && (a += '<img src="' + o.poster + '" width="' + o.width + '" height="' + o.height + '" />'), a += "</object>") : -1 != o.source1mime.indexOf("audio") ? e.settings.audio_template_callback ? a = e.settings.audio_template_callback(o) : a += '<audio controls="controls" src="' + o.source1 + '">' + (o.source2 ? '\n<source src="' + o.source2 + '"' + (o.source2mime ? ' type="' + o.source2mime + '"' : "") + " />\n" : "") + "</audio>" : "script" == o.type ? a += '<script src="' + o.source1 + '"></script>' : a = e.settings.video_template_callback ? e.settings.video_template_callback(o) : '<video width="' + o.width + '" height="' + o.height + '"' + (o.poster ? ' poster="' + o.poster + '"' : "") + ' controls="controls">\n<source src="' + o.source1 + '"' + (o.source1mime ? ' type="' + o.source1mime + '"' : "") + " />\n" + (o.source2 ? '<source src="' + o.source2 + '"' + (o.source2mime ? ' type="' + o.source2mime + '"' : "") + " />\n" : "") + "</video>"
          }
          return a
      }
  
      function s(e) {
          var t = {};
          return new tinymce.html.SaxParser({validate: !1, allow_conditional_comments: !0, special: "script,noscript", start: function (e, i) {
              if (t.source1 || "param" != e || (t.source1 = i.map.movie), ("iframe" == e || "object" == e || "embed" == e || "video" == e || "audio" == e) && (t.type || (t.type = e), t = tinymce.extend(i.map, t)), "script" == e) {
                  var o = r(i.map.src);
                  if (!o)return;
                  t = {type: "script", source1: i.map.src, width: o.width, height: o.height}
              }
              "source" == e && (t.source1 ? t.source2 || (t.source2 = i.map.src) : t.source1 = i.map.src), "img" != e || t.poster || (t.poster = i.map.src)
          }}).parse(e), t.source1 = t.source1 || t.src || t.data, t.source2 = t.source2 || "", t.poster = t.poster || "", t
      }
  
      function n(t) {
          return t.getAttribute("data-mce-object") ? s(e.serializer.serialize(t, {selection: !0})) : {}
      }
  
      function m(e, t, i) {
          function r(e, t) {
              var i, r, o, a;
              for (i in t)if (o = "" + t[i], e.map[i])for (r = e.length; r--;)a = e[r], a.name == i && (o ? (e.map[i] = o, a.value = o) : (delete e.map[i], e.splice(r, 1))); else o && (e.push({name: i, value: o}), e.map[i] = o)
          }
  
          var o, a = new tinymce.html.Writer, c = 0;
          return new tinymce.html.SaxParser({validate: !1, allow_conditional_comments: !0, special: "script,noscript", comment: function (e) {
              a.comment(e)
          }, cdata: function (e) {
              a.cdata(e)
          }, text: function (e, t) {
              a.text(e, t)
          }, start: function (e, s, n) {
              switch (e) {
                  case"video":
                  case"object":
                  case"embed":
                  case"img":
                  case"iframe":
                      r(s, {width: t.width, height: t.height})
              }
              if (i)switch (e) {
                  case"video":
                      r(s, {poster: t.poster, src: ""}), t.source2 && r(s, {src: ""});
                      break;
                  case"iframe":
                      r(s, {src: t.source1});
                      break;
                  case"source":
                      if (c++, 2 >= c && (r(s, {src: t["source" + c], type: t["source" + c + "mime"]}), !t["source" + c]))return;
                      break;
                  case"img":
                      if (!t.poster)return;
                      o = !0
              }
              a.start(e, s, n)
          }, end: function (e) {
              if ("video" == e && i)for (var s = 1; 2 >= s; s++)if (t["source" + s]) {
                  var n = [];
                  n.map = {}, s > c && (r(n, {src: t["source" + s], type: t["source" + s + "mime"]}), a.start("source", n, !0))
              }
              if (t.poster && "object" == e && i && !o) {
                  var m = [];
                  m.map = {}, r(m, {src: t.poster, width: t.width, height: t.height}), a.start("img", m, !0)
              }
              a.end(e)
          }}, new tinymce.html.Schema({})).parse(e), a.getContent()
      }
  
      var u = [
          {regex: /youtu\.be\/([\w\-.]+)/, type: "iframe", w: 425, h: 350, url: "//www.youtube.com/embed/$1"},
          {regex: /youtube\.com(.+)v=([^&]+)/, type: "iframe", w: 425, h: 350, url: "//www.youtube.com/embed/$2"},
          {regex: /vimeo\.com\/([0-9]+)/, type: "iframe", w: 425, h: 350, url: "//player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc"},
          {regex: /maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/, type: "iframe", w: 425, h: 350, url: '//maps.google.com/maps/ms?msid=$2&output=embed"'}
      ];
      e.on("ResolveName", function (e) {
          var t;
          1 == e.target.nodeType && (t = e.target.getAttribute("data-mce-object")) && (e.name = t)
      }), e.on("preInit", function () {
          var t = e.schema.getSpecialElements();
          tinymce.each("video audio iframe object".split(" "), function (e) {
              t[e] = new RegExp("</" + e + "[^>]*>", "gi")
          });
          var i = e.schema.getBoolAttrs();
          tinymce.each("webkitallowfullscreen mozallowfullscreen allowfullscreen".split(" "), function (e) {
              i[e] = {}
          }), e.parser.addNodeFilter("iframe,video,audio,object,embed,script", function (t, i) {
              for (var o, a, c, s, n, m, u, d, l = t.length; l--;)if (a = t[l], "script" != a.name || (d = r(a.attr("src")))) {
                  for (c = new tinymce.html.Node("img", 1), c.shortEnded = !0, d && (d.width && a.attr("width", d.width.toString()), d.height && a.attr("height", d.height.toString())), m = a.attributes, o = m.length; o--;)s = m[o].name, n = m[o].value, "width" !== s && "height" !== s && "style" !== s && (("data" == s || "src" == s) && (n = e.convertURL(n, s)), c.attr("data-mce-p-" + s, n));
                  u = a.firstChild && a.firstChild.value, u && (c.attr("data-mce-html", escape(u)), c.firstChild = null), c.attr({width: a.attr("width") || "300", height: a.attr("height") || ("audio" == i ? "30" : "150"), style: a.attr("style"), src: tinymce.Env.transparentSrc, "data-mce-object": i, "class": "mce-object mce-object-" + i}), a.replace(c)
              }
          }), e.serializer.addAttributeFilter("data-mce-object", function (e, t) {
              for (var i, r, o, a, c, s, n, m = e.length; m--;) {
                  for (i = e[m], n = i.attr(t), r = new tinymce.html.Node(n, 1), "audio" != n && "script" != n && r.attr({width: i.attr("width"), height: i.attr("height")}), r.attr({style: i.attr("style")}), a = i.attributes, o = a.length; o--;) {
                      var u = a[o].name;
                      0 === u.indexOf("data-mce-p-") && r.attr(u.substr(11), a[o].value)
                  }
                  "script" == n && r.attr("type", "text/javascript"), c = i.attr("data-mce-html"), c && (s = new tinymce.html.Node("#text", 3), s.raw = !0, s.value = unescape(c), r.append(s)), i.replace(r)
              }
          })
      }), e.on("ObjectSelected", function (e) {
          var t = e.target.getAttribute("data-mce-object");
          ("audio" == t || "script" == t) && e.preventDefault()
      }), e.on("objectResized", function (e) {
          var t, i = e.target;
          i.getAttribute("data-mce-object") && (t = i.getAttribute("data-mce-html"), t && (t = unescape(t), i.setAttribute("data-mce-html", escape(m(t, {width: e.width, height: e.height})))))
      }), e.addButton("media", {tooltip: "Insert/edit video", onclick: o, stateSelector: ["img[data-mce-object=video]", "img[data-mce-object=iframe]"]}), e.addMenuItem("media", {icon: "media", text: "Insert video", onclick: o, context: "insert", prependToContext: !0})
  });