44
|
1 function fixTextarea(textarea) {
|
|
2 let height = textarea.scrollHeight;
|
|
3 if( height > textarea.clientHeight ) {
|
|
4 textarea.style.height = (height+2) + "px";
|
|
5 }
|
|
6 }
|
|
7
|
|
8 function fileButtonClick(button) {
|
|
9 button.parentNode.querySelector('input[type="file"]').click();
|
|
10 }
|
|
11
|
|
12 function upload(input,callback) {
|
|
13 let file = input.files[0];
|
|
14 input.value = null;
|
|
15 let request = new XMLHttpRequest();
|
|
16 let url = 'https://upload.uploadcare.com/base/';
|
|
17 request.open( 'POST', url );
|
|
18 request.onload = function() {
|
|
19 if( request.status !== 200 ) {
|
|
20 let err = 'ajax failed: ' + request.status;
|
|
21 if( request.responseText ) {
|
|
22 err += '\n' + request.responseText;
|
|
23 document.write('<pre>'+request.responseText+'</pre>');
|
|
24 }
|
|
25 console.log(err);
|
|
26 ajax( '/error_log.js', 'err='+encodeURIComponent(err) );
|
|
27 return;
|
|
28 }
|
|
29 let response = JSON.parse(request.responseText);
|
|
30 let filename = file.name;
|
|
31 let url = 'https://ucarecdn.com/' + response.file + '/' + filename;
|
|
32 callback(input,url,filename);
|
|
33 };
|
|
34 let formData = new FormData();
|
|
35 formData.append( 'UPLOADCARE_PUB_KEY', 'fe3d30f3088a50941d45' );
|
|
36 formData.append( 'file', file );
|
|
37 request.send(formData);
|
|
38 }
|
|
39
|
|
40 function getBbcodeDiv(node) {
|
|
41 do {
|
|
42 //console.log(node);
|
|
43 if( node.getAttribute('bbcode') !== null )
|
|
44 return node;
|
|
45 } while( node = node.parentNode );
|
|
46 }
|
|
47
|
|
48 function uploaded(input,url,filename) {
|
|
49 let div = getBbcodeDiv(input);
|
|
50 let textarea = div.querySelector('textarea');
|
|
51 textarea.focus();
|
|
52 textarea.setRangeText(url,textarea.selectionStart,textarea.selectionEnd,'select');
|
|
53 }
|
|
54
|
|
55 function bbcodeCreate(div,options) {
|
|
56 if( typeof(div) === 'string' )
|
|
57 div = document.querySelector(div);
|
|
58 let content = options.content || '';
|
|
59 let save = options.save;
|
|
60 let cancel = options.cancel;
|
|
61 let html = `\
|
|
62 <div bbcode>
|
|
63 <textarea oninput="fixTextarea(this)"></textarea>
|
|
64 <p>
|
|
65 <input type=file onchange="upload(this,uploaded)">
|
|
66 <button type=button onclick="fileButtonClick(this)">Upload File</button>
|
|
67 ` ;
|
|
68 if(save) {
|
|
69 html += `\
|
|
70 <button type=button save>save</button>
|
|
71 ` ;
|
|
72 }
|
|
73 if(cancel) {
|
|
74 html += `\
|
|
75 <button type=button cancel>cancel</button>
|
|
76 ` ;
|
|
77 }
|
|
78 html += `\
|
|
79 </p>
|
|
80 </div>
|
|
81 ` ;
|
|
82 div.innerHTML = html;
|
|
83 if(save)
|
|
84 div.querySelector('button[save]').addEventListener('click',save);
|
|
85 if(cancel)
|
|
86 div.querySelector('button[cancel]').addEventListener('click',cancel);
|
|
87 }
|