Mercurial Hosting > freedit
comparison src/bbcode/bbcode.js @ 44:96f0c3d65698
add /bbcode
| author | Franklin Schmidt <fschmidt@gmail.com> |
|---|---|
| date | Thu, 10 Nov 2022 23:18:58 -0700 |
| parents | |
| children | 2d4f00755092 |
comparison
equal
deleted
inserted
replaced
| 43:298c71e0c854 | 44:96f0c3d65698 |
|---|---|
| 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 } |
