@grapesjs/studio-sdk-plugins 1.0.13 → 1.0.14-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.js +1 -1
- package/dist/index.es.js +280 -269
- package/dist/index.umd.js +1 -1
- package/dist/youtubeAssetProvider/index.cjs.js +1 -1
- package/dist/youtubeAssetProvider/index.es.js +79 -68
- package/dist/youtubeAssetProvider/index.umd.js +1 -1
- package/dist/youtubeAssetProvider/locale/en.d.ts +7 -0
- package/dist/youtubeAssetProvider/types.d.ts +2 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";require("grapesjs");var g=(e=>(e.free="free",e.startup="startup",e.business="business",e.enterprise="enterprise",e))(g||{}),h=(e=>(e.toastAdd="studio:toastAdd",e.dialogOpen="studio:dialogOpen",e.dialogClose="studio:dialogClose",e.sidebarLeftSet="studio:sidebarLeft:set",e.sidebarLeftGet="studio:sidebarLeft:get",e.sidebarLeftToggle="studio:sidebarLeft:toggle",e.sidebarRightSet="studio:sidebarRight:set",e.sidebarRightGet="studio:sidebarRight:get",e.sidebarRightToggle="studio:sidebarRight:toggle",e.sidebarTopSet="studio:sidebarTop:set",e.sidebarTopGet="studio:sidebarTop:get",e.sidebarTopToggle="studio:sidebarTop:toggle",e.sidebarBottomSet="studio:sidebarBottom:set",e.sidebarBottomGet="studio:sidebarBottom:get",e.sidebarBottomToggle="studio:sidebarBottom:toggle",e.symbolAdd="studio:symbolAdd",e.symbolDetach="studio:symbolDetach",e.symbolOverride="studio:symbolOverride",e.symbolPropagateStyles="studio:propagateStyles",e.getPagesConfig="studio:getPagesConfig",e.setPagesConfig="studio:setPagesConfig",e.getPageSettings="studio:getPageSettings",e.setPageSettings="studio:setPageSettings",e.projectFiles="studio:projectFiles",e.canvasReload="studio:canvasReload",e.getBlocksPanel="studio:getBlocksPanel",e.setBlocksPanel="studio:setBlocksPanel",e.getStateContextMenu="studio:getStateContextMenu",e.setStateContextMenu="studio:setStateContextMenu",e.contextMenuComponent="studio:contextMenuComponent",e.layoutAdd="studio:layoutAdd",e.layoutRemove="studio:layoutRemove",e.layoutToggle="studio:layoutToggle",e.getStateTheme="studio:getStateTheme",e.setStateTheme="studio:setStateTheme",e.assetProviderGet="studio:assetProviderGet",e.assetProviderAdd="studio:assetProviderAdd",e.assetProviderRemove="studio:assetProviderRemove",e))(h||{});const
|
|
1
|
+
"use strict";require("grapesjs");var g=(e=>(e.free="free",e.startup="startup",e.business="business",e.enterprise="enterprise",e))(g||{}),h=(e=>(e.toastAdd="studio:toastAdd",e.dialogOpen="studio:dialogOpen",e.dialogClose="studio:dialogClose",e.sidebarLeftSet="studio:sidebarLeft:set",e.sidebarLeftGet="studio:sidebarLeft:get",e.sidebarLeftToggle="studio:sidebarLeft:toggle",e.sidebarRightSet="studio:sidebarRight:set",e.sidebarRightGet="studio:sidebarRight:get",e.sidebarRightToggle="studio:sidebarRight:toggle",e.sidebarTopSet="studio:sidebarTop:set",e.sidebarTopGet="studio:sidebarTop:get",e.sidebarTopToggle="studio:sidebarTop:toggle",e.sidebarBottomSet="studio:sidebarBottom:set",e.sidebarBottomGet="studio:sidebarBottom:get",e.sidebarBottomToggle="studio:sidebarBottom:toggle",e.symbolAdd="studio:symbolAdd",e.symbolDetach="studio:symbolDetach",e.symbolOverride="studio:symbolOverride",e.symbolPropagateStyles="studio:propagateStyles",e.getPagesConfig="studio:getPagesConfig",e.setPagesConfig="studio:setPagesConfig",e.getPageSettings="studio:getPageSettings",e.setPageSettings="studio:setPageSettings",e.projectFiles="studio:projectFiles",e.canvasReload="studio:canvasReload",e.getBlocksPanel="studio:getBlocksPanel",e.setBlocksPanel="studio:setBlocksPanel",e.getStateContextMenu="studio:getStateContextMenu",e.setStateContextMenu="studio:setStateContextMenu",e.contextMenuComponent="studio:contextMenuComponent",e.layoutAdd="studio:layoutAdd",e.layoutRemove="studio:layoutRemove",e.layoutToggle="studio:layoutToggle",e.getStateTheme="studio:getStateTheme",e.setStateTheme="studio:setStateTheme",e.assetProviderGet="studio:assetProviderGet",e.assetProviderAdd="studio:assetProviderAdd",e.assetProviderRemove="studio:assetProviderRemove",e))(h||{});const T="app.grapesjs.com",P="app-stage.grapesjs.com",f=[T,P,"localhost","127.0.0.1",".local-credentialless.webcontainer.io",".local.webcontainer.io","-sandpack.codesandbox.io"],k="license:check:start",R="license:check:end",I=()=>typeof window<"u",U=({isDev:e,isStage:o})=>`${e?"":`https://${o?P:T}`}/api`,x=()=>{const e=I()&&window.location.hostname;return!!e&&(f.includes(e)||f.some(o=>e.endsWith(o)))};async function $({path:e,baseApiUrl:o,method:r="GET",headers:i={},params:c,body:u}){const t=`${o||U({isDev:!1,isStage:!1})}${e}`,n={method:r,headers:{"Content-Type":"application/json",...i}};u&&(n.body=JSON.stringify(u));const a=c?new URLSearchParams(c).toString():"",s=a?`?${a}`:"",l=await fetch(`${t}${s}`,n);if(!l.ok)throw new Error(`HTTP error! status: ${l.status}`);return l.json()}const v={[g.free]:0,[g.startup]:10,[g.business]:20,[g.enterprise]:30};function M(e){const o=e;return o.init=r=>i=>e(i,r),o}const O=e=>M(e);async function B({editor:e,plan:o,pluginName:r,licenseKey:i,cleanup:c}){let u="",d=!1;const t=x(),n=s=>{console.warn("Cleanup plugin:",r,"Reason:",s),c()},a=(s={})=>{var b;const{error:l,sdkLicense:y}=s,p=(b=s.plan)==null?void 0:b.category;if(!(y||s.license)||l)n(l||"Invalid license");else if(p){const A=v[o],L=v[p];A>L&&n({pluginRequiredPlan:o,licensePlan:p})}};e.on(k,s=>{u=s==null?void 0:s.baseApiUrl,d=!0}),e.on(R,s=>{a(s)}),setTimeout(async()=>{if(!d){if(t)return;if(i){const s=await E({licenseKey:i,pluginName:r,baseApiUrl:u});s&&a(s)}else n("The `licenseKey` option not provided")}},2e3)}async function E(e){const{licenseKey:o,pluginName:r,baseApiUrl:i}=e;try{return(await $({baseApiUrl:i,path:`/sdk/${o||"na"}`,method:"POST",params:{d:window.location.hostname,pn:r}})).result||{}}catch(c){return console.error("Error during SDK license check:",c),!1}}const j=e=>{const o={};for(const r of Object.keys(e)){let i=e[r];i&&(Array.isArray(i)?i=i.map(c=>c.toString()).join(","):i=i.toString(),o[r]=i)}return new URLSearchParams(o)},m=e=>{const{apiKey:o,searchParams:r,thumbnailQuality:i="high"}=e,c=(t={})=>{const a="https://www.googleapis.com/youtube/v3/search",s=j(t);return`${a}?${s}`},u=t=>{var n,a,s;return((n=t[i])==null?void 0:n.url)||((a=t.high)==null?void 0:a.url)||((s=t.medium)==null?void 0:s.url)||t.default.url},d=t=>{const n=u(t.snippet.thumbnails);return{id:t.id.videoId,src:`https://www.youtube.com/watch?v=${t.id.videoId}`,name:t.snippet.title,customData:{thumbnailUrl:n,videoItem:t}}};return{id:"youtube",types:["youtube-video"],label:({editor:t})=>t.I18n.t("youtubeAssetProvider.providerLabel"),search:{reloadOnInput:!0,debounceMs:1e3},async onLoad({searchValue:t,pageCustomData:n}){var b;const a={maxResults:25,q:t,pageToken:n==null?void 0:n.token,type:["video"],key:o},s=r==null?void 0:r({searchValue:t}),l={...a,...s};l.part?l.part.includes("snippet")||l.part.push("snippet"):l.part=["snippet"];const p=await(await fetch(c(l))).json();return(b=p.items)!=null&&b.length?{items:p.items.map(d),nextPageCustomData:{token:p.nextPageToken},isLastPage:!p.nextPageToken}:{items:[],isLastPage:!0}},itemLayout:({assetProps:t,onSelect:n})=>({type:"column",onClick:()=>n(t),htmlAttrs:{title:t.name},style:{border:"1px solid gray",borderRadius:8,overflow:"hidden",cursor:"pointer"},children:[{type:"custom",render:()=>{var a;return`<img src="${(a=t.customData)==null?void 0:a.thumbnailUrl}" alt="${t.name}" style="width: 100%; height: 100px; object-fit: cover">`}},{type:"text",content:t.name,style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",paddingLeft:8,paddingRight:8}}]})}},D={youtubeAssetProvider:{searchBtn:"Search on YouTube",providerLabel:"YouTube Videos"}},G="youtubeAssetProvider",N=function(e,o){const{skipVideoComponent:r,i18n:i={}}=o,c=m(o);e.runCommand(h.assetProviderAdd,{provider:c});const u="search-on-youtube",d="video";if(!r){const t=e.Components.getType(d).model.prototype;e.Components.addType(d,{model:{getYoutubeTraits(){const[n,...a]=t.getYoutubeTraits.apply(this);return[n,{id:u,type:"button",label:e.I18n.t("youtubeAssetProvider.searchBtn"),command:()=>{e.AssetManager.open({providerId:c.id,providers:[],types:[],select:s=>{e.Assets.close(),this.set({videoId:s.attributes.id})},content:{header:{addUrl:!1,upload:!1}}})}},...a]}}})}e.I18n.addMessages({en:D,...i}),B({editor:e,licenseKey:o.licenseKey,plan:g.startup,pluginName:G,cleanup:()=>{if(e.runCommand(h.assetProviderRemove,{id:c.id}),!r){const t=e.Components.getType(d).model.prototype;e.Components.addType(d,{model:{getYoutubeTraits(){return t.getYoutubeTraits.apply(this).filter(n=>n.id!==u)}}})}}})},W=O(N);module.exports=W;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "grapesjs";
|
|
2
2
|
var g = /* @__PURE__ */ ((e) => (e.free = "free", e.startup = "startup", e.business = "business", e.enterprise = "enterprise", e))(g || {}), h = /* @__PURE__ */ ((e) => (e.toastAdd = "studio:toastAdd", e.dialogOpen = "studio:dialogOpen", e.dialogClose = "studio:dialogClose", e.sidebarLeftSet = "studio:sidebarLeft:set", e.sidebarLeftGet = "studio:sidebarLeft:get", e.sidebarLeftToggle = "studio:sidebarLeft:toggle", e.sidebarRightSet = "studio:sidebarRight:set", e.sidebarRightGet = "studio:sidebarRight:get", e.sidebarRightToggle = "studio:sidebarRight:toggle", e.sidebarTopSet = "studio:sidebarTop:set", e.sidebarTopGet = "studio:sidebarTop:get", e.sidebarTopToggle = "studio:sidebarTop:toggle", e.sidebarBottomSet = "studio:sidebarBottom:set", e.sidebarBottomGet = "studio:sidebarBottom:get", e.sidebarBottomToggle = "studio:sidebarBottom:toggle", e.symbolAdd = "studio:symbolAdd", e.symbolDetach = "studio:symbolDetach", e.symbolOverride = "studio:symbolOverride", e.symbolPropagateStyles = "studio:propagateStyles", e.getPagesConfig = "studio:getPagesConfig", e.setPagesConfig = "studio:setPagesConfig", e.getPageSettings = "studio:getPageSettings", e.setPageSettings = "studio:setPageSettings", e.projectFiles = "studio:projectFiles", e.canvasReload = "studio:canvasReload", e.getBlocksPanel = "studio:getBlocksPanel", e.setBlocksPanel = "studio:setBlocksPanel", e.getStateContextMenu = "studio:getStateContextMenu", e.setStateContextMenu = "studio:setStateContextMenu", e.contextMenuComponent = "studio:contextMenuComponent", e.layoutAdd = "studio:layoutAdd", e.layoutRemove = "studio:layoutRemove", e.layoutToggle = "studio:layoutToggle", e.getStateTheme = "studio:getStateTheme", e.setStateTheme = "studio:setStateTheme", e.assetProviderGet = "studio:assetProviderGet", e.assetProviderAdd = "studio:assetProviderAdd", e.assetProviderRemove = "studio:assetProviderRemove", e))(h || {});
|
|
3
|
-
const
|
|
4
|
-
|
|
3
|
+
const T = "app.grapesjs.com", P = "app-stage.grapesjs.com", f = [
|
|
4
|
+
T,
|
|
5
5
|
P,
|
|
6
6
|
"localhost",
|
|
7
7
|
"127.0.0.1",
|
|
@@ -11,82 +11,82 @@ const v = "app.grapesjs.com", P = "app-stage.grapesjs.com", f = [
|
|
|
11
11
|
// For stackblitz.com demos
|
|
12
12
|
"-sandpack.codesandbox.io"
|
|
13
13
|
// For Sandpack demos
|
|
14
|
-
], k = "license:check:start", R = "license:check:end",
|
|
15
|
-
const e =
|
|
14
|
+
], k = "license:check:start", R = "license:check:end", I = () => typeof window < "u", U = ({ isDev: e, isStage: o }) => `${e ? "" : `https://${o ? P : T}`}/api`, x = () => {
|
|
15
|
+
const e = I() && window.location.hostname;
|
|
16
16
|
return !!e && (f.includes(e) || f.some((o) => e.endsWith(o)));
|
|
17
17
|
};
|
|
18
18
|
async function $({
|
|
19
19
|
path: e,
|
|
20
20
|
baseApiUrl: o,
|
|
21
21
|
method: r = "GET",
|
|
22
|
-
headers:
|
|
22
|
+
headers: i = {},
|
|
23
23
|
params: l,
|
|
24
|
-
body:
|
|
24
|
+
body: u
|
|
25
25
|
}) {
|
|
26
|
-
const t = `${o ||
|
|
26
|
+
const t = `${o || U({ isDev: !1, isStage: !1 })}${e}`, n = {
|
|
27
27
|
method: r,
|
|
28
28
|
headers: {
|
|
29
29
|
"Content-Type": "application/json",
|
|
30
|
-
...
|
|
30
|
+
...i
|
|
31
31
|
}
|
|
32
32
|
};
|
|
33
|
-
|
|
34
|
-
const a = l ? new URLSearchParams(l).toString() : "", s = a ? `?${a}` : "",
|
|
35
|
-
if (!
|
|
36
|
-
throw new Error(`HTTP error! status: ${
|
|
37
|
-
return
|
|
33
|
+
u && (n.body = JSON.stringify(u));
|
|
34
|
+
const a = l ? new URLSearchParams(l).toString() : "", s = a ? `?${a}` : "", c = await fetch(`${t}${s}`, n);
|
|
35
|
+
if (!c.ok)
|
|
36
|
+
throw new Error(`HTTP error! status: ${c.status}`);
|
|
37
|
+
return c.json();
|
|
38
38
|
}
|
|
39
|
-
const
|
|
39
|
+
const v = {
|
|
40
40
|
[g.free]: 0,
|
|
41
41
|
[g.startup]: 10,
|
|
42
42
|
[g.business]: 20,
|
|
43
43
|
[g.enterprise]: 30
|
|
44
44
|
};
|
|
45
|
-
function
|
|
45
|
+
function M(e) {
|
|
46
46
|
const o = e;
|
|
47
|
-
return o.init = (r) => (
|
|
47
|
+
return o.init = (r) => (i) => e(i, r), o;
|
|
48
48
|
}
|
|
49
|
-
const
|
|
49
|
+
const O = (e) => /* @__PURE__ */ M(e);
|
|
50
50
|
async function B({
|
|
51
51
|
editor: e,
|
|
52
52
|
plan: o,
|
|
53
53
|
pluginName: r,
|
|
54
|
-
licenseKey:
|
|
54
|
+
licenseKey: i,
|
|
55
55
|
cleanup: l
|
|
56
56
|
}) {
|
|
57
|
-
let
|
|
58
|
-
const t =
|
|
57
|
+
let u = "", d = !1;
|
|
58
|
+
const t = x(), n = (s) => {
|
|
59
59
|
console.warn("Cleanup plugin:", r, "Reason:", s), l();
|
|
60
60
|
}, a = (s = {}) => {
|
|
61
61
|
var b;
|
|
62
|
-
const { error:
|
|
63
|
-
if (!(y || s.license) ||
|
|
64
|
-
|
|
62
|
+
const { error: c, sdkLicense: y } = s, p = (b = s.plan) == null ? void 0 : b.category;
|
|
63
|
+
if (!(y || s.license) || c)
|
|
64
|
+
n(c || "Invalid license");
|
|
65
65
|
else if (p) {
|
|
66
|
-
const A =
|
|
67
|
-
A > L &&
|
|
66
|
+
const A = v[o], L = v[p];
|
|
67
|
+
A > L && n({ pluginRequiredPlan: o, licensePlan: p });
|
|
68
68
|
}
|
|
69
69
|
};
|
|
70
70
|
e.on(k, (s) => {
|
|
71
|
-
|
|
71
|
+
u = s == null ? void 0 : s.baseApiUrl, d = !0;
|
|
72
72
|
}), e.on(R, (s) => {
|
|
73
73
|
a(s);
|
|
74
74
|
}), setTimeout(async () => {
|
|
75
75
|
if (!d) {
|
|
76
76
|
if (t) return;
|
|
77
|
-
if (
|
|
78
|
-
const s = await E({ licenseKey:
|
|
77
|
+
if (i) {
|
|
78
|
+
const s = await E({ licenseKey: i, pluginName: r, baseApiUrl: u });
|
|
79
79
|
s && a(s);
|
|
80
80
|
} else
|
|
81
|
-
|
|
81
|
+
n("The `licenseKey` option not provided");
|
|
82
82
|
}
|
|
83
83
|
}, 2e3);
|
|
84
84
|
}
|
|
85
85
|
async function E(e) {
|
|
86
|
-
const { licenseKey: o, pluginName: r, baseApiUrl:
|
|
86
|
+
const { licenseKey: o, pluginName: r, baseApiUrl: i } = e;
|
|
87
87
|
try {
|
|
88
88
|
return (await $({
|
|
89
|
-
baseApiUrl:
|
|
89
|
+
baseApiUrl: i,
|
|
90
90
|
path: `/sdk/${o || "na"}`,
|
|
91
91
|
method: "POST",
|
|
92
92
|
params: {
|
|
@@ -101,54 +101,54 @@ async function E(e) {
|
|
|
101
101
|
const j = (e) => {
|
|
102
102
|
const o = {};
|
|
103
103
|
for (const r of Object.keys(e)) {
|
|
104
|
-
let
|
|
105
|
-
|
|
104
|
+
let i = e[r];
|
|
105
|
+
i && (Array.isArray(i) ? i = i.map((l) => l.toString()).join(",") : i = i.toString(), o[r] = i);
|
|
106
106
|
}
|
|
107
107
|
return new URLSearchParams(o);
|
|
108
108
|
}, m = (e) => {
|
|
109
|
-
const { apiKey: o, searchParams: r, thumbnailQuality:
|
|
109
|
+
const { apiKey: o, searchParams: r, thumbnailQuality: i = "high" } = e, l = (t = {}) => {
|
|
110
110
|
const a = "https://www.googleapis.com/youtube/v3/search", s = j(t);
|
|
111
111
|
return `${a}?${s}`;
|
|
112
|
-
},
|
|
113
|
-
var
|
|
114
|
-
return ((
|
|
112
|
+
}, u = (t) => {
|
|
113
|
+
var n, a, s;
|
|
114
|
+
return ((n = t[i]) == null ? void 0 : n.url) || ((a = t.high) == null ? void 0 : a.url) || ((s = t.medium) == null ? void 0 : s.url) || t.default.url;
|
|
115
115
|
}, d = (t) => {
|
|
116
|
-
const
|
|
116
|
+
const n = u(t.snippet.thumbnails);
|
|
117
117
|
return {
|
|
118
118
|
id: t.id.videoId,
|
|
119
119
|
src: `https://www.youtube.com/watch?v=${t.id.videoId}`,
|
|
120
120
|
name: t.snippet.title,
|
|
121
|
-
customData: { thumbnailUrl:
|
|
121
|
+
customData: { thumbnailUrl: n, videoItem: t }
|
|
122
122
|
};
|
|
123
123
|
};
|
|
124
124
|
return {
|
|
125
125
|
id: "youtube",
|
|
126
126
|
types: ["youtube-video"],
|
|
127
|
-
label:
|
|
127
|
+
label: ({ editor: t }) => t.I18n.t("youtubeAssetProvider.providerLabel"),
|
|
128
128
|
search: { reloadOnInput: !0, debounceMs: 1e3 },
|
|
129
|
-
async onLoad({ searchValue: t, pageCustomData:
|
|
129
|
+
async onLoad({ searchValue: t, pageCustomData: n }) {
|
|
130
130
|
var b;
|
|
131
131
|
const a = {
|
|
132
132
|
maxResults: 25,
|
|
133
133
|
q: t,
|
|
134
|
-
pageToken:
|
|
134
|
+
pageToken: n == null ? void 0 : n.token,
|
|
135
135
|
type: ["video"],
|
|
136
136
|
key: o
|
|
137
|
-
}, s = r == null ? void 0 : r({ searchValue: t }),
|
|
137
|
+
}, s = r == null ? void 0 : r({ searchValue: t }), c = {
|
|
138
138
|
...a,
|
|
139
139
|
...s
|
|
140
140
|
};
|
|
141
|
-
|
|
142
|
-
const p = await (await fetch(l(
|
|
141
|
+
c.part ? c.part.includes("snippet") || c.part.push("snippet") : c.part = ["snippet"];
|
|
142
|
+
const p = await (await fetch(l(c))).json();
|
|
143
143
|
return (b = p.items) != null && b.length ? {
|
|
144
144
|
items: p.items.map(d),
|
|
145
145
|
nextPageCustomData: { token: p.nextPageToken },
|
|
146
146
|
isLastPage: !p.nextPageToken
|
|
147
147
|
} : { items: [], isLastPage: !0 };
|
|
148
148
|
},
|
|
149
|
-
itemLayout: ({ assetProps: t, onSelect:
|
|
149
|
+
itemLayout: ({ assetProps: t, onSelect: n }) => ({
|
|
150
150
|
type: "column",
|
|
151
|
-
onClick: () =>
|
|
151
|
+
onClick: () => n(t),
|
|
152
152
|
htmlAttrs: {
|
|
153
153
|
title: t.name
|
|
154
154
|
},
|
|
@@ -180,26 +180,34 @@ const j = (e) => {
|
|
|
180
180
|
]
|
|
181
181
|
})
|
|
182
182
|
};
|
|
183
|
-
}, D =
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
183
|
+
}, D = {
|
|
184
|
+
youtubeAssetProvider: {
|
|
185
|
+
searchBtn: "Search on YouTube",
|
|
186
|
+
providerLabel: "YouTube Videos"
|
|
187
|
+
}
|
|
188
|
+
}, G = "youtubeAssetProvider", N = function(e, o) {
|
|
189
|
+
const { skipVideoComponent: r, i18n: i = {} } = o, l = m(o);
|
|
190
|
+
e.runCommand(h.assetProviderAdd, { provider: l });
|
|
191
|
+
const u = "search-on-youtube", d = "video";
|
|
187
192
|
if (!r) {
|
|
188
|
-
const
|
|
189
|
-
e.Components.addType(
|
|
193
|
+
const t = e.Components.getType(d).model.prototype;
|
|
194
|
+
e.Components.addType(d, {
|
|
190
195
|
model: {
|
|
191
196
|
getYoutubeTraits() {
|
|
192
|
-
const [
|
|
197
|
+
const [n, ...a] = t.getYoutubeTraits.apply(this);
|
|
193
198
|
return [
|
|
194
|
-
|
|
199
|
+
n,
|
|
195
200
|
{
|
|
196
|
-
id:
|
|
201
|
+
id: u,
|
|
197
202
|
type: "button",
|
|
198
|
-
label: e.I18n.t("
|
|
203
|
+
label: e.I18n.t("youtubeAssetProvider.searchBtn"),
|
|
199
204
|
command: () => {
|
|
200
205
|
e.AssetManager.open({
|
|
201
|
-
|
|
202
|
-
|
|
206
|
+
providerId: l.id,
|
|
207
|
+
providers: [],
|
|
208
|
+
types: [],
|
|
209
|
+
select: (s) => {
|
|
210
|
+
e.Assets.close(), this.set({ videoId: s.attributes.id });
|
|
203
211
|
},
|
|
204
212
|
content: {
|
|
205
213
|
header: {
|
|
@@ -210,31 +218,34 @@ const j = (e) => {
|
|
|
210
218
|
});
|
|
211
219
|
}
|
|
212
220
|
},
|
|
213
|
-
...
|
|
221
|
+
...a
|
|
214
222
|
];
|
|
215
223
|
}
|
|
216
224
|
}
|
|
217
225
|
});
|
|
218
226
|
}
|
|
219
|
-
|
|
227
|
+
e.I18n.addMessages({
|
|
228
|
+
en: D,
|
|
229
|
+
...i
|
|
230
|
+
}), B({
|
|
220
231
|
editor: e,
|
|
221
232
|
licenseKey: o.licenseKey,
|
|
222
233
|
plan: g.startup,
|
|
223
|
-
pluginName:
|
|
234
|
+
pluginName: G,
|
|
224
235
|
cleanup: () => {
|
|
225
|
-
if (e.runCommand(h.assetProviderRemove, { id:
|
|
226
|
-
const
|
|
227
|
-
e.Components.addType(
|
|
236
|
+
if (e.runCommand(h.assetProviderRemove, { id: l.id }), !r) {
|
|
237
|
+
const t = e.Components.getType(d).model.prototype;
|
|
238
|
+
e.Components.addType(d, {
|
|
228
239
|
model: {
|
|
229
240
|
getYoutubeTraits() {
|
|
230
|
-
return
|
|
241
|
+
return t.getYoutubeTraits.apply(this).filter((n) => n.id !== u);
|
|
231
242
|
}
|
|
232
243
|
}
|
|
233
244
|
});
|
|
234
245
|
}
|
|
235
246
|
}
|
|
236
247
|
});
|
|
237
|
-
},
|
|
248
|
+
}, Y = O(N);
|
|
238
249
|
export {
|
|
239
|
-
|
|
250
|
+
Y as default
|
|
240
251
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(u,b){typeof exports=="object"&&typeof module<"u"?module.exports=b(require("grapesjs")):typeof define=="function"&&define.amd?define(["grapesjs"],b):(u=typeof globalThis<"u"?globalThis:u||self,u.StudioSdkPlugins_youtubeAssetProvider=b())})(this,function(){"use strict";var u=(e=>(e.free="free",e.startup="startup",e.business="business",e.enterprise="enterprise",e))(u||{}),b=(e=>(e.toastAdd="studio:toastAdd",e.dialogOpen="studio:dialogOpen",e.dialogClose="studio:dialogClose",e.sidebarLeftSet="studio:sidebarLeft:set",e.sidebarLeftGet="studio:sidebarLeft:get",e.sidebarLeftToggle="studio:sidebarLeft:toggle",e.sidebarRightSet="studio:sidebarRight:set",e.sidebarRightGet="studio:sidebarRight:get",e.sidebarRightToggle="studio:sidebarRight:toggle",e.sidebarTopSet="studio:sidebarTop:set",e.sidebarTopGet="studio:sidebarTop:get",e.sidebarTopToggle="studio:sidebarTop:toggle",e.sidebarBottomSet="studio:sidebarBottom:set",e.sidebarBottomGet="studio:sidebarBottom:get",e.sidebarBottomToggle="studio:sidebarBottom:toggle",e.symbolAdd="studio:symbolAdd",e.symbolDetach="studio:symbolDetach",e.symbolOverride="studio:symbolOverride",e.symbolPropagateStyles="studio:propagateStyles",e.getPagesConfig="studio:getPagesConfig",e.setPagesConfig="studio:setPagesConfig",e.getPageSettings="studio:getPageSettings",e.setPageSettings="studio:setPageSettings",e.projectFiles="studio:projectFiles",e.canvasReload="studio:canvasReload",e.getBlocksPanel="studio:getBlocksPanel",e.setBlocksPanel="studio:setBlocksPanel",e.getStateContextMenu="studio:getStateContextMenu",e.setStateContextMenu="studio:setStateContextMenu",e.contextMenuComponent="studio:contextMenuComponent",e.layoutAdd="studio:layoutAdd",e.layoutRemove="studio:layoutRemove",e.layoutToggle="studio:layoutToggle",e.getStateTheme="studio:getStateTheme",e.setStateTheme="studio:setStateTheme",e.assetProviderGet="studio:assetProviderGet",e.assetProviderAdd="studio:assetProviderAdd",e.assetProviderRemove="studio:assetProviderRemove",e))(b||{});const y="app.grapesjs.com",f="app-stage.grapesjs.com",v=[y,f,"localhost","127.0.0.1",".local-credentialless.webcontainer.io",".local.webcontainer.io","-sandpack.codesandbox.io"],w="license:check:start",A="license:check:end",L=()=>typeof window<"u",k=({isDev:e,isStage:o})=>`${e?"":`https://${o?f:y}`}/api`,R=()=>{const e=L()&&window.location.hostname;return!!e&&(v.includes(e)||v.some(o=>e.endsWith(o)))};async function x({path:e,baseApiUrl:o,method:r="GET",headers:i={},params:l,body:d}){const t=`${o||k({isDev:!1,isStage:!1})}${e}`,n={method:r,headers:{"Content-Type":"application/json",...i}};d&&(n.body=JSON.stringify(d));const a=l?new URLSearchParams(l).toString():"",s=a?`?${a}`:"",c=await fetch(`${t}${s}`,n);if(!c.ok)throw new Error(`HTTP error! status: ${c.status}`);return c.json()}const T={[u.free]:0,[u.startup]:10,[u.business]:20,[u.enterprise]:30};function I(e){const o=e;return o.init=r=>i=>e(i,r),o}const U=e=>I(e);async function $({editor:e,plan:o,pluginName:r,licenseKey:i,cleanup:l}){let d="",p=!1;const t=R(),n=s=>{console.warn("Cleanup plugin:",r,"Reason:",s),l()},a=(s={})=>{var h;const{error:c,sdkLicense:P}=s,g=(h=s.plan)==null?void 0:h.category;if(!(P||s.license)||c)n(c||"Invalid license");else if(g){const D=T[o],G=T[g];D>G&&n({pluginRequiredPlan:o,licensePlan:g})}};e.on(w,s=>{d=s==null?void 0:s.baseApiUrl,p=!0}),e.on(A,s=>{a(s)}),setTimeout(async()=>{if(!p){if(t)return;if(i){const s=await j({licenseKey:i,pluginName:r,baseApiUrl:d});s&&a(s)}else n("The `licenseKey` option not provided")}},2e3)}async function j(e){const{licenseKey:o,pluginName:r,baseApiUrl:i}=e;try{return(await x({baseApiUrl:i,path:`/sdk/${o||"na"}`,method:"POST",params:{d:window.location.hostname,pn:r}})).result||{}}catch(l){return console.error("Error during SDK license check:",l),!1}}const M=e=>{const o={};for(const r of Object.keys(e)){let i=e[r];i&&(Array.isArray(i)?i=i.map(l=>l.toString()).join(","):i=i.toString(),o[r]=i)}return new URLSearchParams(o)},O=e=>{const{apiKey:o,searchParams:r,thumbnailQuality:i="high"}=e,l=(t={})=>{const a="https://www.googleapis.com/youtube/v3/search",s=M(t);return`${a}?${s}`},d=t=>{var n,a,s;return((n=t[i])==null?void 0:n.url)||((a=t.high)==null?void 0:a.url)||((s=t.medium)==null?void 0:s.url)||t.default.url},p=t=>{const n=d(t.snippet.thumbnails);return{id:t.id.videoId,src:`https://www.youtube.com/watch?v=${t.id.videoId}`,name:t.snippet.title,customData:{thumbnailUrl:n,videoItem:t}}};return{id:"youtube",types:["youtube-video"],label:({editor:t})=>t.I18n.t("youtubeAssetProvider.providerLabel"),search:{reloadOnInput:!0,debounceMs:1e3},async onLoad({searchValue:t,pageCustomData:n}){var h;const a={maxResults:25,q:t,pageToken:n==null?void 0:n.token,type:["video"],key:o},s=r==null?void 0:r({searchValue:t}),c={...a,...s};c.part?c.part.includes("snippet")||c.part.push("snippet"):c.part=["snippet"];const g=await(await fetch(l(c))).json();return(h=g.items)!=null&&h.length?{items:g.items.map(p),nextPageCustomData:{token:g.nextPageToken},isLastPage:!g.nextPageToken}:{items:[],isLastPage:!0}},itemLayout:({assetProps:t,onSelect:n})=>({type:"column",onClick:()=>n(t),htmlAttrs:{title:t.name},style:{border:"1px solid gray",borderRadius:8,overflow:"hidden",cursor:"pointer"},children:[{type:"custom",render:()=>{var a;return`<img src="${(a=t.customData)==null?void 0:a.thumbnailUrl}" alt="${t.name}" style="width: 100%; height: 100px; object-fit: cover">`}},{type:"text",content:t.name,style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",paddingLeft:8,paddingRight:8}}]})}},B={youtubeAssetProvider:{searchBtn:"Search on YouTube",providerLabel:"YouTube Videos"}},m="youtubeAssetProvider";return U(function(e,o){const{skipVideoComponent:r,i18n:i={}}=o,l=O(o);e.runCommand(b.assetProviderAdd,{provider:l});const d="search-on-youtube",p="video";if(!r){const t=e.Components.getType(p).model.prototype;e.Components.addType(p,{model:{getYoutubeTraits(){const[n,...a]=t.getYoutubeTraits.apply(this);return[n,{id:d,type:"button",label:e.I18n.t("youtubeAssetProvider.searchBtn"),command:()=>{e.AssetManager.open({providerId:l.id,providers:[],types:[],select:s=>{e.Assets.close(),this.set({videoId:s.attributes.id})},content:{header:{addUrl:!1,upload:!1}}})}},...a]}}})}e.I18n.addMessages({en:B,...i}),$({editor:e,licenseKey:o.licenseKey,plan:u.startup,pluginName:m,cleanup:()=>{if(e.runCommand(b.assetProviderRemove,{id:l.id}),!r){const t=e.Components.getType(p).model.prototype;e.Components.addType(p,{model:{getYoutubeTraits(){return t.getYoutubeTraits.apply(this).filter(n=>n.id!==d)}}})}}})})});
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Messages } from 'grapesjs';
|
|
1
2
|
import { SDKPluginOptions } from '../utils';
|
|
2
3
|
/**
|
|
3
4
|
* https://github.com/googleapis/google-api-nodejs-client/blob/f4848c7295f887ae311c93967ee4723e336f263c/src/apis/youtube/v3.ts#L11315
|
|
@@ -238,4 +239,5 @@ export interface YoutubeAssetProviderOptions extends SDKPluginOptions {
|
|
|
238
239
|
* @default false
|
|
239
240
|
*/
|
|
240
241
|
skipVideoComponent?: boolean;
|
|
242
|
+
i18n?: Messages;
|
|
241
243
|
}
|