diff --git a/Makefile b/Makefile index a83621bf2..10dcac47f 100644 --- a/Makefile +++ b/Makefile @@ -44,8 +44,6 @@ parts := \ )) \ main -lang = $(if $(filter globals css,$1),js,coffee) - # remove extension when sorting so X.coffee comes before X.Y.coffee sources_part = \ $(subst !c,.coffee,$(subst !j,.js,$(sort $(subst .coffee,!c,$(subst .js,!j, \ @@ -55,21 +53,30 @@ sources := $(foreach p,$(parts),$(call sources_part,$(p))) part_of = $(patsubst src/%/,%,$(dir $1)) -imports = \ - $(filter-out %.coffee %.js,$(wildcard src/$1/*.* src/$1/*/*.* src/$1/*/*/*.*)) \ - .tests_enabled \ - $(imports_$1) +uses_tests_enabled := \ + src/classes/Post.coffee \ + src/General/Build.Test.coffee \ + src/Linkification/Linkify.coffee \ + src/Miscellaneous/Keybinds.coffee \ + src/Monitoring/Unread.coffee \ + src/main/Main.coffee -imports_globals := \ +imports_src/globals/globals.js := \ version.json -imports_config := \ +imports_src/config/Config.coffee := \ src/Archive/archives.json -imports_css := \ +imports_src/css/CSS.js := \ tools/style.js \ node_modules/font-awesome/package.json -imports_Monitoring := \ +imports_src/Monitoring/Favicon.coffee := \ src/meta/icon128.png +imports = \ + $(filter-out %.coffee %.js,$(wildcard $(dir $1)*.*)) \ + $(wildcard $(basename $1)/*.*) \ + $(if $(filter $(uses_tests_enabled),$1),.tests_enabled) \ + $(imports_$1) + dests_platform = $(addprefix tmp/,$(subst /,-,$(subst src/,,$(subst platform,platform_$2,$(subst .coffee,.js,$1))))) dests_of = $(sort $(call dests_platform,$1,crx) $(call dests_platform,$1,userscript)) @@ -131,7 +138,7 @@ tmp/declaration.js : .events/declare $(if $(wildcard $@),,node tools/declare.js && echo -> $^) define force_compile -$$(call dests_of,$1) : $1 $$(call imports,$$(call part_of,$1)) $$(template_deps) $$(coffee_deps) tools/chain.js +$$(call dests_of,$1) : $1 $$(call imports,$1) $$(template_deps) $$(coffee_deps) tools/chain.js $(RM) $$(call QUOTE,$$@) endef diff --git a/src/Archive/Redirect.coffee b/src/Archive/Redirect.coffee index 233ac7ec3..95b329cb1 100644 --- a/src/Archive/Redirect.coffee +++ b/src/Archive/Redirect.coffee @@ -29,7 +29,7 @@ Redirect = archives: `<%= - JSON.stringify(readJSON('src/Archive/archives.json'), null, 2) + JSON.stringify(readJSON('archives.json'), null, 2) .replace(/\n {2,}(?!{)/g, ' ') .replace(/\n/g, '\n ') .replace(/`/g, '\\`') diff --git a/src/General/Build.Test.coffee b/src/General/Build.Test.coffee index 789575e5a..d7d0a13bc 100644 --- a/src/General/Build.Test.coffee +++ b/src/General/Build.Test.coffee @@ -1,4 +1,4 @@ -<% if (readJSON('.tests_enabled')) { %> +<% if (readJSON('/.tests_enabled')) { %> Build.Test = init: -> return if !Conf['Menu'] or g.VIEW not in ['index', 'thread'] diff --git a/src/General/Build.coffee b/src/General/Build.coffee index 8259c5cb3..901afa25c 100644 --- a/src/General/Build.coffee +++ b/src/General/Build.coffee @@ -115,7 +115,7 @@ Build = else "/#{boardID}/thread/#{threadID}#q#{postID}" - postInfo = <%= importHTML('General/Build/PostInfo') %> + postInfo = <%= readHTML('PostInfo.html') %> ### File Info ### @@ -125,13 +125,13 @@ Build = shortFilename = Build.shortFilename file.name fileThumb = if file.isSpoiler then Build.spoilerThumb(boardID) else file.thumbURL.replace(protocol, '') - fileBlock = <%= importHTML('General/Build/File') %> + fileBlock = <%= readHTML('File.html') %> ### Whole Post ### postClass = if o.isReply then 'reply' else 'op' - wholePost = <%= importHTML('General/Build/Post') %> + wholePost = <%= readHTML('Post.html') %> container = $.el 'div', className: "postContainer #{postClass}Container" @@ -221,7 +221,7 @@ Build = root = $.el 'div', className: 'catalog-thread' - $.extend root, <%= importHTML('General/Build/CatalogThread') %> + $.extend root, <%= readHTML('CatalogThread.html') %> root.dataset.fullID = thread.fullID $.addClass root, thread.OP.highlights... if thread.OP.highlights diff --git a/src/General/Index.coffee b/src/General/Index.coffee index da54baa0c..25687d0d6 100644 --- a/src/General/Index.coffee +++ b/src/General/Index.coffee @@ -63,7 +63,7 @@ Index = # Navigation links at top of index @navLinks = $.el 'div', className: 'navLinks json-index' - $.extend @navLinks, <%= importHTML('General/Index/NavLinks') %> + $.extend @navLinks, <%= readHTML('NavLinks.html') %> $('.cataloglink a', @navLinks).href = CatalogLinks.catalog() $('.archlistlink', @navLinks).hidden = true if g.BOARD.ID in ['b', 'trash'] $.on $('#index-last-refresh a', @navLinks), 'click', @cb.refreshFront @@ -96,7 +96,7 @@ Index = # Page list @pagelist = $.el 'div', className: 'pagelist json-index' - $.extend @pagelist, <%= importHTML('General/Index/PageList') %> + $.extend @pagelist, <%= readHTML('PageList.html') %> $('.cataloglink a', @pagelist).href = CatalogLinks.catalog() $.on @pagelist, 'click', @cb.pageNav diff --git a/src/General/Settings.coffee b/src/General/Settings.coffee index cb4d55911..d01367c05 100644 --- a/src/General/Settings.coffee +++ b/src/General/Settings.coffee @@ -38,7 +38,7 @@ Settings = Settings.dialog = dialog = $.el 'div', id: 'fourchanx-settings' className: 'dialog' - $.extend dialog, <%= importHTML('General/Settings/Settings') %> + $.extend dialog, <%= readHTML('Settings.html') %> Settings.overlay = overlay = $.el 'div', id: 'overlay' @@ -377,7 +377,7 @@ Settings = window.location.reload() filter: (section) -> - $.extend section, <%= importHTML('General/Settings/Filter-select') %> + $.extend section, <%= readHTML('Filter-select.html') %> select = $ 'select', section $.on select, 'change', Settings.selectFilter Settings.selectFilter.call select @@ -395,11 +395,11 @@ Settings = $.on ta, 'change', $.cb.value $.add div, ta return - $.extend div, <%= importHTML('General/Settings/Filter-guide') %> + $.extend div, <%= readHTML('Filter-guide.html') %> $('.warning', div).hidden = Conf['Filter'] sauce: (section) -> - $.extend section, <%= importHTML('General/Settings/Sauce') %> + $.extend section, <%= readHTML('Sauce.html') %> $('.warning', section).hidden = Conf['Sauce'] ta = $ 'textarea', section $.get 'sauces', Conf['sauces'], (item) -> @@ -407,7 +407,7 @@ Settings = $.on ta, 'change', $.cb.value advanced: (section) -> - $.extend section, <%= importHTML('General/Settings/Advanced') %> + $.extend section, <%= readHTML('Advanced.html') %> warning.hidden = Conf[warning.dataset.feature] for warning in $$ '.warning', section items = {} @@ -584,7 +584,7 @@ Settings = CustomCSS.update() keybinds: (section) -> - $.extend section, <%= importHTML('General/Settings/Keybinds') %> + $.extend section, <%= readHTML('Keybinds.html') %> $('.warning', section).hidden = Conf['Keybinds'] tbody = $ 'tbody', section diff --git a/src/Images/Gallery.coffee b/src/Images/Gallery.coffee index 3915f53f7..e5f8d7517 100644 --- a/src/Images/Gallery.coffee +++ b/src/Images/Gallery.coffee @@ -44,7 +44,7 @@ Gallery = nodes.el = dialog = $.el 'div', id: 'a-gallery' - $.extend dialog, <%= importHTML('Images/Gallery') %> + $.extend dialog, <%= readHTML('Gallery.html') %> nodes[key] = $ value, dialog for key, value of { buttons: '.gal-buttons' diff --git a/src/Images/Gallery.html b/src/Images/Gallery/Gallery.html similarity index 100% rename from src/Images/Gallery.html rename to src/Images/Gallery/Gallery.html diff --git a/src/Images/Sauce.coffee b/src/Images/Sauce.coffee index 4fa7d75aa..377206a05 100644 --- a/src/Images/Sauce.coffee +++ b/src/Images/Sauce.coffee @@ -19,7 +19,7 @@ Sauce = cb: @node sandbox: (url) -> - E.url <%= importHTML('Images/Sandbox') %> + E.url <%= readHTML('Sandbox.html') %> rmOrigin: (e) -> return if e.shiftKey or e.altKey or e.ctrlKey or e.metaKey or e.button isnt 0 diff --git a/src/Images/Sandbox.html b/src/Images/Sauce/Sandbox.html similarity index 100% rename from src/Images/Sandbox.html rename to src/Images/Sauce/Sandbox.html diff --git a/src/Linkification/Embedding.coffee b/src/Linkification/Embedding.coffee index c5f5126cf..fea9ecf6b 100644 --- a/src/Linkification/Embedding.coffee +++ b/src/Linkification/Embedding.coffee @@ -6,7 +6,7 @@ Embedding = if Conf['Floating Embeds'] @dialog = UI.dialog 'embedding', 'top: 50px; right: 0px;', - <%= importHTML('Linkification/Embed') %> + <%= readHTML('Embed.html') %> @media = $ '#media-embed', @dialog $.one d, '4chanXInitFinished', @ready diff --git a/src/Linkification/Embed.html b/src/Linkification/Embedding/Embed.html similarity index 100% rename from src/Linkification/Embed.html rename to src/Linkification/Embedding/Embed.html diff --git a/src/Linkification/Linkify.coffee b/src/Linkification/Linkify.coffee index 2f81a9593..fc0b29578 100644 --- a/src/Linkification/Linkify.coffee +++ b/src/Linkification/Linkify.coffee @@ -74,7 +74,7 @@ Linkify = if Linkify.regString.test word links.push Linkify.makeRange node, endNode, index, length - <%= assert('.tests_enabled', 'word is links[links.length-1].toString()') %> + <% if (readJSON('/.tests_enabled')) { %><%= assert('word is links[links.length-1].toString()') %><% } %> break unless test.lastIndex and node is endNode diff --git a/src/Miscellaneous/Banner.coffee b/src/Miscellaneous/Banner.coffee index 50a2ea594..89a879447 100644 --- a/src/Miscellaneous/Banner.coffee +++ b/src/Miscellaneous/Banner.coffee @@ -1,5 +1,5 @@ Banner = - banners: `<%= JSON.stringify(readJSON('src/Miscellaneous/banners.json')) %>` + banners: `<%= JSON.stringify(readJSON('banners.json')) %>` init: -> if Conf['Custom Board Titles'] diff --git a/src/Miscellaneous/banners.json b/src/Miscellaneous/Banner/banners.json similarity index 100% rename from src/Miscellaneous/banners.json rename to src/Miscellaneous/Banner/banners.json diff --git a/src/Miscellaneous/Keybinds.coffee b/src/Miscellaneous/Keybinds.coffee index c5db8ef23..48307366f 100644 --- a/src/Miscellaneous/Keybinds.coffee +++ b/src/Miscellaneous/Keybinds.coffee @@ -192,7 +192,7 @@ Keybinds = when Conf['Next Post Quoting You'] return unless threadRoot and QuoteYou.db QuoteYou.cb.seek 'following' - <% if (readJSON('.tests_enabled')) { %> + <% if (readJSON('/.tests_enabled')) { %> when 't' return unless threadRoot Build.Test.testAll() diff --git a/src/Monitoring/Favicon.coffee b/src/Monitoring/Favicon.coffee index fe3aa800b..0b5235b49 100644 --- a/src/Monitoring/Favicon.coffee +++ b/src/Monitoring/Favicon.coffee @@ -12,52 +12,52 @@ Favicon = switch: -> items = { ferongr: [ - '<%= readBase64("src/Monitoring/Favicon/ferongr/unreadDead.png") %>' - '<%= readBase64("src/Monitoring/Favicon/ferongr/unreadDeadY.png") %>' - '<%= readBase64("src/Monitoring/Favicon/ferongr/unreadSFW.png") %>' - '<%= readBase64("src/Monitoring/Favicon/ferongr/unreadSFWY.png") %>' - '<%= readBase64("src/Monitoring/Favicon/ferongr/unreadNSFW.png") %>' - '<%= readBase64("src/Monitoring/Favicon/ferongr/unreadNSFWY.png") %>' + '<%= readBase64('ferongr.unreadDead.png') %>' + '<%= readBase64('ferongr.unreadDeadY.png') %>' + '<%= readBase64('ferongr.unreadSFW.png') %>' + '<%= readBase64('ferongr.unreadSFWY.png') %>' + '<%= readBase64('ferongr.unreadNSFW.png') %>' + '<%= readBase64('ferongr.unreadNSFWY.png') %>' ] 'xat-': [ - '<%= readBase64("src/Monitoring/Favicon/xat-/unreadDead.png") %>' - '<%= readBase64("src/Monitoring/Favicon/xat-/unreadDeadY.png") %>' - '<%= readBase64("src/Monitoring/Favicon/xat-/unreadSFW.png") %>' - '<%= readBase64("src/Monitoring/Favicon/xat-/unreadSFWY.png") %>' - '<%= readBase64("src/Monitoring/Favicon/xat-/unreadNSFW.png") %>' - '<%= readBase64("src/Monitoring/Favicon/xat-/unreadNSFWY.png") %>' + '<%= readBase64('xat-.unreadDead.png') %>' + '<%= readBase64('xat-.unreadDeadY.png') %>' + '<%= readBase64('xat-.unreadSFW.png') %>' + '<%= readBase64('xat-.unreadSFWY.png') %>' + '<%= readBase64('xat-.unreadNSFW.png') %>' + '<%= readBase64('xat-.unreadNSFWY.png') %>' ] Mayhem: [ - '<%= readBase64("src/Monitoring/Favicon/Mayhem/unreadDead.png") %>' - '<%= readBase64("src/Monitoring/Favicon/Mayhem/unreadDeadY.png") %>' - '<%= readBase64("src/Monitoring/Favicon/Mayhem/unreadSFW.png") %>' - '<%= readBase64("src/Monitoring/Favicon/Mayhem/unreadSFWY.png") %>' - '<%= readBase64("src/Monitoring/Favicon/Mayhem/unreadNSFW.png") %>' - '<%= readBase64("src/Monitoring/Favicon/Mayhem/unreadNSFWY.png") %>' + '<%= readBase64('Mayhem.unreadDead.png') %>' + '<%= readBase64('Mayhem.unreadDeadY.png') %>' + '<%= readBase64('Mayhem.unreadSFW.png') %>' + '<%= readBase64('Mayhem.unreadSFWY.png') %>' + '<%= readBase64('Mayhem.unreadNSFW.png') %>' + '<%= readBase64('Mayhem.unreadNSFWY.png') %>' ] '4chanJS': [ - '<%= readBase64("src/Monitoring/Favicon/4chanJS/unreadDead.png") %>' - '<%= readBase64("src/Monitoring/Favicon/4chanJS/unreadDeadY.png") %>' - '<%= readBase64("src/Monitoring/Favicon/4chanJS/unreadSFW.png") %>' - '<%= readBase64("src/Monitoring/Favicon/4chanJS/unreadSFWY.png") %>' - '<%= readBase64("src/Monitoring/Favicon/4chanJS/unreadNSFW.png") %>' - '<%= readBase64("src/Monitoring/Favicon/4chanJS/unreadNSFWY.png") %>' + '<%= readBase64('4chanJS.unreadDead.png') %>' + '<%= readBase64('4chanJS.unreadDeadY.png') %>' + '<%= readBase64('4chanJS.unreadSFW.png') %>' + '<%= readBase64('4chanJS.unreadSFWY.png') %>' + '<%= readBase64('4chanJS.unreadNSFW.png') %>' + '<%= readBase64('4chanJS.unreadNSFWY.png') %>' ] Original: [ - '<%= readBase64("src/Monitoring/Favicon/Original/unreadDead.png") %>' - '<%= readBase64("src/Monitoring/Favicon/Original/unreadDeadY.png") %>' - '<%= readBase64("src/Monitoring/Favicon/Original/unreadSFW.png") %>' - '<%= readBase64("src/Monitoring/Favicon/Original/unreadSFWY.png") %>' - '<%= readBase64("src/Monitoring/Favicon/Original/unreadNSFW.png") %>' - '<%= readBase64("src/Monitoring/Favicon/Original/unreadNSFWY.png") %>' + '<%= readBase64('Original.unreadDead.png') %>' + '<%= readBase64('Original.unreadDeadY.png') %>' + '<%= readBase64('Original.unreadSFW.png') %>' + '<%= readBase64('Original.unreadSFWY.png') %>' + '<%= readBase64('Original.unreadNSFW.png') %>' + '<%= readBase64('Original.unreadNSFWY.png') %>' ] 'Metro': [ - '<%= readBase64("src/Monitoring/Favicon/Metro/unreadDead.png") %>' - '<%= readBase64("src/Monitoring/Favicon/Metro/unreadDeadY.png") %>' - '<%= readBase64("src/Monitoring/Favicon/Metro/unreadSFW.png") %>' - '<%= readBase64("src/Monitoring/Favicon/Metro/unreadSFWY.png") %>' - '<%= readBase64("src/Monitoring/Favicon/Metro/unreadNSFW.png") %>' - '<%= readBase64("src/Monitoring/Favicon/Metro/unreadNSFWY.png") %>' + '<%= readBase64('Metro.unreadDead.png') %>' + '<%= readBase64('Metro.unreadDeadY.png') %>' + '<%= readBase64('Metro.unreadSFW.png') %>' + '<%= readBase64('Metro.unreadSFWY.png') %>' + '<%= readBase64('Metro.unreadNSFW.png') %>' + '<%= readBase64('Metro.unreadNSFWY.png') %>' ] }[Conf['favicon']] @@ -78,7 +78,7 @@ Favicon = @unread = @unreadNSFW @unreadY = @unreadNSFWY - dead: 'data:image/gif;base64,<%= readBase64("src/Monitoring/Favicon/dead.gif") %>' - logo: 'data:image/png;base64,<%= readBase64("src/meta/icon128.png") %>' + dead: 'data:image/gif;base64,<%= readBase64('dead.gif') %>' + logo: 'data:image/png;base64,<%= readBase64('/src/meta/icon128.png') %>' return Favicon diff --git a/src/Monitoring/Favicon/4chanJS/unreadDead.png b/src/Monitoring/Favicon/4chanJS.unreadDead.png similarity index 100% rename from src/Monitoring/Favicon/4chanJS/unreadDead.png rename to src/Monitoring/Favicon/4chanJS.unreadDead.png diff --git a/src/Monitoring/Favicon/4chanJS/unreadDeadY.png b/src/Monitoring/Favicon/4chanJS.unreadDeadY.png similarity index 100% rename from src/Monitoring/Favicon/4chanJS/unreadDeadY.png rename to src/Monitoring/Favicon/4chanJS.unreadDeadY.png diff --git a/src/Monitoring/Favicon/4chanJS/unreadNSFW.png b/src/Monitoring/Favicon/4chanJS.unreadNSFW.png similarity index 100% rename from src/Monitoring/Favicon/4chanJS/unreadNSFW.png rename to src/Monitoring/Favicon/4chanJS.unreadNSFW.png diff --git a/src/Monitoring/Favicon/4chanJS/unreadNSFWY.png b/src/Monitoring/Favicon/4chanJS.unreadNSFWY.png similarity index 100% rename from src/Monitoring/Favicon/4chanJS/unreadNSFWY.png rename to src/Monitoring/Favicon/4chanJS.unreadNSFWY.png diff --git a/src/Monitoring/Favicon/4chanJS/unreadSFW.png b/src/Monitoring/Favicon/4chanJS.unreadSFW.png similarity index 100% rename from src/Monitoring/Favicon/4chanJS/unreadSFW.png rename to src/Monitoring/Favicon/4chanJS.unreadSFW.png diff --git a/src/Monitoring/Favicon/4chanJS/unreadSFWY.png b/src/Monitoring/Favicon/4chanJS.unreadSFWY.png similarity index 100% rename from src/Monitoring/Favicon/4chanJS/unreadSFWY.png rename to src/Monitoring/Favicon/4chanJS.unreadSFWY.png diff --git a/src/Monitoring/Favicon/Mayhem/unreadDead.png b/src/Monitoring/Favicon/Mayhem.unreadDead.png similarity index 100% rename from src/Monitoring/Favicon/Mayhem/unreadDead.png rename to src/Monitoring/Favicon/Mayhem.unreadDead.png diff --git a/src/Monitoring/Favicon/Mayhem/unreadDeadY.png b/src/Monitoring/Favicon/Mayhem.unreadDeadY.png similarity index 100% rename from src/Monitoring/Favicon/Mayhem/unreadDeadY.png rename to src/Monitoring/Favicon/Mayhem.unreadDeadY.png diff --git a/src/Monitoring/Favicon/Mayhem/unreadNSFW.png b/src/Monitoring/Favicon/Mayhem.unreadNSFW.png similarity index 100% rename from src/Monitoring/Favicon/Mayhem/unreadNSFW.png rename to src/Monitoring/Favicon/Mayhem.unreadNSFW.png diff --git a/src/Monitoring/Favicon/Mayhem/unreadNSFWY.png b/src/Monitoring/Favicon/Mayhem.unreadNSFWY.png similarity index 100% rename from src/Monitoring/Favicon/Mayhem/unreadNSFWY.png rename to src/Monitoring/Favicon/Mayhem.unreadNSFWY.png diff --git a/src/Monitoring/Favicon/Mayhem/unreadSFW.png b/src/Monitoring/Favicon/Mayhem.unreadSFW.png similarity index 100% rename from src/Monitoring/Favicon/Mayhem/unreadSFW.png rename to src/Monitoring/Favicon/Mayhem.unreadSFW.png diff --git a/src/Monitoring/Favicon/Mayhem/unreadSFWY.png b/src/Monitoring/Favicon/Mayhem.unreadSFWY.png similarity index 100% rename from src/Monitoring/Favicon/Mayhem/unreadSFWY.png rename to src/Monitoring/Favicon/Mayhem.unreadSFWY.png diff --git a/src/Monitoring/Favicon/Metro/readNSFW.png b/src/Monitoring/Favicon/Metro.readNSFW.png similarity index 100% rename from src/Monitoring/Favicon/Metro/readNSFW.png rename to src/Monitoring/Favicon/Metro.readNSFW.png diff --git a/src/Monitoring/Favicon/Metro/readSFW.png b/src/Monitoring/Favicon/Metro.readSFW.png similarity index 100% rename from src/Monitoring/Favicon/Metro/readSFW.png rename to src/Monitoring/Favicon/Metro.readSFW.png diff --git a/src/Monitoring/Favicon/Metro/unreadDead.png b/src/Monitoring/Favicon/Metro.unreadDead.png similarity index 100% rename from src/Monitoring/Favicon/Metro/unreadDead.png rename to src/Monitoring/Favicon/Metro.unreadDead.png diff --git a/src/Monitoring/Favicon/Metro/unreadDeadY.png b/src/Monitoring/Favicon/Metro.unreadDeadY.png similarity index 100% rename from src/Monitoring/Favicon/Metro/unreadDeadY.png rename to src/Monitoring/Favicon/Metro.unreadDeadY.png diff --git a/src/Monitoring/Favicon/Metro/unreadNSFW.png b/src/Monitoring/Favicon/Metro.unreadNSFW.png similarity index 100% rename from src/Monitoring/Favicon/Metro/unreadNSFW.png rename to src/Monitoring/Favicon/Metro.unreadNSFW.png diff --git a/src/Monitoring/Favicon/Metro/unreadNSFWY.png b/src/Monitoring/Favicon/Metro.unreadNSFWY.png similarity index 100% rename from src/Monitoring/Favicon/Metro/unreadNSFWY.png rename to src/Monitoring/Favicon/Metro.unreadNSFWY.png diff --git a/src/Monitoring/Favicon/Metro/unreadSFW.png b/src/Monitoring/Favicon/Metro.unreadSFW.png similarity index 100% rename from src/Monitoring/Favicon/Metro/unreadSFW.png rename to src/Monitoring/Favicon/Metro.unreadSFW.png diff --git a/src/Monitoring/Favicon/Metro/unreadSFWY.png b/src/Monitoring/Favicon/Metro.unreadSFWY.png similarity index 100% rename from src/Monitoring/Favicon/Metro/unreadSFWY.png rename to src/Monitoring/Favicon/Metro.unreadSFWY.png diff --git a/src/Monitoring/Favicon/Original/unreadDead.png b/src/Monitoring/Favicon/Original.unreadDead.png similarity index 100% rename from src/Monitoring/Favicon/Original/unreadDead.png rename to src/Monitoring/Favicon/Original.unreadDead.png diff --git a/src/Monitoring/Favicon/Original/unreadDeadY.png b/src/Monitoring/Favicon/Original.unreadDeadY.png similarity index 100% rename from src/Monitoring/Favicon/Original/unreadDeadY.png rename to src/Monitoring/Favicon/Original.unreadDeadY.png diff --git a/src/Monitoring/Favicon/Original/unreadNSFW.png b/src/Monitoring/Favicon/Original.unreadNSFW.png similarity index 100% rename from src/Monitoring/Favicon/Original/unreadNSFW.png rename to src/Monitoring/Favicon/Original.unreadNSFW.png diff --git a/src/Monitoring/Favicon/Original/unreadNSFWY.png b/src/Monitoring/Favicon/Original.unreadNSFWY.png similarity index 100% rename from src/Monitoring/Favicon/Original/unreadNSFWY.png rename to src/Monitoring/Favicon/Original.unreadNSFWY.png diff --git a/src/Monitoring/Favicon/Original/unreadSFW.png b/src/Monitoring/Favicon/Original.unreadSFW.png similarity index 100% rename from src/Monitoring/Favicon/Original/unreadSFW.png rename to src/Monitoring/Favicon/Original.unreadSFW.png diff --git a/src/Monitoring/Favicon/Original/unreadSFWY.png b/src/Monitoring/Favicon/Original.unreadSFWY.png similarity index 100% rename from src/Monitoring/Favicon/Original/unreadSFWY.png rename to src/Monitoring/Favicon/Original.unreadSFWY.png diff --git a/src/Monitoring/Favicon/ferongr/unreadDead.png b/src/Monitoring/Favicon/ferongr.unreadDead.png similarity index 100% rename from src/Monitoring/Favicon/ferongr/unreadDead.png rename to src/Monitoring/Favicon/ferongr.unreadDead.png diff --git a/src/Monitoring/Favicon/ferongr/unreadDeadY.png b/src/Monitoring/Favicon/ferongr.unreadDeadY.png similarity index 100% rename from src/Monitoring/Favicon/ferongr/unreadDeadY.png rename to src/Monitoring/Favicon/ferongr.unreadDeadY.png diff --git a/src/Monitoring/Favicon/ferongr/unreadNSFW.png b/src/Monitoring/Favicon/ferongr.unreadNSFW.png similarity index 100% rename from src/Monitoring/Favicon/ferongr/unreadNSFW.png rename to src/Monitoring/Favicon/ferongr.unreadNSFW.png diff --git a/src/Monitoring/Favicon/ferongr/unreadNSFWY.png b/src/Monitoring/Favicon/ferongr.unreadNSFWY.png similarity index 100% rename from src/Monitoring/Favicon/ferongr/unreadNSFWY.png rename to src/Monitoring/Favicon/ferongr.unreadNSFWY.png diff --git a/src/Monitoring/Favicon/ferongr/unreadSFW.png b/src/Monitoring/Favicon/ferongr.unreadSFW.png similarity index 100% rename from src/Monitoring/Favicon/ferongr/unreadSFW.png rename to src/Monitoring/Favicon/ferongr.unreadSFW.png diff --git a/src/Monitoring/Favicon/ferongr/unreadSFWY.png b/src/Monitoring/Favicon/ferongr.unreadSFWY.png similarity index 100% rename from src/Monitoring/Favicon/ferongr/unreadSFWY.png rename to src/Monitoring/Favicon/ferongr.unreadSFWY.png diff --git a/src/Monitoring/Favicon/xat-/unreadDead.png b/src/Monitoring/Favicon/xat-.unreadDead.png similarity index 100% rename from src/Monitoring/Favicon/xat-/unreadDead.png rename to src/Monitoring/Favicon/xat-.unreadDead.png diff --git a/src/Monitoring/Favicon/xat-/unreadDeadY.png b/src/Monitoring/Favicon/xat-.unreadDeadY.png similarity index 100% rename from src/Monitoring/Favicon/xat-/unreadDeadY.png rename to src/Monitoring/Favicon/xat-.unreadDeadY.png diff --git a/src/Monitoring/Favicon/xat-/unreadNSFW.png b/src/Monitoring/Favicon/xat-.unreadNSFW.png similarity index 100% rename from src/Monitoring/Favicon/xat-/unreadNSFW.png rename to src/Monitoring/Favicon/xat-.unreadNSFW.png diff --git a/src/Monitoring/Favicon/xat-/unreadNSFWY.png b/src/Monitoring/Favicon/xat-.unreadNSFWY.png similarity index 100% rename from src/Monitoring/Favicon/xat-/unreadNSFWY.png rename to src/Monitoring/Favicon/xat-.unreadNSFWY.png diff --git a/src/Monitoring/Favicon/xat-/unreadSFW.png b/src/Monitoring/Favicon/xat-.unreadSFW.png similarity index 100% rename from src/Monitoring/Favicon/xat-/unreadSFW.png rename to src/Monitoring/Favicon/xat-.unreadSFW.png diff --git a/src/Monitoring/Favicon/xat-/unreadSFWY.png b/src/Monitoring/Favicon/xat-.unreadSFWY.png similarity index 100% rename from src/Monitoring/Favicon/xat-/unreadSFWY.png rename to src/Monitoring/Favicon/xat-.unreadSFWY.png diff --git a/src/Monitoring/ThreadUpdater.coffee b/src/Monitoring/ThreadUpdater.coffee index f8bd6655a..aac66a2bb 100644 --- a/src/Monitoring/ThreadUpdater.coffee +++ b/src/Monitoring/ThreadUpdater.coffee @@ -87,7 +87,7 @@ ThreadUpdater = http://freesound.org/people/pierrecartoons1979/sounds/90112/ cc-by-nc-3.0 ### - beep: 'data:audio/wav;base64,<%= readBase64("src/Monitoring/beep.wav") %>' + beep: 'data:audio/wav;base64,<%= readBase64('beep.wav') %>' playBeep: -> {audio} = ThreadUpdater diff --git a/src/Monitoring/beep.wav b/src/Monitoring/ThreadUpdater/beep.wav similarity index 100% rename from src/Monitoring/beep.wav rename to src/Monitoring/ThreadUpdater/beep.wav diff --git a/src/Monitoring/ThreadWatcher.coffee b/src/Monitoring/ThreadWatcher.coffee index 2546c9815..1b6aebbb5 100644 --- a/src/Monitoring/ThreadWatcher.coffee +++ b/src/Monitoring/ThreadWatcher.coffee @@ -10,7 +10,7 @@ ThreadWatcher = className: 'disabled fa fa-eye' @db = new DataBoard 'watchedThreads', @refresh, true - @dialog = UI.dialog 'thread-watcher', 'top: 50px; left: 0px;', <%= importHTML('Monitoring/ThreadWatcher') %> + @dialog = UI.dialog 'thread-watcher', 'top: 50px; left: 0px;', <%= readHTML('ThreadWatcher.html') %> @status = $ '#watcher-status', @dialog @list = @dialog.lastElementChild diff --git a/src/Monitoring/ThreadWatcher.html b/src/Monitoring/ThreadWatcher/ThreadWatcher.html similarity index 100% rename from src/Monitoring/ThreadWatcher.html rename to src/Monitoring/ThreadWatcher/ThreadWatcher.html diff --git a/src/Monitoring/Unread.coffee b/src/Monitoring/Unread.coffee index ae9918aa3..257be4440 100644 --- a/src/Monitoring/Unread.coffee +++ b/src/Monitoring/Unread.coffee @@ -28,7 +28,7 @@ Unread = name: 'Unread' cb: @addPost - <% if (readJSON('.tests_enabled')) { %> + <% if (readJSON('/.tests_enabled')) { %> testLink = $.el 'a', textContent: 'Test Post Order' $.on testLink, 'click', -> diff --git a/src/Posting/QR.coffee b/src/Posting/QR.coffee index ef23864f6..069a18185 100644 --- a/src/Posting/QR.coffee +++ b/src/Posting/QR.coffee @@ -433,7 +433,7 @@ QR = dialog: -> QR.nodes = nodes = el: dialog = UI.dialog 'qr', 'top: 50px; right: 0px;', - <%= importHTML('Posting/QuickReply') %> + <%= readHTML('QuickReply.html') %> setNode = (name, query) -> nodes[name] = $ query, dialog diff --git a/src/Posting/QuickReply.html b/src/Posting/QR/QuickReply.html similarity index 100% rename from src/Posting/QuickReply.html rename to src/Posting/QR/QuickReply.html diff --git a/src/classes/Post.coffee b/src/classes/Post.coffee index 9bda3a6e5..e3a2b0cf8 100644 --- a/src/classes/Post.coffee +++ b/src/classes/Post.coffee @@ -2,7 +2,7 @@ class Post toString: -> @ID constructor: (root, @thread, @board) -> - <% if (readJSON('.tests_enabled')) { %> + <% if (readJSON('/.tests_enabled')) { %> root2 = root.cloneNode true for el in $$ '.mobile', root2 $.rm el diff --git a/src/config/Config.coffee b/src/config/Config.coffee index 4a4191f7a..d11d1942c 100644 --- a/src/config/Config.coffee +++ b/src/config/Config.coffee @@ -728,10 +728,10 @@ Config = # "View Same" in archives: #https://archive.4plebs.org/_/search/image/%sMD5/;text:View same on 4plebs #https://archive.4plebs.org/%board/search/image/%sMD5/;text:View same on 4plebs /%board/;boards:<%= - readJSON('src/Archive/archives.json').filter(function(x) {return x.uid === 3})[0].files.join(',') + readJSON('/src/Archive/archives.json').filter(function(x) {return x.uid === 3})[0].files.join(',') %> #https://rbt.asia/%board/image/%sMD5;text:View same on RBT /%board/;boards:<%= - readJSON('src/Archive/archives.json').filter(function(x) {return x.uid === 8})[0].files.join(',') + readJSON('/src/Archive/archives.json').filter(function(x) {return x.uid === 8})[0].files.join(',') %> """ @@ -796,7 +796,7 @@ Config = favicon: 'ferongr' - usercss: `<%= multiline(read('src/config/user.css')) %>` + usercss: `<%= multiline(read('user.css')) %>` hotkeys: # QR & Options diff --git a/src/css/CSS.js b/src/css/CSS.js index 28bd3c1ba..fc17f4e7f 100644 --- a/src/css/CSS.js +++ b/src/css/CSS.js @@ -4,9 +4,9 @@ boards: <%= multiline(require['style']()()) %>, report: -<%= multiline(read('src/css/report.css')) %>, +<%= multiline(read('report.css')) %>, www: -<%= multiline(read('src/css/www.css')) %> +<%= multiline(read('www.css')) %> }; diff --git a/src/css/linkIcons/audio.png b/src/css/linkify.audio.png similarity index 100% rename from src/css/linkIcons/audio.png rename to src/css/linkify.audio.png diff --git a/src/css/linkIcons/clyp.png b/src/css/linkify.clyp.png similarity index 100% rename from src/css/linkIcons/clyp.png rename to src/css/linkify.clyp.png diff --git a/src/css/linkIcons/dailymotion.png b/src/css/linkify.dailymotion.png similarity index 100% rename from src/css/linkIcons/dailymotion.png rename to src/css/linkify.dailymotion.png diff --git a/src/css/linkIcons/gfycat.png b/src/css/linkify.gfycat.png similarity index 100% rename from src/css/linkIcons/gfycat.png rename to src/css/linkify.gfycat.png diff --git a/src/css/linkIcons/gist.png b/src/css/linkify.gist.png similarity index 100% rename from src/css/linkIcons/gist.png rename to src/css/linkify.gist.png diff --git a/src/css/linkIcons/image.png b/src/css/linkify.image.png similarity index 100% rename from src/css/linkIcons/image.png rename to src/css/linkify.image.png diff --git a/src/css/linkIcons/installgentoo.png b/src/css/linkify.installgentoo.png similarity index 100% rename from src/css/linkIcons/installgentoo.png rename to src/css/linkify.installgentoo.png diff --git a/src/css/linkIcons/liveleak.png b/src/css/linkify.liveleak.png similarity index 100% rename from src/css/linkIcons/liveleak.png rename to src/css/linkify.liveleak.png diff --git a/src/css/linkIcons/pastebin.png b/src/css/linkify.pastebin.png similarity index 100% rename from src/css/linkIcons/pastebin.png rename to src/css/linkify.pastebin.png diff --git a/src/css/linkIcons/soundcloud.png b/src/css/linkify.soundcloud.png similarity index 100% rename from src/css/linkIcons/soundcloud.png rename to src/css/linkify.soundcloud.png diff --git a/src/css/linkIcons/twitchtv.png b/src/css/linkify.twitchtv.png similarity index 100% rename from src/css/linkIcons/twitchtv.png rename to src/css/linkify.twitchtv.png diff --git a/src/css/linkIcons/twitter.png b/src/css/linkify.twitter.png similarity index 100% rename from src/css/linkIcons/twitter.png rename to src/css/linkify.twitter.png diff --git a/src/css/linkIcons/video.png b/src/css/linkify.video.png similarity index 100% rename from src/css/linkIcons/video.png rename to src/css/linkify.video.png diff --git a/src/css/linkIcons/vimeo.png b/src/css/linkify.vimeo.png similarity index 100% rename from src/css/linkIcons/vimeo.png rename to src/css/linkify.vimeo.png diff --git a/src/css/linkIcons/vine.png b/src/css/linkify.vine.png similarity index 100% rename from src/css/linkIcons/vine.png rename to src/css/linkify.vine.png diff --git a/src/css/linkIcons/vocaroo.png b/src/css/linkify.vocaroo.png similarity index 100% rename from src/css/linkIcons/vocaroo.png rename to src/css/linkify.vocaroo.png diff --git a/src/css/linkIcons/youtube.png b/src/css/linkify.youtube.png similarity index 100% rename from src/css/linkIcons/youtube.png rename to src/css/linkify.youtube.png diff --git a/src/globals/globals.js b/src/globals/globals.js index 3dba35211..7fb1acffb 100644 --- a/src/globals/globals.js +++ b/src/globals/globals.js @@ -6,7 +6,7 @@ d = document; doc = d.documentElement; g = { - VERSION: '<%= readJSON('version.json').version %>', + VERSION: '<%= readJSON('/version.json').version %>', NAMESPACE: '<%= meta.name %>.', boards: {} }; diff --git a/src/main/Main.coffee b/src/main/Main.coffee index c9f335e51..0da606d72 100644 --- a/src/main/Main.coffee +++ b/src/main/Main.coffee @@ -465,7 +465,7 @@ Main = ['Banner', Banner] ['Flash Features', Flash] ['Reply Pruning', ReplyPruning] - <% if (readJSON('.tests_enabled')) { %> + <% if (readJSON('/.tests_enabled')) { %> ['Build Test', Build.Test] <% } %> ] diff --git a/src/meta/jshint.json b/src/meta/jshint.json index 2e8829fff..334a2f623 100644 --- a/src/meta/jshint.json +++ b/src/meta/jshint.json @@ -21,9 +21,9 @@ "chrome": true<%= meta.grants.map(x => `,\n "${x}": true`).join('') %><%= - read('tmp/declaration.js').match(/^var (.*);/)[1].split(', ').map(x => `,\n "${x}": true`).join('') + read('/tmp/declaration.js').match(/^var (.*);/)[1].split(', ').map(x => `,\n "${x}": true`).join('') %><%= - read('tmp/globals-globals.js').match(/^var (.*);/)[1].split(', ').map(x => `,\n "${x}": true`).join('') + read('/tmp/globals-globals.js').match(/^var (.*);/)[1].split(', ').map(x => `,\n "${x}": true`).join('') %> } } diff --git a/src/meta/manifest.json b/src/meta/manifest.json index da850c350..6685c4011 100644 --- a/src/meta/manifest.json +++ b/src/meta/manifest.json @@ -1,6 +1,6 @@ { "name": "<%= meta.name %>", - "version": "<%= readJSON('version.json').version %>", + "version": "<%= readJSON('/version.json').version %>", "manifest_version": 2, "description": "<%= description %>", "icons": { diff --git a/src/meta/metadata.js b/src/meta/metadata.js index 3f3227a65..3a936f2bd 100644 --- a/src/meta/metadata.js +++ b/src/meta/metadata.js @@ -1,6 +1,6 @@ // ==UserScript== // @name <%= meta.name %><%= (channel === '-beta') ? ' beta' : '' %> -// @version <%= readJSON('version.json').version %> +// @version <%= readJSON('/version.json').version %> // @minGMVer <%= meta.min.greasemonkey %> // @minFFVer <%= meta.min.firefox %> // @namespace <%= name %> @@ -42,5 +42,5 @@ // @run-at document-start // @updateURL <%= (channel !== '-noupdate') ? `${meta.downloads}${name}${channel}.meta.js` : 'https://noupdate.invalid/' %> // @downloadURL <%= (channel !== '-noupdate') ? `${meta.downloads}${name}${channel}.user.js` : 'https://noupdate.invalid/' %> -// @icon data:image/png;base64,<%= readBase64('src/meta/icon48.png') %> +// @icon data:image/png;base64,<%= readBase64('/src/meta/icon48.png') %> // ==/UserScript== diff --git a/src/meta/updates.xml b/src/meta/updates.xml index ea6aebcc7..9a323082c 100644 --- a/src/meta/updates.xml +++ b/src/meta/updates.xml @@ -1,7 +1,7 @@ - ' /> + ' /> diff --git a/tools/banners.py b/tools/banners.py index 97ba65304..192a88479 100755 --- a/tools/banners.py +++ b/tools/banners.py @@ -15,5 +15,5 @@ for ext in ['jpg', 'png', 'gif']: print(banner, status) if status == 200: banners.append(banner) -with open('src/Miscellaneous/banners.json', 'w') as f: +with open('src/Miscellaneous/Banner/banners.json', 'w') as f: f.write(json.dumps(banners)) diff --git a/tools/chain.js b/tools/chain.js index dc2452221..a0ffe27e5 100644 --- a/tools/chain.js +++ b/tools/chain.js @@ -6,9 +6,10 @@ for (var name of process.argv.slice(2)) { try { var parts = name.match(/^tmp\/([^_]*)(?:_(.*))?-(.*)\.js$/); var basename = fs.readdirSync(`src/${parts[1]}`).filter(x => (x === `${parts[3]}.coffee` || x === `${parts[3]}.js`))[0]; - var script = fs.readFileSync(`src/${parts[1]}/${basename}`, 'utf8'); + var sourceName = `src/${parts[1]}/${basename}`; + var script = fs.readFileSync(sourceName, 'utf8'); script = script.replace(/\r\n/g, '\n'); - script = template(script, {type: parts[2]}); + script = template(script, {type: parts[2]}, sourceName); if (/\.coffee$/.test(basename)) { script = coffee.compile(script); if (/^[$A-Z][$\w]*$/.test(parts[3])) { diff --git a/tools/style.js b/tools/style.js index c075e1332..6642ba3d8 100644 --- a/tools/style.js +++ b/tools/style.js @@ -32,9 +32,11 @@ read('node_modules/font-awesome/css/font-awesome.css') ).join('') + '/* Link Title Favicons */\n' + -fs.readdirSync('src/css/linkIcons').map(file => -`.linkify.${file.split('.')[0]} { - background: transparent url('data:image/png;base64,${readBase64(`src/css/linkIcons/${file}`)}') center left no-repeat!important; +fs.readdirSync('src/css').filter(file => + /^linkify\.[^.]+\.png$/.test(file) +).map(file => +`.linkify.${file.split('.')[1]} { + background: transparent url('data:image/png;base64,${readBase64(`src/css/${file}`)}') center left no-repeat!important; padding-left: 18px; } ` diff --git a/tools/template.js b/tools/template.js index 03271d91e..c93ba7351 100644 --- a/tools/template.js +++ b/tools/template.js @@ -1,10 +1,12 @@ var fs = require('fs'); +var path = require('path'); var _template = require('lodash.template'); var esprima = require('esprima'); // disable ES6 delimiters var _templateSettings = {interpolate: /<%=([\s\S]+?)%>/g}; +// Functions used in templates. var tools = {}; tools.require = {}; @@ -16,18 +18,18 @@ var read = tools.read = filename => fs.readFileSync(filename, 'utf8').re var readJSON = tools.readJSON = filename => JSON.parse(read(filename)); tools.readBase64 = filename => fs.readFileSync(filename).toString('base64'); -// Convert JSON object to Coffeescript expression (via embedded JS). -var constExpression = data => '`' + JSON.stringify(data).replace(/`/g, '\\`') + '`'; +tools.readHTML = function(filename) { + var text = read(filename).replace(/^ +/gm, '').replace(/\r?\n/g, ''); + text = _template(text, _templateSettings)(pkg); // package.json data only; no recursive imports + return tools.html(text); +}; tools.multiline = function(text) { return text.replace(/\n+/g, '\n').split(/^/m).map(JSON.stringify).join(' +\n').replace(/`/g, '\\`'); }; -tools.importHTML = function(filename) { - var text = read(`src/${filename}.html`).replace(/^ +/gm, '').replace(/\r?\n/g, ''); - text = _template(text, _templateSettings)(pkg); // variables only; no recursive imports - return tools.html(text); -}; +// Convert JSON object to Coffeescript expression (via embedded JS). +var constExpression = data => '`' + JSON.stringify(data).replace(/`/g, '\\`') + '`'; function TextStream(text) { this.text = text; @@ -173,20 +175,44 @@ tools.html = function(template) { return `(innerHTML: ${output})`; }; -tools.assert = function(flagFile, statement) { - if (!readJSON(flagFile)) return ''; +tools.assert = function(statement) { return `throw new Error 'Assertion failed: ' + ${constExpression(statement)} unless ${statement}`; }; +function resolvePath(filename, templateName) { + if (filename[0] === '/') { + return path.join(process.cwd(), filename); + } + var dir = path.dirname(templateName); + var subdir = path.basename(templateName).replace(/\.[^.]+$/, ''); + if (fs.readdirSync(dir).indexOf(subdir) >= 0) { + return path.join(dir, subdir, filename); + } else { + return path.join(dir, filename); + } +} + +function wrapTool(tool, templateName) { + return function(filename) { + return tool(resolvePath(filename, templateName)); + }; +} + // Import variables from package.json. var pkg = readJSON('package.json'); -function interpolate(text, data) { +function interpolate(text, data, filename) { var context = {}, key; - for (key in tools) context[key] = tools[key]; - for (key in pkg) context[key] = pkg[key]; + for (key in tools) { + context[key] = /^read/.test(key) ? wrapTool(tools[key], filename) : tools[key]; + } + for (key in pkg) { + context[key] = pkg[key]; + } if (data) { - for (key in data) context[key] = data[key]; + for (key in data) { + context[key] = data[key]; + } } return _template(text, _templateSettings)(context); } @@ -203,7 +229,7 @@ if (require.main === module) { } var text = read(process.argv[2]); - text = interpolate(text, data); + text = interpolate(text, data, process.argv[2]); fs.writeFileSync(process.argv[3], text); })(); }