pug-rails 2.0.3 → 3.0.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +32 -13
  3. data/Appraisals +33 -11
  4. data/Gemfile +6 -6
  5. data/Gemfile.lock +70 -67
  6. data/{vendor/assets/javascripts/pug/LICENCE → LICENSE} +7 -5
  7. data/README.md +5 -5
  8. data/Rakefile +3 -8
  9. data/gemfiles/{rails_3.gemfile → rails_3.1.gemfile} +2 -2
  10. data/gemfiles/{rails_3.gemfile.lock → rails_3.1.gemfile.lock} +11 -11
  11. data/gemfiles/rails_3.2.gemfile +9 -0
  12. data/gemfiles/rails_3.2.gemfile.lock +124 -0
  13. data/gemfiles/rails_4.1_with_sprockets_2.gemfile +9 -0
  14. data/gemfiles/rails_4.1_with_sprockets_2.gemfile.lock +140 -0
  15. data/gemfiles/{rails_4_with_sprockets_3.gemfile → rails_4.1_with_sprockets_3.gemfile} +2 -2
  16. data/gemfiles/{rails_4_with_sprockets_3.gemfile.lock → rails_4.1_with_sprockets_3.gemfile.lock} +46 -48
  17. data/gemfiles/rails_4.2_with_sprockets_2.gemfile +9 -0
  18. data/gemfiles/rails_4.2_with_sprockets_2.gemfile.lock +140 -0
  19. data/gemfiles/{rails_4_with_sprockets_2.gemfile → rails_4.2_with_sprockets_3.gemfile} +2 -2
  20. data/gemfiles/{rails_4_with_sprockets_2.gemfile.lock → rails_4.2_with_sprockets_3.gemfile.lock} +46 -48
  21. data/gemfiles/{rails_5.gemfile → rails_5.0.gemfile} +2 -2
  22. data/gemfiles/{rails_5.gemfile.lock → rails_5.0.gemfile.lock} +59 -59
  23. data/gemfiles/rails_5.1.gemfile +9 -0
  24. data/gemfiles/rails_5.1.gemfile.lock +142 -0
  25. data/lib/jade-rails/railtie.rb +14 -14
  26. data/lib/jade-rails/sprockets/transformer.rb +28 -4
  27. data/lib/pug-rails.rb +8 -23
  28. data/lib/pug-rails/railtie.rb +14 -14
  29. data/lib/pug-rails/sprockets/transformer.rb +28 -4
  30. data/lib/pug-rails/version.rb +1 -0
  31. data/pug-rails.gemspec +18 -16
  32. data/test/fixtures/javascripts/{application.js → application-1.js} +0 -0
  33. data/test/fixtures/javascripts/application-1.js.expected +10 -0
  34. data/test/fixtures/javascripts/application-2.js +2 -0
  35. data/test/test-helper.rb +62 -0
  36. data/test/test-pug-rails.rb +21 -76
  37. metadata +33 -21
  38. data/vendor/assets/javascripts/jade/LICENCE +0 -22
  39. data/vendor/assets/javascripts/jade/runtime.js +0 -252
  40. data/vendor/assets/javascripts/pug/runtime.js +0 -259
@@ -0,0 +1,10 @@
1
+ (function() { this.JST || (this.JST = {}); this.JST["templates/jade"] = (function(jade) { function template(locals) {
2
+ var buf = [];
3
+ var jade_mixins = {};
4
+ var jade_interp;
5
+
6
+ buf.push("<div>Hello, Jade!</div>");;return buf.join("");
7
+ }; return template; }).call(this, jade);;
8
+ }).call(this);
9
+ (function() { this.JST || (this.JST = {}); this.JST["templates/pug"] = (function() { function template(locals) {var pug_html = "", pug_mixins = {}, pug_interp;pug_html = pug_html + "\u003Cdiv\u003EHello, Pug!\u003C\u002Fdiv\u003E";;return pug_html;}; return template; }).call(this);;
10
+ }).call(this);
@@ -0,0 +1,2 @@
1
+ //= require jade-runtime-1.11.0
2
+ //= require pug-runtime-2.0.2
@@ -0,0 +1,62 @@
1
+ Bundler.require :default, :development
2
+
3
+ require "sprockets/railtie"
4
+ require "fileutils"
5
+
6
+ module TestHelper
7
+ def self.included(base)
8
+ base.setup do
9
+ clear_tmp
10
+ clear_logs
11
+ end
12
+
13
+ base.teardown do
14
+ clear_tmp
15
+ if defined?(Rails) && Rails.respond_to?(:application=)
16
+ Rails.application = nil
17
+ end
18
+ end
19
+ end
20
+
21
+ def create_rails_application
22
+ Class.new(Rails::Application) do
23
+ config.eager_load = false
24
+ config.assets.enabled = true
25
+ config.assets.gzip = false
26
+ config.assets.paths = [Rails.root.join("test/fixtures/javascripts").to_s]
27
+ config.assets.precompile = []
28
+ config.paths["public"] = [Rails.root.join("tmp").to_s]
29
+ config.active_support.deprecation = :stderr
30
+ config.pug.compile_debug = false
31
+ config.jade.compile_debug = false
32
+ config.pug.pretty = false
33
+ config.jade.pretty = false
34
+ end
35
+ end
36
+
37
+ def create_sprockets_task(app)
38
+ require "sprockets/version" # Fix for sprockets 2.x
39
+
40
+ if Sprockets::VERSION.start_with?("2")
41
+ require "rake/sprocketstask"
42
+ Rake::SprocketsTask.new do |t|
43
+ t.environment = app.assets
44
+ t.output = "#{app.config.paths["public"].to_a[0]}#{app.config.assets.prefix}"
45
+ t.assets = app.config.assets.precompile
46
+ end
47
+ else
48
+ require "sprockets/rails/task"
49
+ Sprockets::Rails::Task.new(app)
50
+ end
51
+ end
52
+
53
+ def clear_tmp
54
+ FileUtils.rm_rf(File.expand_path("../../tmp", __FILE__))
55
+ end
56
+
57
+ def clear_logs
58
+ FileUtils.rm_rf(File.expand_path("../../log", __FILE__))
59
+ end
60
+ end
61
+
62
+ Test::Unit::TestCase.send :include, TestHelper
@@ -1,11 +1,7 @@
1
- # encoding: utf-8
1
+ # encoding: UTF-8
2
2
  # frozen_string_literal: true
3
3
 
4
- require 'rails'
5
- require 'sprockets/railtie'
6
- require 'pug-rails'
7
- require 'test/unit'
8
- require 'fileutils'
4
+ require_relative "test-helper"
9
5
 
10
6
  class PugRailsTest < Test::Unit::TestCase
11
7
  def test_registration
@@ -13,93 +9,42 @@ class PugRailsTest < Test::Unit::TestCase
13
9
  app.initialize!
14
10
 
15
11
  if app.assets.respond_to?(:transformers)
16
- assert app.assets.transformers.fetch('text/x-pug').fetch('application/javascript+function') == Pug::Sprockets::Transformer
17
- assert app.assets.transformers.fetch('text/x-jade').fetch('application/javascript+function') == Jade::Sprockets::Transformer
12
+ assert app.assets.transformers.fetch("text/x-pug").fetch("application/javascript+function") \
13
+ == Pug::Sprockets::Transformer
14
+ assert app.assets.transformers.fetch("text/x-jade").fetch("application/javascript+function") \
15
+ == Jade::Sprockets::Transformer
18
16
  end
19
17
 
20
18
  if app.assets.respond_to?(:engines)
21
- assert app.assets.engines.fetch('.pug') == Pug::Sprockets::Transformer
22
- assert app.assets.engines.fetch('.jade') == Jade::Sprockets::Transformer
19
+ assert app.assets.engines.fetch(".pug") == Pug::Sprockets::Transformer
20
+ assert app.assets.engines.fetch(".jade") == Jade::Sprockets::Transformer
23
21
  end
24
22
 
25
- assert app.assets.paths.include?(File.expand_path('../../vendor/assets/javascripts', __FILE__))
26
- assert_includes app.config.assets.precompile, 'pug/runtime.js'
27
- assert_includes app.config.assets.precompile, 'jade/runtime.js'
23
+ File.join(Gem::Specification.find_by_name("pug-ruby").gem_dir, "vendor").tap do |path|
24
+ assert app.assets.paths.include?(path)
25
+ end
28
26
  end
29
27
 
30
28
  def test_compilation
31
29
  app = create_rails_application
32
30
  app.initialize!
31
+
33
32
  task = create_sprockets_task(app)
34
33
  task.instance_exec { manifest.compile(assets) }
35
34
 
36
- expected = <<-JAVASCRIPT.squish
37
- (function() { this.JST || (this.JST = {}); this.JST["templates/jade"] = (function(jade) { function template(locals) {
38
- var buf = [];
39
- var jade_mixins = {};
40
- var jade_interp;
41
-
42
- buf.push("<div>Hello, Jade!</div>");;return buf.join("");
43
- }; return template; }).call(this, jade);;
44
- }).call(this);
45
- (function() { this.JST || (this.JST = {}); this.JST["templates/pug"] = (function() { function template(locals) {var pug_html = "", pug_mixins = {}, pug_interp;pug_html = pug_html + "\\u003Cdiv\\u003EHello, Pug!\\u003C\\u002Fdiv\\u003E";;return pug_html;}; return template; }).call(this);;
46
- }).call(this);
47
- JAVASCRIPT
48
- assert_equal expected, app.assets['application.js'].to_s.squish
49
- end
50
-
51
- def setup
52
- super
53
- clear_tmp
54
- clear_logs
55
- end
56
-
57
- def teardown
58
- super
59
- clear_tmp
60
- if defined?(Rails) && Rails.respond_to?(:application=)
61
- Rails.application = nil
62
- end
63
- end
64
-
65
- private
66
- def create_rails_application
67
- Class.new(Rails::Application) do
68
- config.eager_load = false
69
- config.assets.enabled = true
70
- config.assets.gzip = false
71
- config.assets.paths = [Rails.root.join('test/fixtures/javascripts').to_s]
72
- config.assets.precompile = %w( application.js )
73
- config.paths['public'] = [Rails.root.join('tmp').to_s]
74
- config.active_support.deprecation = :stderr
75
- config.pug.compile_debug = false
76
- config.jade.compile_debug = false
77
- config.pug.pretty = false
78
- config.jade.pretty = false
35
+ File.expand_path("../fixtures/javascripts/application-1.js.expected", __FILE__).tap do |path|
36
+ assert_equal File.read(path).squish, app.assets["application-1.js"].to_s.squish
79
37
  end
80
38
  end
81
39
 
82
- def create_sprockets_task(app)
83
- require 'sprockets/version' # Fix for sprockets 2.x
84
-
85
- if Sprockets::VERSION.start_with?('2')
86
- require 'rake/sprocketstask'
87
- Rake::SprocketsTask.new do |t|
88
- t.environment = app.assets
89
- t.output = "#{app.config.paths['public'][0]}#{app.config.assets.prefix}"
90
- t.assets = app.config.assets.precompile
91
- end
92
- else
93
- require 'sprockets/rails/task'
94
- Sprockets::Rails::Task.new(app)
95
- end
96
- end
40
+ def test_runtime
41
+ app = create_rails_application
42
+ app.initialize!
97
43
 
98
- def clear_tmp
99
- FileUtils.rm_rf(File.expand_path('../../tmp', __FILE__))
100
- end
44
+ task = create_sprockets_task(app)
45
+ task.instance_exec { manifest.compile(assets) }
101
46
 
102
- def clear_logs
103
- FileUtils.rm_rf(File.expand_path('../../log', __FILE__))
47
+ assert_match /pug_escape/, app.assets["application-2.js"].to_s
48
+ assert_match /jade_escape/, app.assets["application-2.js"].to_s
104
49
  end
105
50
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pug-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.3
4
+ version: 3.0.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yaroslav Konoplov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-06 00:00:00.000000000 Z
11
+ date: 2017-08-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pug-ruby
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.0'
19
+ version: 2.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.0'
26
+ version: 2.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -111,30 +111,39 @@ files:
111
111
  - Appraisals
112
112
  - Gemfile
113
113
  - Gemfile.lock
114
+ - LICENSE
114
115
  - README.md
115
116
  - Rakefile
116
- - gemfiles/rails_3.gemfile
117
- - gemfiles/rails_3.gemfile.lock
118
- - gemfiles/rails_4_with_sprockets_2.gemfile
119
- - gemfiles/rails_4_with_sprockets_2.gemfile.lock
120
- - gemfiles/rails_4_with_sprockets_3.gemfile
121
- - gemfiles/rails_4_with_sprockets_3.gemfile.lock
122
- - gemfiles/rails_5.gemfile
123
- - gemfiles/rails_5.gemfile.lock
117
+ - gemfiles/rails_3.1.gemfile
118
+ - gemfiles/rails_3.1.gemfile.lock
119
+ - gemfiles/rails_3.2.gemfile
120
+ - gemfiles/rails_3.2.gemfile.lock
121
+ - gemfiles/rails_4.1_with_sprockets_2.gemfile
122
+ - gemfiles/rails_4.1_with_sprockets_2.gemfile.lock
123
+ - gemfiles/rails_4.1_with_sprockets_3.gemfile
124
+ - gemfiles/rails_4.1_with_sprockets_3.gemfile.lock
125
+ - gemfiles/rails_4.2_with_sprockets_2.gemfile
126
+ - gemfiles/rails_4.2_with_sprockets_2.gemfile.lock
127
+ - gemfiles/rails_4.2_with_sprockets_3.gemfile
128
+ - gemfiles/rails_4.2_with_sprockets_3.gemfile.lock
129
+ - gemfiles/rails_5.0.gemfile
130
+ - gemfiles/rails_5.0.gemfile.lock
131
+ - gemfiles/rails_5.1.gemfile
132
+ - gemfiles/rails_5.1.gemfile.lock
124
133
  - lib/jade-rails/railtie.rb
125
134
  - lib/jade-rails/sprockets/transformer.rb
126
135
  - lib/pug-rails.rb
127
136
  - lib/pug-rails/railtie.rb
128
137
  - lib/pug-rails/sprockets/transformer.rb
138
+ - lib/pug-rails/version.rb
129
139
  - pug-rails.gemspec
130
- - test/fixtures/javascripts/application.js
140
+ - test/fixtures/javascripts/application-1.js
141
+ - test/fixtures/javascripts/application-1.js.expected
142
+ - test/fixtures/javascripts/application-2.js
131
143
  - test/fixtures/javascripts/templates/jade.jst.jade
132
144
  - test/fixtures/javascripts/templates/pug.jst.pug
145
+ - test/test-helper.rb
133
146
  - test/test-pug-rails.rb
134
- - vendor/assets/javascripts/jade/LICENCE
135
- - vendor/assets/javascripts/jade/runtime.js
136
- - vendor/assets/javascripts/pug/LICENCE
137
- - vendor/assets/javascripts/pug/runtime.js
138
147
  homepage: https://github.com/yivo/pug-rails
139
148
  licenses:
140
149
  - MIT
@@ -150,17 +159,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
150
159
  version: '0'
151
160
  required_rubygems_version: !ruby/object:Gem::Requirement
152
161
  requirements:
153
- - - ">="
162
+ - - ">"
154
163
  - !ruby/object:Gem::Version
155
- version: '0'
164
+ version: 1.3.1
156
165
  requirements: []
157
166
  rubyforge_project:
158
- rubygems_version: 2.5.1
167
+ rubygems_version: 2.6.12
159
168
  signing_key:
160
169
  specification_version: 4
161
170
  summary: Pug/Jade template engine integration with Rails asset pipeline.
162
171
  test_files:
163
- - test/fixtures/javascripts/application.js
172
+ - test/fixtures/javascripts/application-1.js
173
+ - test/fixtures/javascripts/application-1.js.expected
174
+ - test/fixtures/javascripts/application-2.js
164
175
  - test/fixtures/javascripts/templates/jade.jst.jade
165
176
  - test/fixtures/javascripts/templates/pug.jst.pug
177
+ - test/test-helper.rb
166
178
  - test/test-pug-rails.rb
@@ -1,22 +0,0 @@
1
- (The MIT License)
2
-
3
- Copyright (c) 2009-2014 TJ Holowaychuk <tj@vision-media.ca>
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining
6
- a copy of this software and associated documentation files (the
7
- 'Software'), to deal in the Software without restriction, including
8
- without limitation the rights to use, copy, modify, merge, publish,
9
- distribute, sublicense, and/or sell copies of the Software, and to
10
- permit persons to whom the Software is furnished to do so, subject to
11
- the following conditions:
12
-
13
- The above copyright notice and this permission notice shall be
14
- included in all copies or substantial portions of the Software.
15
-
16
- THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
17
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -1,252 +0,0 @@
1
- (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.jade = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
2
- 'use strict';
3
-
4
- /**
5
- * Merge two attribute objects giving precedence
6
- * to values in object `b`. Classes are special-cased
7
- * allowing for arrays and merging/joining appropriately
8
- * resulting in a string.
9
- *
10
- * @param {Object} a
11
- * @param {Object} b
12
- * @return {Object} a
13
- * @api private
14
- */
15
-
16
- exports.merge = function merge(a, b) {
17
- if (arguments.length === 1) {
18
- var attrs = a[0];
19
- for (var i = 1; i < a.length; i++) {
20
- attrs = merge(attrs, a[i]);
21
- }
22
- return attrs;
23
- }
24
- var ac = a['class'];
25
- var bc = b['class'];
26
-
27
- if (ac || bc) {
28
- ac = ac || [];
29
- bc = bc || [];
30
- if (!Array.isArray(ac)) ac = [ac];
31
- if (!Array.isArray(bc)) bc = [bc];
32
- a['class'] = ac.concat(bc).filter(nulls);
33
- }
34
-
35
- for (var key in b) {
36
- if (key != 'class') {
37
- a[key] = b[key];
38
- }
39
- }
40
-
41
- return a;
42
- };
43
-
44
- /**
45
- * Filter null `val`s.
46
- *
47
- * @param {*} val
48
- * @return {Boolean}
49
- * @api private
50
- */
51
-
52
- function nulls(val) {
53
- return val != null && val !== '';
54
- }
55
-
56
- /**
57
- * join array as classes.
58
- *
59
- * @param {*} val
60
- * @return {String}
61
- */
62
- exports.joinClasses = joinClasses;
63
- function joinClasses(val) {
64
- return (Array.isArray(val) ? val.map(joinClasses) :
65
- (val && typeof val === 'object') ? Object.keys(val).filter(function (key) { return val[key]; }) :
66
- [val]).filter(nulls).join(' ');
67
- }
68
-
69
- /**
70
- * Render the given classes.
71
- *
72
- * @param {Array} classes
73
- * @param {Array.<Boolean>} escaped
74
- * @return {String}
75
- */
76
- exports.cls = function cls(classes, escaped) {
77
- var buf = [];
78
- for (var i = 0; i < classes.length; i++) {
79
- if (escaped && escaped[i]) {
80
- buf.push(exports.escape(joinClasses([classes[i]])));
81
- } else {
82
- buf.push(joinClasses(classes[i]));
83
- }
84
- }
85
- var text = joinClasses(buf);
86
- if (text.length) {
87
- return ' class="' + text + '"';
88
- } else {
89
- return '';
90
- }
91
- };
92
-
93
-
94
- exports.style = function (val) {
95
- if (val && typeof val === 'object') {
96
- return Object.keys(val).map(function (style) {
97
- return style + ':' + val[style];
98
- }).join(';');
99
- } else {
100
- return val;
101
- }
102
- };
103
- /**
104
- * Render the given attribute.
105
- *
106
- * @param {String} key
107
- * @param {String} val
108
- * @param {Boolean} escaped
109
- * @param {Boolean} terse
110
- * @return {String}
111
- */
112
- exports.attr = function attr(key, val, escaped, terse) {
113
- if (key === 'style') {
114
- val = exports.style(val);
115
- }
116
- if ('boolean' == typeof val || null == val) {
117
- if (val) {
118
- return ' ' + (terse ? key : key + '="' + key + '"');
119
- } else {
120
- return '';
121
- }
122
- } else if (0 == key.indexOf('data') && 'string' != typeof val) {
123
- if (JSON.stringify(val).indexOf('&') !== -1) {
124
- console.warn('Since Jade 2.0.0, ampersands (`&`) in data attributes ' +
125
- 'will be escaped to `&amp;`');
126
- };
127
- if (val && typeof val.toISOString === 'function') {
128
- console.warn('Jade will eliminate the double quotes around dates in ' +
129
- 'ISO form after 2.0.0');
130
- }
131
- return ' ' + key + "='" + JSON.stringify(val).replace(/'/g, '&apos;') + "'";
132
- } else if (escaped) {
133
- if (val && typeof val.toISOString === 'function') {
134
- console.warn('Jade will stringify dates in ISO form after 2.0.0');
135
- }
136
- return ' ' + key + '="' + exports.escape(val) + '"';
137
- } else {
138
- if (val && typeof val.toISOString === 'function') {
139
- console.warn('Jade will stringify dates in ISO form after 2.0.0');
140
- }
141
- return ' ' + key + '="' + val + '"';
142
- }
143
- };
144
-
145
- /**
146
- * Render the given attributes object.
147
- *
148
- * @param {Object} obj
149
- * @param {Object} escaped
150
- * @return {String}
151
- */
152
- exports.attrs = function attrs(obj, terse){
153
- var buf = [];
154
-
155
- var keys = Object.keys(obj);
156
-
157
- if (keys.length) {
158
- for (var i = 0; i < keys.length; ++i) {
159
- var key = keys[i]
160
- , val = obj[key];
161
-
162
- if ('class' == key) {
163
- if (val = joinClasses(val)) {
164
- buf.push(' ' + key + '="' + val + '"');
165
- }
166
- } else {
167
- buf.push(exports.attr(key, val, false, terse));
168
- }
169
- }
170
- }
171
-
172
- return buf.join('');
173
- };
174
-
175
- /**
176
- * Escape the given string of `html`.
177
- *
178
- * @param {String} html
179
- * @return {String}
180
- * @api private
181
- */
182
-
183
- var jade_encode_html_rules = {
184
- '&': '&amp;',
185
- '<': '&lt;',
186
- '>': '&gt;',
187
- '"': '&quot;'
188
- };
189
- var jade_match_html = /[&<>"]/g;
190
-
191
- function jade_encode_char(c) {
192
- return jade_encode_html_rules[c] || c;
193
- }
194
-
195
- exports.escape = jade_escape;
196
- function jade_escape(html){
197
- var result = String(html).replace(jade_match_html, jade_encode_char);
198
- if (result === '' + html) return html;
199
- else return result;
200
- };
201
-
202
- /**
203
- * Re-throw the given `err` in context to the
204
- * the jade in `filename` at the given `lineno`.
205
- *
206
- * @param {Error} err
207
- * @param {String} filename
208
- * @param {String} lineno
209
- * @api private
210
- */
211
-
212
- exports.rethrow = function rethrow(err, filename, lineno, str){
213
- if (!(err instanceof Error)) throw err;
214
- if ((typeof window != 'undefined' || !filename) && !str) {
215
- err.message += ' on line ' + lineno;
216
- throw err;
217
- }
218
- try {
219
- str = str || require('fs').readFileSync(filename, 'utf8')
220
- } catch (ex) {
221
- rethrow(err, null, lineno)
222
- }
223
- var context = 3
224
- , lines = str.split('\n')
225
- , start = Math.max(lineno - context, 0)
226
- , end = Math.min(lines.length, lineno + context);
227
-
228
- // Error context
229
- var context = lines.slice(start, end).map(function(line, i){
230
- var curr = i + start + 1;
231
- return (curr == lineno ? ' > ' : ' ')
232
- + curr
233
- + '| '
234
- + line;
235
- }).join('\n');
236
-
237
- // Alter exception message
238
- err.path = filename;
239
- err.message = (filename || 'Jade') + ':' + lineno
240
- + '\n' + context + '\n\n' + err.message;
241
- throw err;
242
- };
243
-
244
- exports.DebugItem = function DebugItem(lineno, filename) {
245
- this.lineno = lineno;
246
- this.filename = filename;
247
- }
248
-
249
- },{"fs":2}],2:[function(require,module,exports){
250
-
251
- },{}]},{},[1])(1)
252
- });