{"version":3,"file":"cover_image.min.js","sources":["https:\/\/www.moodlemediterrani.com\/moodle\/theme\/snap\/amd\/src\/cover_image.js"],"sourcesContent":["\/**\n * This file is part of Moodle - http:\/\/moodle.org\/\n *\n * Moodle is free software: you can redistribute it and\/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * Moodle is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with Moodle. If not, see .\n *\n * @package\n * @copyright Copyright (c) 2015 Open LMS (https:\/\/www.openlms.net)\n * @license http:\/\/www.gnu.org\/copyleft\/gpl.html GNU GPL v3 or later\n *\/\n\ndefine(['jquery', 'core\/log', 'core\/ajax', 'core\/notification', 'theme_snap\/ajax_notification'],\n function($, log, ajax, notification, ajaxNotify) {\n\n \/\/ TODO - in Moodle 3.1 we should use the core template for this.\n var addCoverImageAlert = function(id, msg) {\n var closestr = M.util.get_string('closebuttontitle', 'moodle');\n if (!$(id).length) {\n $('#snap-coverimagecontrol').before(\n '' +\n msg +\n '
' +\n '×<\/span>' +\n '<\/button>' +\n '<\/div>'\n );\n }\n };\n\n \/**\n * Get human file size from bytes.\n * http:\/\/stackoverflow.com\/questions\/10420352\/converting-file-size-in-bytes-to-human-readable.\n * @param {int} size\n * @returns {string}\n *\/\n var humanFileSize = function(size) {\n var i = Math.floor(Math.log(size) \/ Math.log(1024));\n return (size \/ Math.pow(1024, i)).toFixed(2) * 1 + ' ' + ['B', 'kB', 'MB', 'GB', 'TB'][i];\n };\n\n \/**\n * First state - image selection button visible.\n *\/\n var state1 = function() {\n $('#snap-changecoverimageconfirmation .ok').removeClass('ajaxing');\n $('#snap-alert-cover-image-size').remove();\n $('#snap-alert-cover-image-bytes').remove();\n $('label[for=\"snap-coverfiles\"]').removeClass('ajaxing');\n $('#snap-changecoverimageconfirmation').removeClass('state-visible');\n $('label[for=\"snap-coverfiles\"]').addClass('state-visible');\n $('#snap-coverfiles').val('');\n };\n\n \/**\n * Second state - confirm \/ cancel buttons visible.\n *\/\n var state2 = function() {\n $('#snap-alert-cover-image-upload-failed').remove();\n $('#snap-changecoverimageconfirmation').removeClass('disabled');\n $('label[for=\"snap-coverfiles\"]').removeClass('state-visible');\n $('#snap-changecoverimageconfirmation').addClass('state-visible');\n $('body').removeClass('cover-image-change');\n };\n\n \/**\n *\n * @param {int} siteMaxBytes\n * @param {object} ajaxParams\n *\/\n var coverImage = function(siteMaxBytes, ajaxParams) {\n \/\/ Take a backup of what the current background image url is (if any).\n $('#page-header').data('servercoverfile', $('#page-header').css('background-image'));\n\n $('#changecoverimage').click(function(e) {\n e.preventDefault();\n $(this).removeClass('state-visible');\n $('label[for=\"snap-coverfiles\"]').addClass('state-visible');\n });\n\n var file,\n filedata;\n\n $('#snap-coverfiles').on('change', function(e) {\n $('body').addClass('cover-image-change');\n var files = e.target.files; \/\/ FileList object\n if (!files.length) {\n return;\n }\n\n file = files[0];\n\n \/\/ Only process image files.\n if (!file.type.match('image.*')) {\n return;\n }\n\n var reader = new FileReader();\n\n $('label[for=\"snap-coverfiles\"]').addClass('ajaxing');\n\n \/\/ Closure to capture the file information.\n reader.onload = (function(theFile) {\n return function(e) {\n\n \/\/ Set page header to use local version for now.\n filedata = e.target.result;\n\n \/\/ Ensure that the page-header in courses has the mast-image class.\n $('.path-course-view #page-header').addClass('mast-image');\n $('.path-course-view #page-header .breadcrumb-item a').addClass('mast-breadcrumb');\n\n \/\/ Warn if image file size exceeds max upload size.\n \/\/ Note: The site max bytes is intentional, as the person who can do the upload would be able to\n \/\/ override the course upload limit anyway.\n var maxbytes = siteMaxBytes;\n if (theFile.size > maxbytes) {\n \/\/ Go back to initial state and show warning about image file size.\n state1();\n var maxbytesstr = humanFileSize(maxbytes);\n var message = M.util.get_string('error:coverimageexceedsmaxbytes', 'theme_snap', maxbytesstr);\n addCoverImageAlert('snap-alert-cover-image-bytes', message);\n return;\n } else {\n $('#snap-alert-cover-image-bytes').remove();\n }\n\n \/\/ Warn if image resolution is too small.\n var img = $(' ');\n img = img.get(0);\n img.src = filedata;\n $(img).on('load', function() {\n if (img.width < 1024) {\n addCoverImageAlert('snap-alert-cover-image-size',\n M.util.get_string('error:coverimageresolutionlow', 'theme_snap')\n );\n } else {\n $('#snap-alert-cover-image-size').remove();\n }\n });\n\n $('#page-header').css('background-image', 'url(' + filedata + ')');\n $('#page-header').data('localcoverfile', theFile.name);\n\n state2();\n };\n })(file);\n\n \/\/ Read in the image file as a data URL.\n reader.readAsDataURL(file);\n\n });\n $('#snap-changecoverimageconfirmation .ok').click(function() {\n\n if ($(this).parent().hasClass('disabled')) {\n return;\n }\n\n $('#snap-alert-cover-image-size').remove();\n $('#snap-alert-cover-image-bytes').remove();\n\n $('#snap-changecoverimageconfirmation .ok').addClass('ajaxing');\n $('#snap-changecoverimageconfirmation').addClass('disabled');\n\n var imageData = filedata.split('base64,')[1];\n\n ajaxParams.imagedata = imageData;\n ajaxParams.imagefilename = file.name;\n\n ajax.call([\n {\n methodname: 'theme_snap_cover_image',\n args: {params: ajaxParams},\n done: function(response) {\n state1();\n if(response.contrast) {\n addCoverImageAlert('snap-alert-cover-image-size',\n response.contrast\n );\n }\n if (!response.success && response.warning) {\n addCoverImageAlert('snap-alert-cover-image-upload-failed', response.warning);\n }\n },\n fail: function(response) {\n state1();\n ajaxNotify.ifErrorShowBestMsg(response);\n }\n }\n ], true, true);\n });\n $('#snap-changecoverimageconfirmation .cancel').click(function() {\n\n if ($(this).parent().hasClass('disabled')) {\n return;\n }\n\n $('#page-header').css('background-image', $('#page-header').data('servercoverfile'));\n state1();\n });\n $('#snap-coverimagecontrol').addClass('snap-js-enabled');\n };\n\n var categoryCoverImage = function(categoryId, siteMaxBytes) {\n var ajaxParams = {imagefilename: null, imagedata: null, categoryid: categoryId,\n courseshortname: null};\n\n coverImage(siteMaxBytes, ajaxParams);\n };\n\n \/**\n * Main function\n * @param {string} courseShortName\n * @param {int} siteMaxBytes\n *\/\n var courseCoverImage = function(courseShortName, siteMaxBytes) {\n var ajaxParams = {imagefilename: null, imagedata: null, categoryid: null,\n courseshortname: courseShortName};\n\n coverImage(siteMaxBytes, ajaxParams);\n };\n return {courseImage: courseCoverImage, categoryImage: categoryCoverImage};\n }\n);\n"],"names":["define","$","log","ajax","notification","ajaxNotify","addCoverImageAlert","id","msg","closestr","M","util","get_string","length","before","state1","removeClass","remove","addClass","val","coverImage","siteMaxBytes","ajaxParams","file","filedata","data","css","click","e","preventDefault","this","on","files","target","type","match","theFile","reader","FileReader","onload","result","maxbytes","size","maxbytesstr","i","Math","floor","pow","toFixed","message","img","get","src","width","name","readAsDataURL","parent","hasClass","imageData","split","imagedata","imagefilename","call","methodname","args","params","done","response","contrast","success","warning","fail","ifErrorShowBestMsg","courseImage","courseShortName","categoryid","courseshortname","categoryImage","categoryId"],"mappings":"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"}