PluginProbe ʕ •ᴥ•ʔ
LiteSpeed Cache / 7.8.1
LiteSpeed Cache v7.8.1
trunk 1.0.15 1.9.1.1 2.9.9.2 3.6.4 4.6 5.7.0.1 6.5.4 7.0.0.1 7.0.1 7.1 7.2 7.3 7.3.0.1 7.4 7.5 7.5.0.1 7.6 7.6.1 7.6.2 7.7 7.8 7.8.0.1 7.8.1
litespeed-cache / assets / js / component.cdn.js
litespeed-cache / assets / js Last commit date
babel.min.js 2 months ago component.cdn.js 2 months ago component.crawler.js 2 months ago css_async.js 2 months ago css_async.min.js 2 months ago guest.docref.js 2 months ago guest.docref.min.js 2 months ago guest.js 2 months ago guest.min.js 2 months ago instant_click.min.js 2 months ago instant_click.ori.js 2 months ago iziModal.min.js 2 months ago js_delay.js 2 months ago js_delay.min.js 2 months ago lazyload.init.js 2 months ago lazyload.lib.js 2 months ago lazyload.min.js 2 months ago litespeed-cache-admin.js 2 months ago react.min.js 2 months ago webfontloader.js 2 months ago webfontloader.min.js 2 months ago
component.cdn.js
171 lines
1 /**
2 * CDN module
3 * @author Hai Zheng
4 */
5 class CDNMapping extends React.Component {
6 constructor(props) {
7 super(props);
8 this.state = {
9 list: props.list,
10 };
11
12 this.onChange = this.onChange.bind(this);
13 this.delRow = this.delRow.bind(this);
14 this.addNew = this.addNew.bind(this);
15 }
16
17 onChange(e, index) {
18 const target = e.currentTarget;
19 const value = target.dataset.hasOwnProperty('value') ? Boolean(target.dataset.value * 1) : target.value;
20 const list = this.state.list;
21 list[index][target.dataset.type] = value;
22
23 this.setState({
24 list: list,
25 });
26 }
27
28 delRow(index) {
29 const data = this.state.list;
30 data.splice(index, 1);
31 this.setState({ list: data });
32 }
33
34 addNew() {
35 const list = this.state.list;
36 list.push({ url: '' });
37 this.setState({ list: list });
38 }
39
40 render() {
41 return (
42 <React.Fragment>
43 {this.state.list.map((item, i) => (
44 <CDNMappingBlock item={item} key={i} index={i} onChange={this.onChange} delRow={this.delRow} />
45 ))}
46
47 <p>
48 <button type="button" className="button button-link litespeed-form-action litespeed-link-with-icon" onClick={this.addNew}>
49 <span className="dashicons dashicons-plus-alt"></span>
50 {litespeed_data['lang']['add_cdn_mapping_row']}
51 </button>
52 </p>
53 </React.Fragment>
54 );
55 }
56 }
57
58 // { url: '', inc_img: true, inc_css: false, inc_js: false, filetype: [ '.aac', '.eot', ... ] }
59 class CDNMappingBlock extends React.Component {
60 constructor(props) {
61 super(props);
62
63 this.onChange = this.onChange.bind(this);
64 this.delRow = this.delRow.bind(this);
65 }
66
67 onChange(e) {
68 this.props.onChange(e, this.props.index);
69 }
70
71 delRow() {
72 this.props.delRow(this.props.index);
73 }
74
75 render() {
76 const name_prefix = litespeed_data['ids']['cdn_mapping'];
77
78 const item = this.props.item;
79
80 const filetype = item.filetype ? (Array.isArray(item.filetype) ? item.filetype.join('\n') : item.filetype) : '';
81 return (
82 <div className="litespeed-block">
83 <div className="litespeed-cdn-mapping-col1">
84 <label className="litespeed-form-label">{litespeed_data['lang']['cdn_mapping_url']}</label>
85 <input
86 type="text"
87 name={name_prefix + '[url][]'}
88 className="regular-text litespeed-input-long"
89 value={item.url ? item.url : ''}
90 data-type="url"
91 onChange={this.onChange}
92 />
93
94 <div className="litespeed-desc">
95 <span dangerouslySetInnerHTML={{ __html: litespeed_data['lang']['cdn_mapping_url_desc'] }} />
96 </div>
97 </div>
98
99 <div className="litespeed-col-auto litespeed-cdn-mapping-col2">
100 <div className="litespeed-row litespeed-toggle-wrapper">
101 <div className="litespeed-cdn-mapping-inc litespeed-form-label litespeed-form-label--toggle">{litespeed_data['lang']['cdn_mapping_inc_img']}</div>
102 <div
103 className={`litespeed-toggle litespeed-toggle-btn litespeed-toggle-btn-${item.inc_img ? 'primary' : 'default litespeed-toggleoff'}`}
104 data-type="inc_img"
105 data-value={item.inc_img ? 0 : 1}
106 onClick={this.onChange}
107 >
108 <input name={name_prefix + '[inc_img][]'} type="hidden" value={item.inc_img ? 1 : 0} />
109 <div className="litespeed-toggle-group">
110 <label className="litespeed-toggle-btn litespeed-toggle-btn-primary litespeed-toggle-on">{litespeed_data['lang']['on']}</label>
111 <label className="litespeed-toggle-btn litespeed-toggle-btn-default litespeed-toggle-active litespeed-toggle-off">
112 {litespeed_data['lang']['off']}
113 </label>
114 <span className="litespeed-toggle-handle litespeed-toggle-btn litespeed-toggle-btn-default"></span>
115 </div>
116 </div>
117 </div>
118 <div className="litespeed-row litespeed-toggle-wrapper">
119 <div className="litespeed-cdn-mapping-inc litespeed-form-label litespeed-form-label--toggle">{litespeed_data['lang']['cdn_mapping_inc_css']}</div>
120 <div
121 className={`litespeed-toggle litespeed-toggle-btn litespeed-toggle-btn-${item.inc_css ? 'primary' : 'default litespeed-toggleoff'}`}
122 data-type="inc_css"
123 data-value={item.inc_css ? 0 : 1}
124 onClick={this.onChange}
125 >
126 <input name={name_prefix + '[inc_css][]'} type="hidden" value={item.inc_css ? 1 : 0} />
127 <div className="litespeed-toggle-group">
128 <label className="litespeed-toggle-btn litespeed-toggle-btn-primary litespeed-toggle-on">{litespeed_data['lang']['on']}</label>
129 <label className="litespeed-toggle-btn litespeed-toggle-btn-default litespeed-toggle-active litespeed-toggle-off">
130 {litespeed_data['lang']['off']}
131 </label>
132 <span className="litespeed-toggle-handle litespeed-toggle-btn litespeed-toggle-btn-default"></span>
133 </div>
134 </div>
135 </div>
136 <div className="litespeed-row litespeed-toggle-wrapper">
137 <div className="litespeed-cdn-mapping-inc litespeed-form-label litespeed-form-label--toggle">{litespeed_data['lang']['cdn_mapping_inc_js']}</div>
138 <div
139 className={`litespeed-toggle litespeed-toggle-btn litespeed-toggle-btn-${item.inc_js ? 'primary' : 'default litespeed-toggleoff'}`}
140 data-type="inc_js"
141 data-value={item.inc_js ? 0 : 1}
142 onClick={this.onChange}
143 >
144 <input name={name_prefix + '[inc_js][]'} type="hidden" value={item.inc_js ? 1 : 0} />
145 <div className="litespeed-toggle-group">
146 <label className="litespeed-toggle-btn litespeed-toggle-btn-primary litespeed-toggle-on">{litespeed_data['lang']['on']}</label>
147 <label className="litespeed-toggle-btn litespeed-toggle-btn-default litespeed-toggle-active litespeed-toggle-off">
148 {litespeed_data['lang']['off']}
149 </label>
150 <span className="litespeed-toggle-handle litespeed-toggle-btn litespeed-toggle-btn-default"></span>
151 </div>
152 </div>
153 </div>
154 </div>
155
156 <div className="litespeed-col-auto">
157 <label className="litespeed-form-label">{litespeed_data['lang']['cdn_mapping_filetype']}</label>
158 <textarea name={name_prefix + '[filetype][]'} rows={filetype.split('\n').length + 2} cols="18" value={filetype} data-type="filetype" onChange={this.onChange} />
159 </div>
160
161 <div className="litespeed-col-auto">
162 <button type="button" className="button button-link litespeed-collection-button litespeed-danger" onClick={this.delRow}>
163 <span className="dashicons dashicons-dismiss"></span>
164 <span className="screen-reader-text">{litespeed_data['lang']['cdn_mapping_remove']}</span>
165 </button>
166 </div>
167 </div>
168 );
169 }
170 }
171