From 93ad822b772d251f3c4c4d17f844277a15ee7b01 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 26 Jan 2024 16:28:18 -0500 Subject: [PATCH] Add color support --- netbox/project-static/dist/netbox.js | Bin 512140 -> 512377 bytes netbox/project-static/dist/netbox.js.map | Bin 424746 -> 424911 bytes netbox/project-static/src/netbox.ts | 4 +-- netbox/project-static/src/tomSelect.ts | 38 ++++++++++++++++++----- netbox/utilities/forms/widgets/select.py | 2 +- 5 files changed, 33 insertions(+), 11 deletions(-) diff --git a/netbox/project-static/dist/netbox.js b/netbox/project-static/dist/netbox.js index a2b8ee507666d408b6aff49048f111817696221b..4543f2e8d42d08ae14af2ab0fdb864b6dd977555 100644 GIT binary patch delta 4727 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 diff --git a/netbox/project-static/dist/netbox.js.map b/netbox/project-static/dist/netbox.js.map index 0d3feecedf79717fc2e4ea10a61d394eedc461dd..3effdf7d611929924f0d858dae23115194632000 100644 GIT binary patch delta 284 zcmZ4WP4fJA$%Yoj7N!>FEi4~y>K8d@IqCR2Iu<+W1UtHxIO!xhI_5g-I6Jy#IfKN* zb$lHiLv=hI9krcwES#sy-C_~r_cjEp%Ll8=ah|^M8H?KVm|H9@ys0|wj*j_GK>f}c zF4N!KVo{kcf1AaZ-!U))tR)+)C1bi`F`Mvo*(WTV^`1JBAPa!n0ztY8z^(x^{Xq5y z0-fa;43f@t0+HEZvvXWP&hppEb_R+#gT(zogttyO$i)b5wv%I^zAMO2W)OYOI^K@X Wj!?o`-`TCb@HWf#!rQDn=K}zfqE<5i delta 159 zcmX^AU2@eo$%Yoj7N!>FEi4~y>XkTWIqCR2Iu<+W1UtH>=_EQjYCGvTJGvJ*gM`C% zd>tJ_bv(hMMo!b^Z?TBUc~*e6pva{ diff --git a/netbox/project-static/src/netbox.ts b/netbox/project-static/src/netbox.ts index 45009682f..dc3d9e26b 100644 --- a/netbox/project-static/src/netbox.ts +++ b/netbox/project-static/src/netbox.ts @@ -2,7 +2,7 @@ import { initForms } from './forms'; import { initBootstrap } from './bs'; import { initQuickSearch } from './search'; // import { initSelect } from './select'; -import { initTomSelect } from './tomSelect'; +import { initSelects } from './tomSelect'; import { initButtons } from './buttons'; import { initColorMode } from './colorMode'; import { initMessages } from './messages'; @@ -24,7 +24,7 @@ function initDocument(): void { initForms, initQuickSearch, // initSelect, - initTomSelect, + initSelects, initDateSelector, initButtons, initClipboard, diff --git a/netbox/project-static/src/tomSelect.ts b/netbox/project-static/src/tomSelect.ts index f03464ac8..abda429f3 100644 --- a/netbox/project-static/src/tomSelect.ts +++ b/netbox/project-static/src/tomSelect.ts @@ -1,15 +1,18 @@ import { getElements } from './util'; +import { TomOption } from 'tom-select/src/types'; import TomSelect from 'tom-select'; -export function initTomSelect(): void { +function initStaticSelects(): void { - // Static selects - for (const select of getElements('select:not(.api-select)')) { + for (const select of getElements('select:not(.api-select):not(.color-select)')) { new TomSelect(select, {}); } - // API selects - for (const select of getElements('.api-select')) { +} + +function initDynamicSelects(): void { + + for (const select of getElements('select.api-select')) { const api_url = select.getAttribute('data-url') as string; new TomSelect(select, { valueField: 'id', @@ -19,9 +22,8 @@ export function initTomSelect(): void { dropdownParent: 'body', controlInput: '', preload: 'focus', - load: function(query, callback) { - var url = api_url + '?brief=True&q=' + encodeURIComponent(query); - console.log(url); + load: function(query: string, callback: Function) { + let url = api_url + '?brief=True&q=' + encodeURIComponent(query); fetch(url) .then(response => response.json()) .then(json => { @@ -34,3 +36,23 @@ export function initTomSelect(): void { } } + +function initColorSelects(): void { + + for (const select of getElements('select.color-select')) { + new TomSelect(select, { + render: { + option: function(item: TomOption, escape: Function) { + return `
${escape(item.text)}
`; + } + } + }); + } + +} + +export function initSelects(): void { + initStaticSelects(); + initDynamicSelects(); + initColorSelects(); +} diff --git a/netbox/utilities/forms/widgets/select.py b/netbox/utilities/forms/widgets/select.py index 33e6b2a2f..37443c056 100644 --- a/netbox/utilities/forms/widgets/select.py +++ b/netbox/utilities/forms/widgets/select.py @@ -36,7 +36,7 @@ class ColorSelect(forms.Select): def __init__(self, *args, **kwargs): kwargs['choices'] = add_blank_choice(ColorChoices) super().__init__(*args, **kwargs) - self.attrs['class'] = 'netbox-color-select' + self.attrs['class'] = 'color-select' class HTMXSelect(forms.Select):