瀏覽代碼

fix icon loading list for tab editor

CauseFX 5 年之前
父節點
當前提交
aaab4df160
共有 3 個文件被更改,包括 63 次插入3 次删除
  1. 25 0
      api/classes/organizr.class.php
  2. 26 3
      api/pages/settings-tab-editor-tabs.php
  3. 12 0
      api/v2/routes/icon.php

+ 25 - 0
api/classes/organizr.class.php

@@ -6374,6 +6374,31 @@ class Organizr
 		
 	}
 	
+	public function getIcons()
+	{
+		$term = $_GET['search'] ?? null;
+		$page = $_GET['page'] ?? 1;
+		$limit = $_GET['limit'] ?? 20;
+		$offset = ($page * $limit) - $limit;
+		$goodIcons['results'] = [];
+		$goodIcons['limit'] = $limit;
+		$goodIcons['page'] = $page;
+		$allIcons = file_get_contents($this->root . '/js/icons.json');
+		$iconListing = json_decode($allIcons, true);
+		foreach ($iconListing as $setKey => $set) {
+			foreach ($set['children'] as $k => $v) {
+				if (stripos($v['text'], $term) !== false) {
+					$goodIcons['results'][] = $v;
+				}
+			}
+		}
+		$total = count($goodIcons['results']);
+		$goodIcons['total'] = $total;
+		$goodIcons['results'] = array_slice($goodIcons['results'], $offset, $limit);
+		$goodIcons['pagination']['more'] = $page < (ceil($total / $limit));
+		return $goodIcons;
+	}
+	
 	protected function processQueries(array $request, $migration = false)
 	{
 		$results = array();

+ 26 - 3
api/pages/settings-tab-editor-tabs.php

@@ -12,13 +12,36 @@ function get_page_settings_tab_editor_tabs($Organizr)
 		return false;
 	}
 	$pageSettingsTabEditorTabsPerformanceIcon = $Organizr->config['performanceDisableIconDropdown'] ? '' : '
-	allIcons().success(function(data) {
+
 	    $(".tabIconIconList").select2({
-			data: data,
+	        ajax: {
+			    url: \'api/v2/icon\',
+			    data: function (params) {
+					var query = {
+						search: params.term,
+						page: params.page || 1
+					}
+					return query;
+			    },
+				processResults: function (data, params) {
+					params.page = params.page || 1;
+					return {
+						results: data.response.data.results,
+						pagination: {
+							more: (params.page * 20) < data.response.data.total
+						}
+					};
+				},
+			    //cache: true
+			},
+			placeholder: \'Search for an icon\',
+			minimumInputLength: 1,
 			templateResult: formatIcon,
 			templateSelection: formatIcon,
+			allowClear: true
 		});
-	});
+	
+	
 	$(".tabIconImageList").select2({
 		templateResult: formatImage,
 		templateSelection: formatImage,

+ 12 - 0
api/v2/routes/icon.php

@@ -0,0 +1,12 @@
+<?php
+$app->get('/icon', function ($request, $response, $args) {
+	$Organizr = ($request->getAttribute('Organizr')) ?? new Organizr();
+	if ($Organizr->qualifyRequest(1, true)) {
+		$GLOBALS['api']['response']['data'] = $Organizr->getIcons();
+	}
+	$response->getBody()->write(jsonE($GLOBALS['api']));
+	return $response
+		->withHeader('Content-Type', 'application/json;charset=UTF-8')
+		->withStatus($GLOBALS['responseCode']);
+	
+});