]> git.immae.eu Git - perso/Immae/Projets/packagist/connexionswing-ckeditor-component.git/blame - sources/plugins/imagebrowser/browser/browser.js
Initial commit
[perso/Immae/Projets/packagist/connexionswing-ckeditor-component.git] / sources / plugins / imagebrowser / browser / browser.js
CommitLineData
7adcb81e
IB
1var CkEditorImageBrowser = {};\r
2\r
3CkEditorImageBrowser.folders = [];\r
4CkEditorImageBrowser.images = {}; //folder => list of images\r
5CkEditorImageBrowser.ckFunctionNum = null;\r
6\r
7CkEditorImageBrowser.$folderSwitcher = null;\r
8CkEditorImageBrowser.$imagesContainer = null;\r
9\r
10CkEditorImageBrowser.init = function () {\r
11 CkEditorImageBrowser.$folderSwitcher = $('#js-folder-switcher');\r
12 CkEditorImageBrowser.$imagesContainer = $('#js-images-container');\r
13\r
14 var baseHref = CkEditorImageBrowser.getQueryStringParam("baseHref");\r
15 if (baseHref) {\r
16 var h = (document.head || document.getElementsByTagName("head")[0]),\r
17 el = h.getElementsByTagName("link")[0];\r
18 el.href = location.href.replace(/\/[^\/]*$/,"/browser.css");\r
19 (h.getElementsByTagName("base")[0]).href = baseHref;\r
20 }\r
21\r
22 CkEditorImageBrowser.ckFunctionNum = CkEditorImageBrowser.getQueryStringParam('CKEditorFuncNum');\r
23\r
24 CkEditorImageBrowser.initEventHandlers();\r
25\r
26 CkEditorImageBrowser.loadData(CkEditorImageBrowser.getQueryStringParam('listUrl'), function () {\r
27 CkEditorImageBrowser.initFolderSwitcher();\r
28 });\r
29};\r
30\r
31CkEditorImageBrowser.loadData = function (url, onLoaded) {\r
32 CkEditorImageBrowser.folders = [];\r
33 CkEditorImageBrowser.images = {};\r
34\r
35 $.getJSON(url, function (list) {\r
36 $.each(list, function (_idx, item) {\r
37 if (typeof(item.folder) === 'undefined') {\r
38 item.folder = 'Images';\r
39 }\r
40\r
41 if (typeof(item.thumb) === 'undefined') {\r
42 item.thumb = item.image;\r
43 }\r
44\r
45 CkEditorImageBrowser.addImage(item.folder, item.image, item.thumb);\r
46 });\r
47\r
48 onLoaded();\r
49 }).error(function(jqXHR, textStatus, errorThrown) {\r
50 var errorMessage;\r
51 if (jqXHR.status < 200 || jqXHR.status >= 400) {\r
52 errorMessage = 'HTTP Status: ' + jqXHR.status + '/' + jqXHR.statusText + ': "<strong style="color: red;">' + url + '</strong>"';\r
53 } else if (textStatus === 'parsererror') {\r
54 errorMessage = textStatus + ': invalid JSON file: "<strong style="color: red;">' + url + '</strong>": ' + errorThrown.message;\r
55 } else {\r
56 errorMessage = textStatus + ' / ' + jqXHR.statusText + ' / ' + errorThrown.message;\r
57 }\r
58 CkEditorImageBrowser.$imagesContainer.html(errorMessage);\r
59 });\r
60};\r
61\r
62CkEditorImageBrowser.addImage = function (folderName, imageUrl, thumbUrl) {\r
63 if (typeof(CkEditorImageBrowser.images[folderName]) === 'undefined') {\r
64 CkEditorImageBrowser.folders.push(folderName);\r
65 CkEditorImageBrowser.images[folderName] = [];\r
66 }\r
67\r
68 CkEditorImageBrowser.images[folderName].push({\r
69 "imageUrl": imageUrl,\r
70 "thumbUrl": thumbUrl\r
71 });\r
72};\r
73\r
74CkEditorImageBrowser.initFolderSwitcher = function () {\r
75 var $switcher = CkEditorImageBrowser.$folderSwitcher;\r
76\r
77 $switcher.find('li').remove();\r
78\r
79 $.each(CkEditorImageBrowser.folders, function (idx, folderName) {\r
80 var $option = $('<li></li>').data('idx', idx).text(folderName);\r
81 $option.appendTo($switcher);\r
82 });\r
83\r
84\r
85 if (CkEditorImageBrowser.folders.length === 0) {\r
86 $switcher.remove();\r
87 CkEditorImageBrowser.$imagesContainer.text('No images.');\r
88 } else {\r
89 if (CkEditorImageBrowser.folders.length === 1) {\r
90 $switcher.hide();\r
91 }\r
92\r
93 $switcher.find('li:first').click();\r
94 }\r
95};\r
96\r
97CkEditorImageBrowser.renderImagesForFolder = function (folderName) {\r
98 var images = CkEditorImageBrowser.images[folderName],\r
99 templateHtml = $('#js-template-image').html();\r
100\r
101 CkEditorImageBrowser.$imagesContainer.html('');\r
102\r
103 $.each(images, function (_idx, imageData) {\r
104 var html = templateHtml;\r
105 html = html.replace('%imageUrl%', imageData.imageUrl);\r
106 html = html.replace('%thumbUrl%', imageData.thumbUrl);\r
107\r
108 var $item = $($.parseHTML(html));\r
109\r
110 CkEditorImageBrowser.$imagesContainer.append($item);\r
111 });\r
112};\r
113\r
114CkEditorImageBrowser.initEventHandlers = function () {\r
115 $(document).on('click', '#js-folder-switcher li', function () {\r
116 var idx = parseInt($(this).data('idx'), 10),\r
117 folderName = CkEditorImageBrowser.folders[idx];\r
118\r
119 $(this).siblings('li').removeClass('active');\r
120 $(this).addClass('active');\r
121\r
122 CkEditorImageBrowser.renderImagesForFolder(folderName);\r
123 });\r
124\r
125 $(document).on('click', '.js-image-link', function () {\r
126 window.opener.CKEDITOR.tools.callFunction(CkEditorImageBrowser.ckFunctionNum, $(this).data('url'));\r
127 window.close();\r
128 });\r
129};\r
130\r
131CkEditorImageBrowser.getQueryStringParam = function (name) {\r
132 var regex = new RegExp('[?&]' + name + '=([^&]*)'),\r
133 result = window.location.search.match(regex);\r
134\r
135 return (result && result.length > 1 ? decodeURIComponent(result[1]) : null);\r
136};\r