]>
Commit | Line | Data |
---|---|---|
7adcb81e IB |
1 | var CkEditorImageBrowser = {};\r |
2 | \r | |
3 | CkEditorImageBrowser.folders = [];\r | |
4 | CkEditorImageBrowser.images = {}; //folder => list of images\r | |
5 | CkEditorImageBrowser.ckFunctionNum = null;\r | |
6 | \r | |
7 | CkEditorImageBrowser.$folderSwitcher = null;\r | |
8 | CkEditorImageBrowser.$imagesContainer = null;\r | |
9 | \r | |
10 | CkEditorImageBrowser.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 | |
31 | CkEditorImageBrowser.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 | |
62 | CkEditorImageBrowser.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 | |
74 | CkEditorImageBrowser.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 | |
97 | CkEditorImageBrowser.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 | |
114 | CkEditorImageBrowser.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 | |
131 | CkEditorImageBrowser.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 |