(function () { // Test for ace editor dependency. if (typeof ace === 'undefined') { console.error('You have to load Ace editor (https://ace.c9.io) before FiddleStick or use fiddlestick.js instead of fiddlestick-ace.js.'); return; } function init() { // Init fiddles mapping. var data = {}; document .querySelectorAll('[data-fiddlestick-id]') .forEach(function(e) { var fiddleId = e.getAttribute('data-fiddlestick-id'); var fiddleType = e.getAttribute('data-fiddlestick-type'); if (!data.hasOwnProperty(fiddleId)) { data[fiddleId] = {}; } if (!data[fiddleId].hasOwnProperty(fiddleType)) { data[fiddleId][fiddleType] = []; } if (fiddleType === 'render') { data[fiddleId].render = { 'element': e, 'type': fiddleType, 'id': fiddleId, }; } else { if (e.tagName.toLowerCase() === 'textarea') { editor = ace.edit(e); editor.setTheme("ace/theme/monokai"); var lang = fiddleType === 'js' ? 'javascript' : fiddleType; editor.getSession().setMode("ace/mode/"+lang); data[fiddleId][fiddleType].push({ 'editor': editor, 'type': fiddleType, 'id': fiddleId, }); editor.getSession().on('change', function(event) { for(var fiddleId in data) { if (data.hasOwnProperty(fiddleId)) { update(data[fiddleId]); } } }); } else { data[fiddleId][fiddleType].push({ 'element': e, 'type': fiddleType, 'id': fiddleId, }); e.addEventListener('keyup', function (event) { var fiddle = event.target || event.srcElement; update( data[fiddle.getAttribute('data-fiddlestick-id')] ); }); e.addEventListener('change', function (event) { var fiddle = event.target || event.srcElement; update( data[fiddle.getAttribute('data-fiddlestick-id')] ); }); } } }); for(var fiddleId in data) { if (data.hasOwnProperty(fiddleId)) { update(data[fiddleId]); } } } function update(fiddle) { var iframe = document.createElement('iframe'); var output = fiddle.render.element; output.innerHTML = ''; output.appendChild(iframe); var cssCode = getAllFromLang(fiddle.css); var jsCode = getAllFromLang(fiddle.js); var htmlCode = getAllFromLang(fiddle.html); var layout = '