DEV: Don't use js.erb for constants

Adds a new rake task to auto generate a constants.js file with the
constants present. This makes migrating to Ember CLI easier, but also
slightly speeds up asset compilation by having to do less work.

If the constants change you need to run:
`rake javascripts:update_constants`
This commit is contained in:
Robin Ward
2020-05-08 13:25:25 -04:00
parent dae29afd7d
commit 7f373e8b93
7 changed files with 36 additions and 9 deletions

View File

@ -1 +0,0 @@
export const searchPriorities = <%= Searchable::PRIORITIES.to_json %>;

View File

@ -2,7 +2,7 @@ import discourseComputed from "discourse-common/utils/decorators";
import { empty, and } from "@ember/object/computed"; import { empty, and } from "@ember/object/computed";
import { setting } from "discourse/lib/computed"; import { setting } from "discourse/lib/computed";
import { buildCategoryPanel } from "discourse/components/edit-category-panel"; import { buildCategoryPanel } from "discourse/components/edit-category-panel";
import { searchPriorities } from "discourse/components/concerns/category-search-priorities"; import { SearchPriorities } from "discourse/lib/constants";
import Group from "discourse/models/group"; import Group from "discourse/models/group";
const categorySortCriteria = []; const categorySortCriteria = [];
@ -71,7 +71,7 @@ export default buildCategoryPanel("settings", {
searchPrioritiesOptions() { searchPrioritiesOptions() {
const options = []; const options = [];
Object.entries(searchPriorities).forEach(entry => { Object.entries(SearchPriorities).forEach(entry => {
const [name, value] = entry; const [name, value] = entry;
options.push({ options.push({

View File

@ -1 +0,0 @@
export const PHRASE_MATCH_REGEXP_PATTERN = '<%= Search::PHRASE_MATCH_REGEXP_PATTERN %>';

View File

@ -0,0 +1,13 @@
// DO NOT EDIT THIS FILE!!!
// Update it by running `rake javascript:update_constants`
export const SearchPriorities = {
ignore: 1,
very_low: 2,
low: 3,
normal: 0,
high: 4,
very_high: 5
};
export const SearchPhraseRegexp = '"([^"]+)"';

View File

@ -1,4 +1,4 @@
import { PHRASE_MATCH_REGEXP_PATTERN } from "discourse/lib/concerns/search-constants"; import { SearchPhraseRegexp } from "discourse/lib/constants";
import highlightHTML from "discourse/lib/highlight-html"; import highlightHTML from "discourse/lib/highlight-html";
export const CLASS_NAME = "search-highlight"; export const CLASS_NAME = "search-highlight";
@ -7,7 +7,7 @@ export default function(elem, term, opts = {}) {
if (!_.isEmpty(term)) { if (!_.isEmpty(term)) {
// special case ignore "l" which is used for magic sorting // special case ignore "l" which is used for magic sorting
let words = _.reject( let words = _.reject(
term.match(new RegExp(`${PHRASE_MATCH_REGEXP_PATTERN}|[^\\s]+`, "g")), term.match(new RegExp(`${SearchPhraseRegexp}|[^\\s]+`, "g")),
t => t === "l" t => t === "l"
); );

View File

@ -8,7 +8,7 @@ import { defaultHomepage } from "discourse/lib/utilities";
import TopicList from "discourse/models/topic-list"; import TopicList from "discourse/models/topic-list";
import { ajax } from "discourse/lib/ajax"; import { ajax } from "discourse/lib/ajax";
import PreloadStore from "discourse/lib/preload-store"; import PreloadStore from "discourse/lib/preload-store";
import { searchPriorities } from "discourse/components/concerns/category-search-priorities"; import { SearchPriorities } from "discourse/lib/constants";
import { hash } from "rsvp"; import { hash } from "rsvp";
import Site from "discourse/models/site"; import Site from "discourse/models/site";
@ -145,7 +145,7 @@ export function openNewCategoryModal(context) {
allow_badges: true, allow_badges: true,
topic_featured_link_allowed: true, topic_featured_link_allowed: true,
custom_fields: {}, custom_fields: {},
search_priority: searchPriorities.normal search_priority: SearchPriorities.normal
}); });
showModal("edit-category", { model }).set("selectedTab", "general"); showModal("edit-category", { model }).set("selectedTab", "general");

View File

@ -12,8 +12,24 @@ def library_src
"#{Rails.root}/node_modules" "#{Rails.root}/node_modules"
end end
task 'javascript:update' do task 'javascript:update_constants' => :environment do
constants_js = <<~JS
// DO NOT EDIT THIS FILE!!!
// Update it by running `rake javascript:update_constants`
export const SearchPriorities = #{Searchable::PRIORITIES.to_json};
export const SearchPhraseRegexp = '#{Search::PHRASE_MATCH_REGEXP_PATTERN}';
JS
output_path = "#{Rails.root}/app/assets/javascripts/discourse/app/lib/constants.js"
File.write(output_path, constants_js)
puts "contants.js created"
%x{yarn run prettier --write #{output_path}}
puts "constants.js prettified"
end
task 'javascript:update' do
require 'uglifier' require 'uglifier'
yarn = system("yarn install") yarn = system("yarn install")