local Luan = require "luan:Luan.luan" local error = Luan.error local pairs = Luan.pairs or error() local ipairs = Luan.ipairs or error() local String = require "luan:String.luan" local regex = String.regex or error() local to_number = String.to_number or error() local Table = require "luan:Table.luan" local sort = Table.sort or error() local copy = Table.copy or error() local Math = require "luan:Math.luan" local sqrt = Math.sqrt or error() local Html = require "luan:Html.luan" local url_encode = Html.url_encode or error() local Io = require "luan:Io.luan" local Http = require "luan:http/Http.luan" local get_data = require "site:/private/lib/get_data.luan" local Logging = require "luan:logging/Logging.luan" local logger = Logging.logger "colors.html" local is_production = Http.domain == "data.tleggings.com" local data = get_data(is_production) local products = data.products or error() local all_colors = data.colors or error() local base_url = is_production and "https://www.tleggings.com" or "http://test.tleggings.com" local color_regex = regex[[^#(..)(..)(..)$]] local color_param_regex = regex[[^(..)(..)(..)$]] do local t = {} for name, color in pairs(all_colors) do t[name] = copy(color) end all_colors = t end local color_list = {} for name, color in pairs(all_colors) do color.name = name color.products = {} if color.css == nil then continue end local r, g, b = color_regex.match(color.css) r = to_number(r,16) g = to_number(g,16) b = to_number(b,16) color.sort = r + g + b color_list[#color_list+1] = color end sort(color_list,function(c1,c2) return c1.sort > c2.sort end) for name, product in pairs(products) do product = copy(product) product.name = name if product.discontinued ~= true then for color, info in pairs(product.colors) do if info.discontinued~=true and info.pattern==nil then local p = all_colors[color].products p[#p+1] = product end end end end local function sqr(x) return x * x end return function() local function ok(r,g,b) return true end local color0 = Http.request.parameters.color if color0 ~= nil then local r, g, b = color_param_regex.match(color0) local r0 = to_number(r,16) or error() local g0 = to_number(g,16) or error() local b0 = to_number(b,16) or error() local distance = Http.request.parameters.distance or error() distance = to_number(distance) or error() function ok(r,g,b) return sqrt(sqr(r-r0)+sqr(g-g0)+sqr(b-b0)) <= distance end end local list = {} for _, color in ipairs(color_list) do local r, g, b = color_regex.match(color.css) r = to_number(r,16) g = to_number(g,16) b = to_number(b,16) if ok(r,g,b) then list[#list+1] = color end end Io.stdout = Http.response.text_writer() %> <% for _, color in ipairs(list) do %>
<%=color.title%> - <%=color.name%> <%=color.css%> <%=color.chinese%>
<% for _, product in ipairs(color.products) do %> <%=product.title%>
<% end %>
<% end %>

color in hex:

distance in dec:

<% end