From 7adcb81e4f83f98c468889aaa5a85558ba88c770 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isma=C3=ABl=20Bouya?= Date: Mon, 25 Jan 2016 17:45:33 +0100 Subject: Initial commit --- sources/plugins/imagebrowser/browser/browser.js | 136 ++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 sources/plugins/imagebrowser/browser/browser.js (limited to 'sources/plugins/imagebrowser/browser/browser.js') diff --git a/sources/plugins/imagebrowser/browser/browser.js b/sources/plugins/imagebrowser/browser/browser.js new file mode 100644 index 00000000..5d52dbdd --- /dev/null +++ b/sources/plugins/imagebrowser/browser/browser.js @@ -0,0 +1,136 @@ +var CkEditorImageBrowser = {}; + +CkEditorImageBrowser.folders = []; +CkEditorImageBrowser.images = {}; //folder => list of images +CkEditorImageBrowser.ckFunctionNum = null; + +CkEditorImageBrowser.$folderSwitcher = null; +CkEditorImageBrowser.$imagesContainer = null; + +CkEditorImageBrowser.init = function () { + CkEditorImageBrowser.$folderSwitcher = $('#js-folder-switcher'); + CkEditorImageBrowser.$imagesContainer = $('#js-images-container'); + + var baseHref = CkEditorImageBrowser.getQueryStringParam("baseHref"); + if (baseHref) { + var h = (document.head || document.getElementsByTagName("head")[0]), + el = h.getElementsByTagName("link")[0]; + el.href = location.href.replace(/\/[^\/]*$/,"/browser.css"); + (h.getElementsByTagName("base")[0]).href = baseHref; + } + + CkEditorImageBrowser.ckFunctionNum = CkEditorImageBrowser.getQueryStringParam('CKEditorFuncNum'); + + CkEditorImageBrowser.initEventHandlers(); + + CkEditorImageBrowser.loadData(CkEditorImageBrowser.getQueryStringParam('listUrl'), function () { + CkEditorImageBrowser.initFolderSwitcher(); + }); +}; + +CkEditorImageBrowser.loadData = function (url, onLoaded) { + CkEditorImageBrowser.folders = []; + CkEditorImageBrowser.images = {}; + + $.getJSON(url, function (list) { + $.each(list, function (_idx, item) { + if (typeof(item.folder) === 'undefined') { + item.folder = 'Images'; + } + + if (typeof(item.thumb) === 'undefined') { + item.thumb = item.image; + } + + CkEditorImageBrowser.addImage(item.folder, item.image, item.thumb); + }); + + onLoaded(); + }).error(function(jqXHR, textStatus, errorThrown) { + var errorMessage; + if (jqXHR.status < 200 || jqXHR.status >= 400) { + errorMessage = 'HTTP Status: ' + jqXHR.status + '/' + jqXHR.statusText + ': "' + url + '"'; + } else if (textStatus === 'parsererror') { + errorMessage = textStatus + ': invalid JSON file: "' + url + '": ' + errorThrown.message; + } else { + errorMessage = textStatus + ' / ' + jqXHR.statusText + ' / ' + errorThrown.message; + } + CkEditorImageBrowser.$imagesContainer.html(errorMessage); + }); +}; + +CkEditorImageBrowser.addImage = function (folderName, imageUrl, thumbUrl) { + if (typeof(CkEditorImageBrowser.images[folderName]) === 'undefined') { + CkEditorImageBrowser.folders.push(folderName); + CkEditorImageBrowser.images[folderName] = []; + } + + CkEditorImageBrowser.images[folderName].push({ + "imageUrl": imageUrl, + "thumbUrl": thumbUrl + }); +}; + +CkEditorImageBrowser.initFolderSwitcher = function () { + var $switcher = CkEditorImageBrowser.$folderSwitcher; + + $switcher.find('li').remove(); + + $.each(CkEditorImageBrowser.folders, function (idx, folderName) { + var $option = $('
  • ').data('idx', idx).text(folderName); + $option.appendTo($switcher); + }); + + + if (CkEditorImageBrowser.folders.length === 0) { + $switcher.remove(); + CkEditorImageBrowser.$imagesContainer.text('No images.'); + } else { + if (CkEditorImageBrowser.folders.length === 1) { + $switcher.hide(); + } + + $switcher.find('li:first').click(); + } +}; + +CkEditorImageBrowser.renderImagesForFolder = function (folderName) { + var images = CkEditorImageBrowser.images[folderName], + templateHtml = $('#js-template-image').html(); + + CkEditorImageBrowser.$imagesContainer.html(''); + + $.each(images, function (_idx, imageData) { + var html = templateHtml; + html = html.replace('%imageUrl%', imageData.imageUrl); + html = html.replace('%thumbUrl%', imageData.thumbUrl); + + var $item = $($.parseHTML(html)); + + CkEditorImageBrowser.$imagesContainer.append($item); + }); +}; + +CkEditorImageBrowser.initEventHandlers = function () { + $(document).on('click', '#js-folder-switcher li', function () { + var idx = parseInt($(this).data('idx'), 10), + folderName = CkEditorImageBrowser.folders[idx]; + + $(this).siblings('li').removeClass('active'); + $(this).addClass('active'); + + CkEditorImageBrowser.renderImagesForFolder(folderName); + }); + + $(document).on('click', '.js-image-link', function () { + window.opener.CKEDITOR.tools.callFunction(CkEditorImageBrowser.ckFunctionNum, $(this).data('url')); + window.close(); + }); +}; + +CkEditorImageBrowser.getQueryStringParam = function (name) { + var regex = new RegExp('[?&]' + name + '=([^&]*)'), + result = window.location.search.match(regex); + + return (result && result.length > 1 ? decodeURIComponent(result[1]) : null); +}; -- cgit v1.2.3