/* * wpaint.js - wPaint integration javascript * https://github.com/vichan-devel/Tinyboard/blob/master/js/wpaint.js * * Released under the MIT license * Copyright (c) 2014 Marcin Łabanowski * * Contains parts of old oekaki code: * Copyright (c) 2013 copypaste * Copyright (c) 2013-2014 Marcin Łabanowski * * Usage: * $config['additional_javascript'][] = 'js/jquery.min.js'; * $config['additional_javascript'][] = 'js/jquery-ui.custom.min.js'; * $config['additional_javascript'][] = 'js/ajax.js'; * $config['additional_javascript'][] = 'js/wPaint/lib/wColorPicker.min.js'; * $config['additional_javascript'][] = 'js/wPaint/wPaint.min.js'; * $config['additional_javascript'][] = 'js/wPaint/plugins/main/wPaint.menu.main.min.js'; * $config['additional_javascript'][] = 'js/wPaint/plugins/text/wPaint.menu.text.min.js'; * $config['additional_javascript'][] = 'js/wPaint/plugins/shapes/wPaint.menu.main.shapes.min.js'; * $config['additional_javascript'][] = 'js/wPaint/plugins/file/wPaint.menu.main.file.min.js'; * $config['additional_javascript'][] = 'js/wpaint.js'; * $config['additional_javascript'][] = 'js/upload-selection.js'; * */ window.oekaki = (function(){ "use strict"; var oekaki = {}; oekaki.settings = new script_settings('wpaint'); oekaki.height = oekaki.settings.get("height", 250); oekaki.width = oekaki.settings.get("width", 500); function dataURItoBlob(dataURI) { var binary = atob(dataURI.split(',')[1]); var array = new Array(binary.length); for(var i = 0; i < binary.length; i++) { array[i] = binary.charCodeAt(i); } return new Blob([new Uint8Array(array)], {type: 'image/jpeg'}); } oekaki.do_css = function() { } oekaki.init = function() { var oekaki_form = '
'; // Add oekaki after the file input $('.oekaki-applet').html(oekaki_form); $('').appendTo($("head")); $('').appendTo($("head")); $('').appendTo($("head")); $('').appendTo($("head")); $('').appendTo($("head")); var initcount = 0; $('.wpaintcss').one('load', function() { initcount++; if (initcount == 5) { $.extend($.fn.wPaint.defaults, { mode: 'pencil', // set mode lineWidth: '1', // starting line width fillStyle: '#FFFFFF', // starting fill style strokeStyle: '#000000', // start stroke style }); delete $.fn.wPaint.menus.main.items.save; $('#wpaintdiv').wPaint({ path: configRoot+'js/wPaint/', menuOffsetTop: -46, bg: "#ffffff", loadImgFg: oekaki.load_img, loadImgBg: oekaki.load_img }); $("#wpaintctr").resizable({ stop: function(event,ui) { $("#wpaintdiv").wPaint("resize"); }, alsoResize: "#wpaintdiv", }); $('#wpaintctr .ui-resizable-se').css({'height':'12px', 'width':'12px'}); } }); $("#wpaintdiv").width(oekaki.width).height(oekaki.height).css("position", "relative"); $("#wpaintctr").width(oekaki.width+5).height(oekaki.height+5).css("padding-top", 48).css("position", "relative"); $(document).on("ajax_before_post.wpaint", function(e, postData) { var blob = $('#wpaintdiv').wPaint("image"); blob = dataURItoBlob(blob); postData.append("file", blob, "Oekaki.png"); }); $(window).on('stylesheet', function() { oekaki.do_css(); if ($('link#stylesheet').attr('href')) { $('link#stylesheet')[0].onload = oekaki.do_css; } }); oekaki.initialized = true; }; oekaki.load_img = function() { alert(_("Click on any image on this site to load it into oekaki applet")); $('img').one('click.loadimg', function(e) { $('img').off('click.loadimg'); e.stopImmediatePropagation(); e.preventDefault(); var url = $(this).prop('src'); $('#wpaintdiv').wPaint('setBg', url); return false; }); }; oekaki.deinit = function() { $('.oekaki-applet').empty(); $('.wpaintcss').remove(); $(document).off("ajax_before_post.wpaint"); oekaki.initialized = false; }; oekaki.initialized = false; return oekaki; })();