Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

hexo g rendered my javascript file wrongly #2675

Closed
AlynxZhou opened this issue Jul 29, 2017 · 7 comments · Fixed by #5118
Closed

hexo g rendered my javascript file wrongly #2675

AlynxZhou opened this issue Jul 29, 2017 · 7 comments · Fixed by #5118
Labels

Comments

@AlynxZhou
Copy link

Environment Info

Node version(node -v):

v8.1.3

Your site _config.yml (Optional):


# Hexo Configuration
## Docs: https://hexo.io/docs/configuration.html
## Source: https://github.com/hexojs/hexo/

# Site
title: 请叫我喵's StackHarbor
subtitle: Whisper to the World
description: Fight For Freedom!!!
author: 请叫我喵 Alynx
language: zh-Hans
timezone: Asia/Shanghai

# URL
## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/'
url: http://sh.alynx.xyz/
root: /
permalink: posts/:year/:month/:day/:title/
permalink_defaults:

# Directory
source_dir: source
public_dir: public
tag_dir: tags
archive_dir: archives
category_dir: categories
code_dir: downloads/code
i18n_dir: :lang
skip_render:
  - README.md
  - .nojekyll
  - baidu_verify_qriNvBiolr.html
  - CNAME
  - robots.txt
  - favicon.ico

# Writing
new_post_name: :title.md # File name of new posts
default_layout: post
titlecase: true # Transform title into titlecase
external_link: true # Open external links in new tab
filename_case: 0
render_drafts: false
post_asset_folder: true
relative_link: false
future: true
highlight:
  enable: true
  line_number: true
  auto_detect: true
  tab_replace:

# Category & Tag
default_category: uncategorized
category_map:
tag_map:

# Date / Time format
## Hexo uses Moment.js to parse and display date
## You can customize the date format as defined in
## http://momentjs.com/docs/#/displaying/format/
date_format: YYYY-MM-DD
time_format: HH:mm:ss

# Pagination
## Set per_page to 0 to disable pagination
index_generator:
  per_page: 7

archive_generator:
  per_page: 20
  yearly: true
  monthly: true

tag_generator:
  per_page: 10

pagination_dir: page

# Extensions
## Plugins: https://hexo.io/plugins/
## Themes: https://hexo.io/themes/
#theme: landscape
theme: next

## Hexo markdown
marked:
  gfm: true
  pedantic: false
  sanitize: false
  tables: true
  breaks: true
  smartLists: true
  smartypants: true

## Hexo sitemap
sitemap:
  path: sitemap.xml
baidusitemap:
  path: baidusitemap.xml

# Hexo localsearch
search:
  path: search.xml
  field: post
  format: html
  limit: 10000

# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
  type: git
  repo:
    github: git@github.com:AlynxZhou/stackharbor.alynx.xyz.git,gh-pages
    coding: git@git.coding.net:AlynxZhou/stackharbor.alynx.xyz.git,coding-pages
#  branch: master
  message: Site updated by hexo at {{ now('YYYY-MM-DD HH:mm:ss') }}.

Your theme _config.yml (Optional):

Too long and seems no relation.

Hexo and Plugin version(npm ls --depth 0):

hexo-site@0.0.0 /home/alynx/stackharbor.alynx.xyz
├── hexo@3.3.7
├── hexo-deployer-git@0.2.0
├── hexo-encrypt@0.5.4
├── hexo-generator-archive@0.1.4
├── hexo-generator-baidu-sitemap@0.1.2
├── hexo-generator-category@0.1.3
├── hexo-generator-feed@1.2.0
├── hexo-generator-index@0.2.1
├── hexo-generator-search@1.0.4
├── hexo-generator-searchdb@1.0.7
├── hexo-generator-sitemap@1.2.0
├── hexo-generator-tag@0.2.0
├── hexo-renderer-ejs@0.2.0
├── hexo-renderer-marked@0.2.11
├── hexo-renderer-stylus@0.3.3
└── hexo-server@0.2.1

For BUG

Hello everyone here, I wrote a HTML5 canvas game use javascript snake.js. And want to add it into my site's about page with

<div id="snakeGame" class="snakeGame">
  <script type="text/javascript" src="js/snake.js"></script>
</div>

(Already works in another site with raw HTML, not hexo rendered.)

However this never worked, all I got is an error. As I see the js file I find something strange.

This is the output of diff ./source/about/snake.js ./public/about/snake.js after hexo g:

21,592c21
<       innerHTML = arguments[0], others = 2 <= arguments.length ? slice.call(arguments, 1) : [];
<       para = document.createElement("p");
<       para.innerHTML = innerHTML;
<       if (others[0] != null) {
<         para.id = others[0];
<       }
<       if (others[1] != null) {
<         para.className = others[1];
<       }
<       this.parent.appendChild(para);
<       return para;
<     };
< 
<     DomCreator.prototype.createSpan = function() {
<       var id, others, para, span;
<       id = arguments[0], others = 2 <= arguments.length ? slice.call(arguments, 1) : [];
<       para = document.createElement("p");
<       span = document.createElement("span");
<       span.id = id;
<       if (others[0] != null) {
<         para.className = others[0];
<       }
<       para.appendChild(span);
<       this.parent.appendChild(para);
<       return span;
<     };
< 
<     DomCreator.prototype.createCanvas = function() {
<       var canvas, height, others, para, width;
<       width = arguments[0], height = arguments[1], others = 3 <= arguments.length ? slice.call(arguments, 2) : [];
<       para = document.createElement("p");
<       canvas = document.createElement("canvas");
<       canvas.width = width;
<       canvas.height = height;
<       if (others[0] != null) {
<         canvas.id = others[0];
<       }
<       if (others[1] != null) {
<         canvas.className = others[1];
<       }
<       para.appendChild(canvas);
<       this.parent.appendChild(para);
<       return canvas;
<     };
< 
<     DomCreator.prototype.createButton = function() {
<       var button, id, others;
<       id = arguments[0], others = 2 <= arguments.length ? slice.call(arguments, 1) : [];
<       button = document.createElement("button");
<       button.id = id;
<       if (others[0] != null) {
<         button.className = others[0];
<       }
<       this.parent.appendChild(button);
<       return button;
<     };
< 
<     DomCreator.prototype.createRadio = function() {
<       var id, label, labelHTML, name, others, radio, value;
<       name = arguments[0], value = arguments[1], labelHTML = arguments[2], id = arguments[3], others = 5 <= arguments.length ? slice.call(arguments, 4) : [];
<       radio = document.createElement("input");
<       radio.type = "radio";
<       radio.name = name;
<       radio.value = value;
<       label = document.createElement("label");
<       label.innerHTML = labelHTML;
<       label.htmlFor = id;
<       radio.id = id;
<       if ((others[0] != null) && others[0]) {
<         radio.checked = true;
<       }
<       if (others[1] != null) {
<         radio.className = others[1];
<       }
<       this.parent.appendChild(radio);
<       this.parent.appendChild(label);
<       return radio;
<     };
< 
<     DomCreator.prototype.createStyle = function(innerHTML) {
<       var style;
<       style = document.createElement("style");
<       style.innerHTML = innerHTML;
<       this.parent.appendChild(style);
<       return style;
<     };
< 
<     return DomCreator;
< 
<   })();
< 
<   FakeStorage = (function() {
<     function FakeStorage() {
<       this.clear = bind(this.clear, this);
<       this.removeItem = bind(this.removeItem, this);
<       this.getItem = bind(this.getItem, this);
<       this.setItem = bind(this.setItem, this);
<       var data;
<       data = {};
<     }
< 
<     FakeStorage.prototype.setItem = function(id, val) {
<       return this.data[id] = String(val);
<     };
< 
<     FakeStorage.prototype.getItem = function(id) {
<       if (this.data.hasOwnProperty(id)) {
<         return this.data[id];
<       } else {
<         return void 0;
<       }
<     };
< 
<     FakeStorage.prototype.removeItem = function(id) {
<       return delete this.data[id];
<     };
< 
<     FakeStorage.prototype.clear = function() {
<       return this.data = {};
<     };
< 
<     return FakeStorage;
< 
<   })();
< 
<   App = (function() {
<     function App(DomCreator) {
<       this.refresh = bind(this.refresh, this);
<       this.death = bind(this.death, this);
<       this.stop = bind(this.stop, this);
<       this.start = bind(this.start, this);
<       this.main = bind(this.main, this);
<       this.setButtonContent = bind(this.setButtonContent, this);
<       this.setMap = bind(this.setMap, this);
<       this.setSpeed = bind(this.setSpeed, this);
<       this.handleTouchEnd = bind(this.handleTouchEnd, this);
<       this.handleTouchStart = bind(this.handleTouchStart, this);
<       this.handleMoveKeyDown = bind(this.handleMoveKeyDown, this);
<       this.handleButtonKeyDown = bind(this.handleButtonKeyDown, this);
<       this.renderPresent = bind(this.renderPresent, this);
<       this.drawBorder = bind(this.drawBorder, this);
<       this.drawSnake = bind(this.drawSnake, this);
<       this.drawFood = bind(this.drawFood, this);
<       this.drawWall = bind(this.drawWall, this);
<       this.drawBackground = bind(this.drawBackground, this);
<       this.clearScore = bind(this.clearScore, this);
<       this.setScore = bind(this.setScore, this);
<       this.addScore = bind(this.addScore, this);
<       this.moveSnake = bind(this.moveSnake, this);
<       this.deleteSnakeTail = bind(this.deleteSnakeTail, this);
<       this.checkHeadCollision = bind(this.checkHeadCollision, this);
<       this.insertSnakeHead = bind(this.insertSnakeHead, this);
<       this.changeSnakeMove = bind(this.changeSnakeMove, this);
<       this.checkFoodCollision = bind(this.checkFoodCollision, this);
<       this.createFood = bind(this.createFood, this);
<       this.createSnake = bind(this.createSnake, this);
<       this.fixPos = bind(this.fixPos, this);
<       this.removeStorage = bind(this.removeStorage, this);
<       this.loadStorage = bind(this.loadStorage, this);
<       this.getStorage = bind(this.getStorage, this);
<       this.setStorage = bind(this.setStorage, this);
<       this.createDom = bind(this.createDom, this);
<       this.createDom(DomCreator);
<       this.unitNum = 30;
<       this.unitSize = Math.floor(this.canvas.height / this.unitNum);
<       this.timerId = null;
<       this.status = "REFRESHED";
<       this.touchStart = [];
<       this.directions = ["UP", "DOWN", "LEFT", "RIGHT"];
<       this.opposite = {
<         "UP": "DOWN",
<         "DOWN": "UP",
<         "LEFT": "RIGHT",
<         "RIGHT": "LEFT"
<       };
<       this.intervals = [200, 150, 100];
<       this.interval = this.intervals[1];
<       this.maps = [
<         {
<           "head": null,
<           "move": null,
<           "wall": []
<         }, {
<           "head": [14, 14],
<           "move": "RIGHT",
<           "wall": [[0, 0], [1, 0], [2, 0], [3, 0], [4, 0], [5, 0], [6, 0], [0, 1], [0, 2], [0, 3], [0, 4], [0, 5], [0, 6], [23, 0], [24, 0], [25, 0], [26, 0], [27, 0], [28, 0], [29, 0], [29, 1], [29, 2], [29, 3], [29, 4], [29, 5], [29, 6], [0, 29], [1, 29], [2, 29], [3, 29], [4, 29], [5, 29], [6, 29], [0, 23], [0, 24], [0, 25], [0, 26], [0, 27], [0, 28], [23, 29], [24, 29], [25, 29], [26, 29], [27, 29], [28, 29], [29, 29], [29, 23], [29, 24], [29, 25], [29, 26], [29, 27], [29, 28], [10, 10], [11, 10], [12, 10], [13, 10], [14, 10], [15, 10], [16, 10], [17, 10], [18, 10], [19, 10], [10, 19], [11, 19], [12, 19], [13, 19], [14, 19], [15, 19], [16, 19], [17, 19], [18, 19], [19, 19]]
<         }, {
<           "head": [10, 13],
<           "move": "RIGHT",
<           "wall": [[23, 0], [24, 0], [25, 0], [26, 0], [27, 0], [28, 0], [29, 0], [29, 10], [29, 11], [29, 12], [29, 13], [29, 14], [15, 0], [15, 1], [15, 2], [15, 3], [15, 4], [15, 5], [15, 6], [15, 7], [15, 8], [15, 9], [0, 10], [1, 10], [2, 10], [3, 10], [4, 10], [5, 10], [6, 10], [7, 10], [8, 10], [9, 10], [10, 10], [11, 10], [12, 10], [13, 10], [14, 10], [15, 10], [0, 20], [1, 20], [2, 20], [3, 20], [4, 20], [5, 20], [6, 20], [7, 20], [8, 20], [9, 20], [10, 20], [11, 20], [12, 20], [13, 20], [14, 20], [15, 20], [16, 20], [17, 20], [18, 20], [19, 20], [20, 20], [21, 20], [22, 20], [23, 20], [24, 20], [25, 20], [26, 20], [27, 20], [28, 20], [29, 20]]
<         }
<       ];
<       this.map = this.maps[0];
<       this.refresh();
<       addEventListener("keydown", this.handleButtonKeyDown, false);
<     }
< 
<     App.prototype.createDom = function(DomCreator) {
<       this.domCreator = new DomCreator("snakeGame");
<       this.domCreator.createPara("空格暂停/开始,回车重来");
<       this.domCreator.createPara("WASD、方向键或划屏操纵");
<       this.scoreBar = this.domCreator.createSpan("score");
<       this.canvas = this.domCreator.createCanvas(300, 300, "snakeCanvas");
<       this.ctx = this.canvas.getContext("2d");
<       this.switchButton = this.domCreator.createButton("switch");
<       this.refreshButton = this.domCreator.createButton("refresh");
<       this.domCreator.createPara("选择速度");
<       this.speedRadio = [this.domCreator.createRadio("speed", "low", "低", "speed0"), this.domCreator.createRadio("speed", "mid", "中", "speed1", true), this.domCreator.createRadio("speed", "high", "高", "speed2")];
<       this.domCreator.createPara("选择地图");
<       this.mapRadio = [this.domCreator.createRadio("map", "map0", "无地图", "map0", true), this.domCreator.createRadio("map", "map1", "地图一", "map1"), this.domCreator.createRadio("map", "map2", "地图二", "map2")];
<       this.speedRadio[0].onclick = this.setSpeed;
<       this.speedRadio[1].onclick = this.setSpeed;
<       this.speedRadio[2].onclick = this.setSpeed;
<       this.mapRadio[0].onclick = this.setMap;
<       this.mapRadio[1].onclick = this.setMap;
<       this.mapRadio[2].onclick = this.setMap;
<       this.domCreator.createStyle(".snakeGame {\n  font: 16px/1.8 \"Noto Sans\", \"Noto Sans CJK\", \"Lato\", \"Microsoft Jhenghei\", \"Hiragino Sans GB\", \"Microsoft YaHei\", arial, sans-serif;\n  color: #333;\n  text-shadow: 4px 4px 4px #aaa;\n  text-align: center;\n}\n\n.snakeGame p {\n  margin: 5px auto 5px auto;\n}\n\n.snakeGame button {\n	font-size: 30px;\n	margin: 5px 30px 5px 30px;\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d43f3a;\n  display: inline-block;\n  padding: 6px 12px 6px 12px;\n  font-size: 14px;\n  font-weight: 400;\n  line-height: 1.42857143;\n  white-space: nowrap;\n  vertical-align: middle;\n  touch-action: manipulation;\n  cursor: pointer;\n  user-select: none;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n\n.snakeGame button:hover {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n\n.snakeGame label {\n  margin: auto 5px auto 5px;\n}");
<       if (window.navigator.msPointerEnabled) {
<         this.eventTouchStart = "MSPointerDown";
<         this.eventTouchMove = "MSPointerMove";
<         this.eventTouchEnd = "MSPointerUp";
<       } else {
<         this.eventTouchStart = "touchstart";
<         this.eventTouchMove = "touchmove";
<         this.eventTouchEnd = "touchend";
<       }
<       if (window.fakeStorage == null) {
<         window.fakeStorage = new FakeStorage();
<       }
<       return this.storage = (this.checkLocalStorage() ? window.localStorage : window.fakeStorage);
<     };
< 
<     App.prototype.checkLocalStorage = function() {
<       var err;
<       try {
<         window.localStorage.setItem("test", 1);
<         window.localStorage.removeItem("test");
<         return true;
<       } catch (error) {
<         err = error;
<         return false;
<       }
<     };
< 
<     App.prototype.setStorage = function() {
<       var snakeStorage;
<       snakeStorage = {
<         "score": this.score,
<         "status": "STOPPED",
<         "food": this.food,
<         "snake": this.snake
<       };
<       if (this.mapRadio[1].checked) {
<         snakeStorage["map"] = 1;
<       } else if (this.mapRadio[2].checked) {
<         snakeStorage["map"] = 2;
<       } else {
<         snakeStorage["map"] = 0;
<       }
<       if (this.speedRadio[0].checked) {
<         snakeStorage["speed"] = 0;
<       } else if (this.speedRadio[2].checked) {
<         snakeStorage["speed"] = 2;
<       } else {
<         snakeStorage["speed"] = 1;
<       }
<       return this.storage.setItem("snakeStorage", JSON.stringify(snakeStorage));
<     };
< 
<     App.prototype.getStorage = function() {
<       var snakeStorage;
<       if ((snakeStorage = this.storage.getItem("snakeStorage")) != null) {
<         return JSON.parse(snakeStorage);
<       } else {
<         return void 0;
<       }
<     };
< 
<     App.prototype.loadStorage = function(snakeStorage) {
<       var k, l, len, len1, mapRadio, ref, ref1, speedRadio;
<       ref = this.mapRadio;
<       for (k = 0, len = ref.length; k < len; k++) {
<         mapRadio = ref[k];
<         mapRadio.checked = false;
<       }
<       this.mapRadio[snakeStorage["map"]].checked = true;
<       this.map = this.maps[snakeStorage["map"]];
<       ref1 = this.speedRadio;
<       for (l = 0, len1 = ref1.length; l < len1; l++) {
<         speedRadio = ref1[l];
<         speedRadio.checked = false;
<       }
<       this.speedRadio[snakeStorage["speed"]].checked = true;
<       this.interval = this.intervals[snakeStorage["speed"]];
<       this.score = snakeStorage["score"];
<       this.status = snakeStorage["status"];
<       this.food = snakeStorage["food"];
<       this.snake = snakeStorage["snake"];
<       this.setButtonContent();
<       this.setScore();
<       return this.renderPresent();
<     };
< 
<     App.prototype.removeStorage = function() {
<       return this.storage.removeItem("snakeStorage");
<     };
< 
<     App.prototype.fixPos = function(point) {
<       point[0] %= this.unitNum;
<       point[1] %= this.unitNum;
<       while (point[0] < 0) {
<         point[0] += this.unitNum;
<       }
<       while (point[1] < 0) {
<         point[1] += this.unitNum;
<       }
<       return point;
<     };
< 
<     App.prototype.createSnake = function() {
<       var headX, headY, i, k, list, move;
<       list = [];
<       if (this.map.head != null) {
<         headX = this.map.head[0];
<         headY = this.map.head[1];
<       } else {
<         headX = Math.floor(Math.random() * this.unitNum);
<         headY = Math.floor(Math.random() * this.unitNum);
<       }
<       if (this.map.move != null) {
<         move = this.map.move;
<       } else {
<         move = this.directions[Math.floor(Math.random() * this.directions.length)];
<       }
<       for (i = k = 0; k < 4; i = ++k) {
<         switch (move) {
<           case "UP":
<             list.push(this.fixPos([headX, headY + i]));
<             break;
<           case "DOWN":
<             list.push(this.fixPos([headX, headY - i]));
<             break;
<           case "LEFT":
<             list.push(this.fixPos([headX + i, headY]));
<             break;
<           case "RIGHT":
<             list.push(this.fixPos([headX - i, headY]));
<         }
<       }
<       this.snake.list = list;
<       return this.snake.move = move;
<     };
< 
<     App.prototype.createFood = function() {
<       var results;
<       this.food = [Math.floor(Math.random() * this.unitNum), Math.floor(Math.random() * this.unitNum)];
<       results = [];
<       while (this.checkFoodCollision()) {
<         results.push(this.food = [Math.floor(Math.random() * this.unitNum), Math.floor(Math.random() * this.unitNum)]);
<       }
<       return results;
<     };
< 
<     App.prototype.checkFoodCollision = function() {
<       var body, brick, k, l, len, len1, ref, ref1;
<       ref = this.snake.list;
<       for (k = 0, len = ref.length; k < len; k++) {
<         body = ref[k];
<         if (this.food[0] === body[0] && this.food[1] === body[1]) {
<           return true;
<         }
<       }
<       ref1 = this.map.wall;
<       for (l = 0, len1 = ref1.length; l < len1; l++) {
<         brick = ref1[l];
<         if (this.food[0] === brick[0] && this.food[1] === brick[1]) {
<           return true;
<         }
<       }
<       return false;
<     };
< 
<     App.prototype.changeSnakeMove = function() {
<       while (this.moveQueue.length && (this.snake.move === this.opposite[this.moveQueue[0]] || this.moveQueue[0] === this.moveQueue[1] || this.snake.move === this.moveQueue[0])) {
<         this.moveQueue.shift();
<       }
<       if (this.moveQueue.length) {
<         return this.snake.move = this.moveQueue.shift();
<       }
<     };
< 
<     App.prototype.insertSnakeHead = function() {
<       var headX, headY;
<       headX = this.snake.list[0][0];
<       headY = this.snake.list[0][1];
<       switch (this.snake.move) {
<         case "UP":
<           return this.snake.list.unshift(this.fixPos([headX, headY - 1]));
<         case "DOWN":
<           return this.snake.list.unshift(this.fixPos([headX, headY + 1]));
<         case "LEFT":
<           return this.snake.list.unshift(this.fixPos([headX - 1, headY]));
<         case "RIGHT":
<           return this.snake.list.unshift(this.fixPos([headX + 1, headY]));
<       }
<     };
< 
<     App.prototype.checkHeadCollision = function() {
<       var body, brick, k, l, len, len1, ref, ref1;
<       ref = this.snake.list.slice(1, this.snake.list.length - 1);
<       for (k = 0, len = ref.length; k < len; k++) {
<         body = ref[k];
<         if (this.snake.list[0][0] === body[0] && this.snake.list[0][1] === body[1]) {
<           return -1;
<         }
<       }
<       ref1 = this.map.wall;
<       for (l = 0, len1 = ref1.length; l < len1; l++) {
<         brick = ref1[l];
<         if (this.snake.list[0][0] === brick[0] && this.snake.list[0][1] === brick[1]) {
<           return -1;
<         }
<       }
<       if (this.snake.list[0][0] === this.food[0] && this.snake.list[0][1] === this.food[1]) {
<         return 1;
<       }
<       return 0;
<     };
< 
<     App.prototype.deleteSnakeTail = function() {
<       return this.snake.list.pop();
<     };
< 
<     App.prototype.moveSnake = function() {
<       this.changeSnakeMove();
<       this.insertSnakeHead();
<       switch (this.checkHeadCollision()) {
<         case 1:
<           this.addScore();
<           return this.createFood();
<         case 0:
<           return this.deleteSnakeTail();
<         case -1:
<           this.deleteSnakeTail();
<           return -1;
<       }
<     };
< 
<     App.prototype.addScore = function() {
<       this.score++;
<       return this.setScore();
<     };
< 
<     App.prototype.setScore = function() {
<       return this.scoreBar.innerHTML = this.score + " 分";
<     };
< 
<     App.prototype.clearScore = function() {
<       this.score = 0;
<       return this.setScore();
<     };
< 
<     App.prototype.drawBackground = function() {
<       var i, j, k, ref, results;
<       this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
<       results = [];
<       for (i = k = 0, ref = this.unitNum; 0 <= ref ? k < ref : k > ref; i = 0 <= ref ? ++k : --k) {
<         results.push((function() {
<           var l, ref1, results1;
<           results1 = [];
<           for (j = l = 0, ref1 = this.unitNum; 0 <= ref1 ? l < ref1 : l > ref1; j = 0 <= ref1 ? ++l : --l) {
<             if ((i + j) % 2) {
<               this.ctx.fillStyle = "rgba(200, 200, 200, 0.5)";
<             } else {
<               this.ctx.fillStyle = "rgba(255, 255, 255, 0.5)";
<             }
<             results1.push(this.ctx.fillRect(i * this.unitSize, j * this.unitSize, this.unitSize, this.unitSize));
<           }
<           return results1;
<         }).call(this));
<       }
<       return results;
<     };
< 
<     App.prototype.drawWall = function() {
<       var brick, k, len, ref, results;
<       ref = this.map.wall;
<       results = [];
<       for (k = 0, len = ref.length; k < len; k++) {
<         brick = ref[k];
<         this.ctx.fillStyle = "rgba(3, 3, 3, 0.7)";
<         results.push(this.ctx.fillRect(brick[0] * this.unitSize, brick[1] * this.unitSize, this.unitSize, this.unitSize));
<       }
<       return results;
<     };
< 
<     App.prototype.drawFood = function() {
<       this.ctx.strokeStyle = "rgba(0, 100, 100, 1)";
<       return this.ctx.strokeRect(this.food[0] * this.unitSize, this.food[1] * this.unitSize, this.unitSize, this.unitSize);
<     };
< 
<     App.prototype.drawSnake = function() {
<       var body, k, len, ref;
<       ref = this.snake.list.slice(1, this.snake.list.length);
<       for (k = 0, len = ref.length; k < len; k++) {
<         body = ref[k];
<         this.ctx.fillStyle = "rgba(100, 100, 200, 1)";
<         this.ctx.fillRect(body[0] * this.unitSize, body[1] * this.unitSize, this.unitSize, this.unitSize);
<       }
<       this.ctx.fillStyle = "rgba(200, 0, 0, 1)";
<       return this.ctx.fillRect(this.snake.list[0][0] * this.unitSize, this.snake.list[0][1] * this.unitSize, this.unitSize, this.unitSize);
<     };
< 
<     App.prototype.drawBorder = function() {
<       this.ctx.strokeStyle = "rgba(3, 3, 3, 0.7)";
<       return this.ctx.strokeRect(0, 0, this.canvas.width, this.canvas.height);
<     };
< 
<     App.prototype.renderPresent = function() {
<       this.drawBackground();
<       this.drawWall();
<       this.drawFood();
<       this.drawSnake();
<       return this.drawBorder();
<     };
< 
<     App.prototype.handleButtonKeyDown = function(event) {
<       switch (event.keyCode) {
<         case 32:
<           event.preventDefault();
<           return this.switchButton.onclick();
<         case 13:
<           event.preventDefault();
<           return this.refreshButton.onclick();
<       }
<     };
< 
<     App.prototype.handleMoveKeyDown = function(event) {
<       var move;
<       switch (event.keyCode) {
<         case 38:
<           move = "UP";
<           break;
<         case 40:
<           move = "DOWN";
<           break;
<         case 37:
<           move = "LEFT";
<           break;
<         case 39:
<           move = "RIGHT";
<           break;
<         case 87:
<           move = "UP";
<           break;
<         case 83:
<           move = "DOWN";
<           break;
<         case 65:
<           move = "LEFT";
<           break;
<         case 68:
<           move = "RIGHT";
<       }
<       if (move != null) {
<         event.preventDefault();
<         return this.moveQueue.push(move);
<       }
<     };
< 
<     App.prototype.handleTouchStart = function(event) {
<       if (event.touches.length > 1 || event.targetTouches.length > 1) {
---
>       innerHTML = arguments[0], others = 2 <= 0="" arguments.length="" ?="" slice.call(arguments,="" 1)="" :="" [];="" para="document.createElement("p");" para.innerhtml="innerHTML;" if="" (others[0]="" !="null)" {="" para.id="others[0];" }="" (others[1]="" para.classname="others[1];" this.parent.appendchild(para);="" return="" para;="" };="" domcreator.prototype.createspan="function()" var="" id,="" others,="" para,="" span;="" id="arguments[0]," others="2" <="arguments.length" span="document.createElement("span");" span.id="id;" para.appendchild(span);="" domcreator.prototype.createcanvas="function()" canvas,="" height,="" width;="" width="arguments[0]," height="arguments[1]," 2)="" canvas="document.createElement("canvas");" canvas.width="width;" canvas.height="height;" canvas.id="others[0];" canvas.classname="others[1];" para.appendchild(canvas);="" canvas;="" domcreator.prototype.createbutton="function()" button,="" others;="" button="document.createElement("button");" button.id="id;" button.classname="others[0];" this.parent.appendchild(button);="" button;="" domcreator.prototype.createradio="function()" label,="" labelhtml,="" name,="" radio,="" value;="" name="arguments[0]," value="arguments[1]," labelhtml="arguments[2]," 4)="" radio="document.createElement("input");" radio.type="radio" ;="" radio.name="name;" radio.value="value;" label="document.createElement("label");" label.innerhtml="labelHTML;" label.htmlfor="id;" radio.id="id;" ((others[0]="" &&="" others[0])="" radio.checked="true;" radio.classname="others[1];" this.parent.appendchild(radio);="" this.parent.appendchild(label);="" radio;="" domcreator.prototype.createstyle="function(innerHTML)" style;="" style="document.createElement("style");" style.innerhtml="innerHTML;" this.parent.appendchild(style);="" domcreator;="" })();="" fakestorage="(function()" function="" fakestorage()="" this.clear="bind(this.clear," this);="" this.removeitem="bind(this.removeItem," this.getitem="bind(this.getItem," this.setitem="bind(this.setItem," data;="" data="{};" fakestorage.prototype.setitem="function(id," val)="" this.data[id]="String(val);" fakestorage.prototype.getitem="function(id)" (this.data.hasownproperty(id))="" this.data[id];="" else="" void="" 0;="" fakestorage.prototype.removeitem="function(id)" delete="" fakestorage.prototype.clear="function()" this.data="{};" fakestorage;="" app="(function()" app(domcreator)="" this.refresh="bind(this.refresh," this.death="bind(this.death," this.stop="bind(this.stop," this.start="bind(this.start," this.main="bind(this.main," this.setbuttoncontent="bind(this.setButtonContent," this.setmap="bind(this.setMap," this.setspeed="bind(this.setSpeed," this.handletouchend="bind(this.handleTouchEnd," this.handletouchstart="bind(this.handleTouchStart," this.handlemovekeydown="bind(this.handleMoveKeyDown," this.handlebuttonkeydown="bind(this.handleButtonKeyDown," this.renderpresent="bind(this.renderPresent," this.drawborder="bind(this.drawBorder," this.drawsnake="bind(this.drawSnake," this.drawfood="bind(this.drawFood," this.drawwall="bind(this.drawWall," this.drawbackground="bind(this.drawBackground," this.clearscore="bind(this.clearScore," this.setscore="bind(this.setScore," this.addscore="bind(this.addScore," this.movesnake="bind(this.moveSnake," this.deletesnaketail="bind(this.deleteSnakeTail," this.checkheadcollision="bind(this.checkHeadCollision," this.insertsnakehead="bind(this.insertSnakeHead," this.changesnakemove="bind(this.changeSnakeMove," this.checkfoodcollision="bind(this.checkFoodCollision," this.createfood="bind(this.createFood," this.createsnake="bind(this.createSnake," this.fixpos="bind(this.fixPos," this.removestorage="bind(this.removeStorage," this.loadstorage="bind(this.loadStorage," this.getstorage="bind(this.getStorage," this.setstorage="bind(this.setStorage," this.createdom="bind(this.createDom," this.createdom(domcreator);="" this.unitnum="30;" this.unitsize="Math.floor(this.canvas.height" this.unitnum);="" this.timerid="null;" this.status="REFRESHED" this.touchstart="[];" this.directions="["UP"," "down",="" "left",="" "right"];="" this.opposite="{" "up":="" "down":="" "up",="" "left":="" "right",="" "right":="" "left"="" this.intervals="[200," 150,="" 100];="" this.interval="this.intervals[1];" this.maps="[" "head":="" null,="" "move":="" "wall":="" []="" },="" [14,="" 14],="" [[0,="" 0],="" [1,="" [2,="" [3,="" [4,="" [5,="" [6,="" [0,="" 1],="" 2],="" 3],="" 4],="" 5],="" 6],="" [23,="" [24,="" [25,="" [26,="" [27,="" [28,="" [29,="" 29],="" 23],="" 24],="" 25],="" 26],="" 27],="" 28],="" [10,="" 10],="" [11,="" [12,="" [13,="" [15,="" [16,="" [17,="" [18,="" [19,="" 19],="" 19]]="" 13],="" [[23,="" 11],="" 12],="" 7],="" 8],="" 9],="" [7,="" [8,="" [9,="" 20],="" [20,="" [21,="" [22,="" 20]]="" ];="" this.map="this.maps[0];" this.refresh();="" addeventlistener("keydown",="" this.handlebuttonkeydown,="" false);="" app.prototype.createdom="function(DomCreator)" this.domcreator="new" domcreator("snakegame");="" this.domcreator.createpara("空格暂停="" 开始,回车重来");="" this.domcreator.createpara("wasd、方向键或划屏操纵");="" this.scorebar="this.domCreator.createSpan("score");" this.canvas="this.domCreator.createCanvas(300," 300,="" "snakecanvas");="" this.ctx="this.canvas.getContext("2d");" this.switchbutton="this.domCreator.createButton("switch");" this.refreshbutton="this.domCreator.createButton("refresh");" this.domcreator.createpara("选择速度");="" this.speedradio="[this.domCreator.createRadio("speed"," "low",="" "低",="" "speed0"),="" this.domcreator.createradio("speed",="" "mid",="" "中",="" "speed1",="" true),="" "high",="" "高",="" "speed2")];="" this.domcreator.createpara("选择地图");="" this.mapradio="[this.domCreator.createRadio("map"," "map0",="" "无地图",="" this.domcreator.createradio("map",="" "map1",="" "地图一",="" "map1"),="" "map2",="" "地图二",="" "map2")];="" this.speedradio[0].onclick="this.setSpeed;" this.speedradio[1].onclick="this.setSpeed;" this.speedradio[2].onclick="this.setSpeed;" this.mapradio[0].onclick="this.setMap;" this.mapradio[1].onclick="this.setMap;" this.mapradio[2].onclick="this.setMap;" this.domcreator.createstyle(".snakegame="" {\n="" font:="" 16px="" 1.8="" \"noto="" sans\",="" sans="" cjk\",="" \"lato\",="" \"microsoft="" jhenghei\",="" \"hiragino="" gb\",="" yahei\",="" arial,="" sans-serif;\n="" color:="" #333;\n="" text-shadow:="" 4px="" #aaa;\n="" text-align:="" center;\n}\n\n.snakegame="" p="" margin:="" 5px="" auto="" auto;\n}\n\n.snakegame="" font-size:="" 30px;\n="" 30px="" #fff;\n="" background-color:="" #d9534f;\n="" border-color:="" #d43f3a;\n="" display:="" inline-block;\n="" padding:="" 6px="" 12px="" 12px;\n="" 14px;\n="" font-weight:="" 400;\n="" line-height:="" 1.42857143;\n="" white-space:="" nowrap;\n="" vertical-align:="" middle;\n="" touch-action:="" manipulation;\n="" cursor:="" pointer;\n="" user-select:="" none;\n="" background-image:="" border:="" 1px="" solid="" transparent;\n="" border-radius:="" 4px;\n}\n\n.snakegame="" button:hover="" #c9302c;\n="" #ac2925;\n}\n\n.snakegame="" 5px;\n}");="" (window.navigator.mspointerenabled)="" this.eventtouchstart="MSPointerDown" this.eventtouchmove="MSPointerMove" this.eventtouchend="MSPointerUp" (window.fakestorage="=" null)="" window.fakestorage="new" fakestorage();="" this.storage="(this.checkLocalStorage()" window.localstorage="" window.fakestorage);="" app.prototype.checklocalstorage="function()" err;="" try="" window.localstorage.setitem("test",="" 1);="" window.localstorage.removeitem("test");="" true;="" catch="" (error)="" err="error;" false;="" app.prototype.setstorage="function()" snakestorage;="" snakestorage="{" "score":="" this.score,="" "status":="" "stopped",="" "food":="" this.food,="" "snake":="" this.snake="" (this.mapradio[1].checked)="" snakestorage["map"]="1;" (this.mapradio[2].checked)="" (this.speedradio[0].checked)="" snakestorage["speed"]="0;" (this.speedradio[2].checked)="" this.storage.setitem("snakestorage",="" json.stringify(snakestorage));="" app.prototype.getstorage="function()" ((snakestorage="this.storage.getItem("snakeStorage"))" json.parse(snakestorage);="" app.prototype.loadstorage="function(snakeStorage)" k,="" l,="" len,="" len1,="" mapradio,="" ref,="" ref1,="" speedradio;="" ref="this.mapRadio;" for="" (k="0," len="ref.length;" k="" len;="" k++)="" mapradio="ref[k];" mapradio.checked="false;" this.mapradio[snakestorage["map"]].checked="true;" ref1="this.speedRadio;" (l="0," len1="ref1.length;" l="" len1;="" l++)="" speedradio="ref1[l];" speedradio.checked="false;" this.speedradio[snakestorage["speed"]].checked="true;" this.score="snakeStorage["score"];" this.food="snakeStorage["food"];" this.setbuttoncontent();="" this.setscore();="" this.renderpresent();="" app.prototype.removestorage="function()" this.storage.removeitem("snakestorage");="" app.prototype.fixpos="function(point)" point[0]="" %="this.unitNum;" point[1]="" while="" (point[0]="" 0)="" +="this.unitNum;" (point[1]="" point;="" app.prototype.createsnake="function()" headx,="" heady,="" i,="" list,="" move;="" list="[];" (this.map.head="" headx="this.map.head[0];" heady="this.map.head[1];" *="" (this.map.move="" move="this.map.move;" this.directions.length)];="" (i="k" =="" 4;="" i="++k)" switch="" (move)="" case="" list.push(this.fixpos([headx,="" i]));="" break;="" -="" list.push(this.fixpos([headx="" heady]));="" this.snake.list="list;" this.snake.move="move;" app.prototype.createfood="function()" results;="" this.unitnum),="" math.floor(math.random()="" this.unitnum)];="" results="[];" (this.checkfoodcollision())="" results.push(this.food="[Math.floor(Math.random()" this.unitnum)]);="" app.prototype.checkfoodcollision="function()" body,="" brick,="" ref1;="" body="ref[k];" (this.food[0]="==" body[0]="" this.food[1]="==" body[1])="" brick="ref1[l];" brick[0]="" brick[1])="" app.prototype.changesnakemove="function()" (this.movequeue.length="" (this.snake.move="==" this.opposite[this.movequeue[0]]="" ||="" this.movequeue[0]="==" this.movequeue[1]="" this.movequeue[0]))="" this.movequeue.shift();="" (this.movequeue.length)="" app.prototype.insertsnakehead="function()" heady;="" (this.snake.move)="" this.snake.list.unshift(this.fixpos([headx,="" 1]));="" this.snake.list.unshift(this.fixpos([headx="" 1,="" app.prototype.checkheadcollision="function()" this.snake.list.length="" (this.snake.list[0][0]="==" this.snake.list[0][1]="==" -1;="" this.food[0]="" this.food[1])="" 1;="" app.prototype.deletesnaketail="function()" this.snake.list.pop();="" app.prototype.movesnake="function()" this.changesnakemove();="" this.insertsnakehead();="" (this.checkheadcollision())="" 1:="" this.addscore();="" this.createfood();="" 0:="" this.deletesnaketail();="" -1:="" app.prototype.addscore="function()" this.score++;="" app.prototype.setscore="function()" this.scorebar.innerhtml="this.score" "="" 分";="" app.prototype.clearscore="function()" app.prototype.drawbackground="function()" j,="" this.ctx.clearrect(0,="" 0,="" this.canvas.width,="" this.canvas.height);=""> ref; i = 0 <= 0="" ref="" ?="" ++k="" :="" --k)="" {="" results.push((function()="" var="" l,="" ref1,="" results1;="" results1="[];" for="" (j="l" =="" 0,="" ref1="this.unitNum;" <="ref1" l=""> ref1; j = 0 <= ref1="" ?="" ++l="" :="" --l)="" {="" if="" ((i="" +="" j)="" %="" 2)="" this.ctx.fillstyle="rgba(200, 200, 200, 0.5)" ;="" }="" else="" results1.push(this.ctx.fillrect(i="" *="" this.unitsize,="" j="" this.unitsize));="" return="" results1;="" }).call(this));="" results;="" };="" app.prototype.drawwall="function()" var="" brick,="" k,="" len,="" ref,="" ref="this.map.wall;" results="[];" for="" (k="0," len="ref.length;" k="" <="" len;="" k++)="" brick="ref[k];" results.push(this.ctx.fillrect(brick[0]="" brick[1]="" app.prototype.drawfood="function()" this.ctx.strokestyle="rgba(0, 100, 100, 1)" this.ctx.strokerect(this.food[0]="" this.food[1]="" this.unitsize);="" app.prototype.drawsnake="function()" body,="" ref;="" this.snake.list.length);="" body="ref[k];" this.ctx.fillrect(body[0]="" body[1]="" this.ctx.fillrect(this.snake.list[0][0]="" this.snake.list[0][1]="" app.prototype.drawborder="function()" this.ctx.strokerect(0,="" 0,="" this.canvas.width,="" this.canvas.height);="" app.prototype.renderpresent="function()" this.drawbackground();="" this.drawwall();="" this.drawfood();="" this.drawsnake();="" this.drawborder();="" app.prototype.handlebuttonkeydown="function(event)" switch="" (event.keycode)="" case="" 32:="" event.preventdefault();="" this.switchbutton.onclick();="" 13:="" this.refreshbutton.onclick();="" app.prototype.handlemovekeydown="function(event)" move;="" 38:="" move="UP" break;="" 40:="" 37:="" 39:="" 87:="" 83:="" 65:="" 68:="" (move="" !="null)" this.movequeue.push(move);="" app.prototype.handletouchstart="function(event)" (event.touches.length=""> 1 || event.targetTouches.length > 1) {
780a210
> </=></=></=>
\ No newline at end of file

You can see that many lines was rendered into one line with wrong words.

I think that hexo only renders Markdown and HTML files in my environment, not js files, so I think there may be bugs that let it handle my js wrongly?

Thanks for everyone who give advice in advance.

For question

Nope.

For feature request

Nope.

@sunjiayu12
Copy link

Add /about/snake.js to skip_renderer in _config.yml:

skip_render:
  - README.md
  - .nojekyll
  - baidu_verify_qriNvBiolr.html
  - CNAME
  - robots.txt
  - favicon.ico
  - /about/snake.js

@NoahDragon
Copy link
Member

Hexo normally doesn't minimize the js/css files. Does @sunjiayu12 solution solve the problem?

@AlynxZhou
Copy link
Author

@NoahDragon @sunjiayu12 Nope. I've tried this way. Also sometimes skip_render works incorrectly, and seems this is not minimize, it's totally incorrect behavior...

@NoahDragon NoahDragon added the question Needs help in usage label Aug 3, 2017
@zehuichen123
Copy link

I met the same problem about this .QAQ And @sunjiayu12 's solution seems doesn't work = =. Is there any solution to this problem???

@zehuichen123
Copy link

I found a detailed issue about how to use skip_render in #1146 . It matters to me! Hope it may also helps.

@AlynxZhou
Copy link
Author

I think if no neat/minify plugin was installed hexo should do nothing with javascript file but it did to my file and behave wrongly. Hexo itself says it only render html/md files so js file doesn't need to add to skip_render.

@stale
Copy link

stale bot commented Mar 4, 2019

This issue has been automatically marked as stale because lack of recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants