plugin.js 3.7 KB
Newer Older
Five-菜鸟级's avatar
init  
Five-菜鸟级 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
/**
 * upfile 1.1v
 * The tinymce-plugins is used to upfile
 * 
 * https://github.com/Five-great/tinymce-plugins
 * 
 * Copyright 2020, Five(Li Hailong) The Chengdu, China https://www.fivecc.cn/
 *
 * Licensed under MIT
 */
 tinymce.PluginManager.add('upfile', function(editor, url) {
	var pluginName='上传文件';
	window.upfile={}; //扔外部公共变量,也可以扔一个自定义的位置

	var baseURL=tinymce.baseURL||'.';
	var iframe1 = baseURL+'/plugins/upfile/upfiles.html';
    upfile.file_callback = editor.getParam('file_callback', undefined, 'function');
    // upfile.file_callback = editor.getParam('download_text', String, 'function');
	upfile.tinymce = tinymce;
    upfile.res={};
	var openDialog = function() {
		return editor.windowManager.openUrl({
	  title: pluginName,
      size: 'large',
      width: 450,
      height: 450,
			url:iframe1,
			buttons: [
				{
					type: 'cancel',
					text: 'Close'
				},
				{ 
					type: 'custom',
					text: 'Save',
					name: 'save',
					primary: true
				},
			],
			onAction: function (api, details) {
				switch (details.name) {
					case 'save':
						var res = upfile.res;
						var html = '<span  class="upfile" contenteditable="false"><a href="'+res.url+'" target="_blank" title="'+res.text+'" >'+res.text+'<a></span>';
						editor.insertContent(html);
						upfile.res={};
						api.close();
						break;
					default:
						break;
				}
				
			}
		});
	};

	editor.ui.registry.getAll().icons.upfile || editor.ui.registry.addIcon('upfile','<svg t="1603858123045" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2812" width="24" height="24"><path fill-rule="evenodd" fill="#000" d="M909 897H115a50 50 0 0 1-50-50V177a50 50 0 0 1 50-50h370a50 50 0 0 1 50 50v62a10 10 0 0 0 10 10h241a50 50 0 0 1 50 50v58h73a50 50 0 0 1 50 50v440a50 50 0 0 1-50 50zM505 309a30 30 0 0 1-30-30v-72a20 20 0 0 0-20-20H145a20 20 0 0 0-20 20v610c0 11.046 9.377 20 20.422 20H209a20 20 0 0 0 20-20V407a50 50 0 0 1 50-50h497v-28a20 20 0 0 0-20-20H535m364 128a20 20 0 0 0-20-20H309a20 20 0 0 0-20 20v400h590a20 20 0 0 0 20-20V437zM650.659 615.8l-26.618-26.53V737a30 30 0 0 1-30 30h-0.113a30 30 0 0 1-30-30V589.275L537.309 615.8a30.006 30.006 0 0 1-42.509-42.36l77.928-77.669a30.127 30.127 0 0 1 42.506 0l77.929 77.669a30.007 30.007 0 0 1-42.504 42.36z" p-id="2813"></path></svg>');
	
	editor.ui.registry.addButton('upfile', {
		icon: 'upfile',
    tooltip: pluginName,
		onAction: function() {
			openDialog();
		}
	});
	function createHref(e) {
		var t = document.createElement("a");
		t.target = "_blank", t.href = e, t.rel = "noreferrer noopener";
		var n, i, o = document.createEvent("MouseEvents");
		o.initMouseEvent("click", !0, !0, window, 0, 0, 0, 0, 0, !1, !1, !1, !1, 0, null), n = t, i = o, document.body.appendChild(n), n.dispatchEvent(i), document.body.removeChild(n)
	}
	  function getParent(e, t) {
		return t = t || e.selection.getNode(), e.dom.getParent(t, 'span[class="upfile"]')
	};
	editor.ui.registry.addButton("upfile-download", {
		text: "下载",
		onAction: function() {
			return e = function(e) {
				for (var t = 0, n = e.selection.getNode().children; t < n.length; t++) {
					var i = n[t];
					if (i.hasAttribute("href")) return i.getAttribute("href")
				}
				return "#"
			}(editor), void createHref(e);
		}
	})
	editor.ui.registry.addContextToolbar("upfile", {
		predicate: function(e) {
			return !!getParent(editor, e)
		},
		items: "upfile-download",
		position: "node",
		scope: "node"
	})
	editor.ui.registry.addMenuItem('upfile', {
		icon: 'upfile',
		text: '图片上传...',
		onAction: function() {
			openDialog();
		}
	});
	return {
		getMetadata: function() {
			return  {
				name: pluginName,
				url: "https://github.com/Five-great/tinymce-plugins",
			};
		}
	};
});