Sindbad~EG File Manager
{"version":3,"file":"cover_image.min.js","sources":["../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 <http://www.gnu.org/licenses/>.\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, position = null) {\n if (position === \"dialogue\") {\n var alertPosition = '.snap_cover_image_description';\n } else {\n var alertPosition = '#snap-coverimagecontrol';\n }\n var closestr = M.util.get_string('closebuttontitle', 'moodle');\n if (!$(id).length) {\n $(alertPosition).before(\n '<div id=\"' + id + '\" class=\"snap-alert-cover-image alert alert-warning\" role=\"alert\">' +\n msg +\n '<button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-label=\"' + closestr + '\">' +\n '<span aria-hidden=\"true\">×</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 $('body').removeClass('cover-image-change');\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 * Moodle dialogue box.\n * @param {string} courseShortName\n * @param {int} categoryId\n * @param {object} fpoptions\n * @param {int} siteMaxBytes\n */\n var moodledialogue = function(courseShortName, categoryId, fpoptions, siteMaxBytes) {\n var maxbytesstr = humanFileSize(siteMaxBytes);\n let title = M.util.get_string('imageproperties', 'theme_snap');\n let coverImageDesc = M.util.get_string('coverimagedesc', 'theme_snap', maxbytesstr);\n let browseRepositories = M.util.get_string('browserepositories', 'theme_snap');\n let saveImage = M.util.get_string('saveimage', 'theme_snap');\n\n let content =\n '<div class=\"mb-1 snap_cover_image_dialogue\">' +\n '<p class=\"snap_cover_image_description\">' + coverImageDesc + '</p>' +\n '<div class=\"input-group input-append w-100 snap_cover_image_browser_options\">' +\n '<button class=\"btn btn-secondary snap_cover_image_browser\" id=\"id_snap_cover_image_browser\">' +\n browseRepositories + '</button>' +\n '</div>' +\n // Add the image preview.\n '<div class=\"mdl-align\">' +\n '<div class=\"snap_cover_image_preview_box\">' +\n '<img id=\"id_snap_cover_image_preview\" class=\"snap_cover_image_preview\" alt=\"\" style=\"display: none;\"/>' +\n '</div>' +\n '</div>' +\n // Add the save button.\n '<div class=\"snap_cover_image_save\">' +\n '<button class=\"btn btn-secondary snap_cover_image_save_button\" id=\"id_snap_cover_image_save_button\"' +\n 'disabled>' + saveImage + '</button>' +\n '</div>' +\n '</div>';\n\n var dialogue = new M.core.dialogue({\n headerContent: title,\n bodyContent: content,\n width: '600px',\n modal: true,\n visible: false,\n render: true,\n additionalBaseClass: 'snap_cover_image_dialogue',\n });\n dialogue.show();\n\n $('body').addClass('cover-image-change');\n $('label[for=\"snap-coverfiles\"]').addClass('ajaxing');\n\n $('#id_snap_cover_image_browser').click(function(e) {\n e.preventDefault();\n showFilepicker('image', fpoptions, filepickerCallback(courseShortName, categoryId));\n });\n $('#id_snap_cover_image_save_button').click(function() {\n dialogue.hide();\n });\n $('.snap_cover_image_dialogue .closebutton, .moodle-dialogue-lightbox').click(function() {\n state1();\n });\n dialogue.after(\"visibleChange\", function() {\n if ($('#snap-changecoverimageconfirmation .ok').hasClass('ajaxing')) {\n state2();\n }\n if (!dialogue.get('visible')) {\n dialogue.destroy(true);\n }\n });\n };\n\n /**\n * Load the image in the preview box.\n * @param {object} params\n * @param {string} courseShortName\n * @param {int} categoryId\n */\n var loadPreviewImage = function(params, courseShortName, categoryId) {\n\n var image = new Image();\n image.onerror = function() {\n var preview = document.getElementById('id_snap_cover_image_preview');\n preview.setAttribute('style', 'display:none');\n };\n\n image.onload = function() {\n var input;\n var imageWidth = this.width;\n input = document.getElementById('id_snap_cover_image_preview');\n input.setAttribute('src', params.url);\n input.setAttribute('style', 'display:inline');\n $('.snap_cover_image_save_button').prop(\"disabled\", false);\n\n // Warn if image resolution is too small.\n if (imageWidth < 1024) {\n $('#snap-alert-cover-image-size').remove();\n addCoverImageAlert('snap-alert-cover-image-size',\n M.util.get_string('error:coverimageresolutionlow', 'theme_snap'),\n 'dialogue'\n );\n } else {\n $('#snap-alert-cover-image-size').remove();\n }\n\n $('#id_snap_cover_image_save_button').click(function() {\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 $('#page-header').css('background-image', 'url(' + params.url + ')');\n\n state2();\n saveImage(params, courseShortName, categoryId);\n });\n\n };\n image.src = params.url;\n };\n\n\n /**\n * Callback for file picker.\n * @param {string} courseShortName\n * @param {int} categoryId\n */\n var filepickerCallback = function(courseShortName, categoryId) {\n return function(params) {\n if (params.url !== '') {\n // Load the preview image.\n loadPreviewImage(params, courseShortName, categoryId);\n }\n };\n };\n\n /**\n * Create file picker.\n * @param {string} type\n * @param {object} fpoptions\n * @param {Function} callback\n */\n var showFilepicker = function(type, fpoptions, callback) {\n Y.use('core_filepicker', function(Y) {\n var options = fpoptions;\n options.formcallback = callback;\n M.core_filepicker.show(Y, options);\n });\n };\n\n /**\n * Save image after confirmation.\n * @param {object} params\n * @param {string} courseShortName\n * @param {int} categoryId\n */\n var saveImage = function(params, courseShortName, categoryId) {\n\n $('#snap-changecoverimageconfirmation .ok').click(function() {\n var ajaxParams = {};\n\n if (categoryId !== null) {\n ajaxParams.categoryid = categoryId;\n } else if (courseShortName !== null) {\n ajaxParams.courseshortname = courseShortName;\n } else {\n return;\n }\n\n if (params.id !== undefined) {\n ajaxParams.fileid = params.id;\n } else {\n var fileNameWithoutSpaces = params.file.replace(/ .*/, \"\");\n var regex = new RegExp(\"draft\\\\/(\\\\d+)\\\\/\" + fileNameWithoutSpaces, \"g\");\n var urlId = params.url.match(regex);\n ajaxParams.fileid = urlId[0].match(/\\d+/)[0];\n }\n\n ajaxParams.imagefilename = params.file;\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 $('#snap-changecoverimageconfirmation .ok').off(\"click\");\n },\n fail: function(response) {\n state1();\n ajaxNotify.ifErrorShowBestMsg(response);\n }\n }\n ], true, true);\n });\n\n $('#snap-changecoverimageconfirmation .cancel').click(function() {\n\n if ($(this).parent().hasClass('disabled')) {\n return;\n }\n $('#page-header').css('background-image', $('#page-header').data('servercoverfile'));\n $('.path-course-view #page-header').removeClass('mast-image');\n state1();\n });\n };\n\n /**\n *\n * @param {object} ajaxParams\n * @param {string} courseShortName\n * @param {int} categoryId\n * @param {int} siteMaxBytes\n */\n var coverImage = function(ajaxParams, courseShortName = null, categoryId = null, siteMaxBytes) {\n\n if (courseShortName === null && categoryId === null) {\n return;\n }\n\n ajax.call([\n {\n methodname: 'theme_snap_file_manager_options',\n args: [],\n done: function(data) {\n var fpoptions = JSON.parse(data.fpoptions);\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 $('#snap-coverimagecontrol').addClass('snap-js-enabled');\n $('#snap-coverfiles').click(function() {\n moodledialogue(courseShortName, categoryId, fpoptions, siteMaxBytes);\n });\n },\n fail: function() {\n return;\n }\n }\n ], true, true);\n };\n\n /**\n * @param {int} categoryId\n * @param {int} siteMaxBytes\n */\n var categoryCoverImage = function(categoryId, siteMaxBytes) {\n var ajaxParams = {imagefilename: null, imagedata: null, categoryid: categoryId,\n courseshortname: null};\n coverImage(ajaxParams, null, categoryId, siteMaxBytes);\n };\n\n /**\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(ajaxParams, courseShortName, null, siteMaxBytes);\n };\n return {courseImage: courseCoverImage, categoryImage: categoryCoverImage};\n }\n);\n"],"names":["define","$","log","ajax","notification","ajaxNotify","addCoverImageAlert","id","msg","position","alertPosition","closestr","M","util","get_string","length","before","state1","removeClass","remove","addClass","val","state2","moodledialogue","courseShortName","categoryId","fpoptions","siteMaxBytes","size","i","maxbytesstr","Math","floor","pow","toFixed","title","content","dialogue","core","headerContent","bodyContent","width","modal","visible","render","additionalBaseClass","show","click","e","preventDefault","showFilepicker","filepickerCallback","hide","after","hasClass","get","destroy","params","url","image","Image","onerror","document","getElementById","setAttribute","onload","input","imageWidth","this","prop","css","saveImage","src","loadPreviewImage","type","callback","Y","use","options","formcallback","core_filepicker","ajaxParams","categoryid","courseshortname","undefined","fileid","fileNameWithoutSpaces","file","replace","regex","RegExp","urlId","match","imagefilename","call","methodname","args","done","response","contrast","success","warning","off","fail","ifErrorShowBestMsg","parent","data","coverImage","JSON","parse","courseImage","imagedata","categoryImage"],"mappings":"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"}
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists