qiita-team-templates 0.1.0 → 0.1.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a5e81ec704e16b5a832d21d662076ae46c33a1c7
4
- data.tar.gz: a329d51c09587f79bf8b814d9dd1325a8ba4b670
3
+ metadata.gz: 47b8d7eb995c408dd8f8674a7e4d11a18e87e3a2
4
+ data.tar.gz: 3a57235f1a4938dd2712f73d38b7da65adb80f1f
5
5
  SHA512:
6
- metadata.gz: 9bf948f925a8fb1ccb5ab030b9edc27b1c692e5845bd46093503534836e9bd35d077aed2b94af33b5406b4d584a3c65566d596e3d3fd46d421e1f58c41093f74
7
- data.tar.gz: 438f65ac737d30abd9d253cf9512f55f9d14c3e6d51a108f2918bbe507db0697b097490d571de69f322cc15c8f2e19e06be1d4329ef67d025fbf8b73ddc43dc0
6
+ metadata.gz: 0f1f64c608f8a42b4fbcf27cfe2a065f53162741593691a88a45d44d4e33d2ac4c1992868c10ab9ecc735a515e70b00c934ae472b15faeef2c249e0215d70d9d
7
+ data.tar.gz: c8a7398d07e8f08abe738a1ccd973b8e049cf5e9d9686de87ab6f4c1d62699577d1abf18e165797b6c079df1c97e7b8d2cd083ef83e53b504d4c75e2e2a1a789
@@ -0,0 +1,14 @@
1
+ # This file is for unifying the coding style for different editors and IDEs
2
+ # editorconfig.org
3
+
4
+ root = true
5
+
6
+ [*]
7
+ charset = utf-8
8
+ end_of_line = lf
9
+ indent_style = space
10
+ insert_final_newline = true
11
+ trim_trailing_whitespace = true
12
+
13
+ [*.{js,html}]
14
+ indent_size = 4
@@ -0,0 +1,36 @@
1
+ *.gem
2
+ *.rbc
3
+ /.config
4
+ /coverage/
5
+ /InstalledFiles
6
+ /pkg/
7
+ /spec/reports/
8
+ /test/tmp/
9
+ /test/version_tmp/
10
+ /tmp/
11
+
12
+ ## Specific to RubyMotion:
13
+ .dat*
14
+ .repl_history
15
+ build/
16
+
17
+ ## Documentation cache and generated files:
18
+ /.yardoc/
19
+ /_yardoc/
20
+ /doc/
21
+ /rdoc/
22
+
23
+ ## Environment normalisation:
24
+ /.bundle/
25
+ /lib/bundler/man/
26
+
27
+ # for a library or gem, you might want to ignore these files since the code is
28
+ # intended to run in multiple environments; otherwise, check them in:
29
+ Gemfile.lock
30
+ .ruby-version
31
+ .ruby-gemset
32
+
33
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
34
+ .rvmrc
35
+
36
+ node_modules
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source "https://rubygems.org"
2
+ gemspec
@@ -0,0 +1 @@
1
+ require 'bundler/gem_tasks'
@@ -0,0 +1,71 @@
1
+ /**
2
+ * @name kpt.js
3
+ * @description Render KPT on Qiita:Team.
4
+ * @version 0.1.0
5
+ */
6
+
7
+ (function (global) {
8
+ if (!global.Qiita.TeamTemplates) {
9
+ throw 'Qiita.TeamTemplates is required';
10
+ }
11
+
12
+ var ns = global.Qiita.TeamTemplates; // Namespace
13
+
14
+ if (ns.isRegistered('kpt')) {
15
+ // KPT template has already been registered.
16
+ return;
17
+ }
18
+
19
+ var getHTML, kptTemplate;
20
+
21
+ getHTML = function (h1) {
22
+ var el, prev, html = '';
23
+ for (el = h1.nextElementSibling;
24
+ !/H1|SCRIPT/.test(el.tagName);
25
+ prev = el, el = el.nextElementSibling, $(prev).remove()) {
26
+ html += el.outerHTML;
27
+ }
28
+ $(h1).remove();
29
+ return html;
30
+ }
31
+
32
+ // src/jst/kpt.jst
33
+ kptTemplate = function(obj) {
34
+ obj || (obj = {});
35
+ var __t, __p = '', __e = _.escape;
36
+ with (obj) {
37
+ __p += '<table class=\'table table-bordered\'>\n <tr>\n <td>\n <h1>Keep</h1>' +
38
+ ((__t = ( keepContent )) == null ? '' : __t) +
39
+ '\n </td>\n <td rowspan="2">\n <h1>Try</h1>' +
40
+ ((__t = ( tryContent )) == null ? '' : __t) +
41
+ '\n </td>\n </tr>\n <tr>\n <td><h1>Problem</h1>' +
42
+ ((__t = ( problemContent )) == null ? '' : __t) +
43
+ '</td>\n </tr>\n</table>\n';
44
+
45
+ }
46
+ return __p
47
+ };
48
+
49
+ ns.register('ktp', function (selector) {
50
+ var $item, $table, names, data;
51
+ $item = $(selector);
52
+ names = ['keepContent', 'problemContent', 'tryContent'];
53
+ data = {};
54
+ $item.find('h1').each(function (i) {
55
+ if (names[i]) { data[names[i]] = getHTML(this); }
56
+ });
57
+ $table = $(kptTemplate(data));
58
+ $table.find('h1').css({
59
+ marginTop: '0',
60
+ marginBottom: '20px'
61
+ });
62
+ $table.find('td').css({
63
+ backgroundColor: 'white',
64
+ verticalAlign: 'top',
65
+ width: '50%'
66
+ });
67
+ $item.prepend($table);
68
+ });
69
+ })(this);
70
+
71
+ // vim: filetype=jst
@@ -0,0 +1,92 @@
1
+ /**
2
+ * @name lean_canvas.js
3
+ * @description Render LeanCanvas on Qiita:Team.
4
+ * @version 0.1.0
5
+ */
6
+
7
+ (function (global) {
8
+ if (!global.Qiita.TeamTemplates) {
9
+ throw 'Qiita.TeamTemplates is required';
10
+ }
11
+
12
+ var ns = global.Qiita.TeamTemplates; // Namespace
13
+
14
+ if (ns.isRegistered('lean_canvas')) {
15
+ // LeanCanvas template has already been registered.
16
+ return;
17
+ }
18
+
19
+ var getHTML, leanCanvasTemplate;
20
+
21
+ getHTML = function (h1) {
22
+ var el, prev, html = '';
23
+ for (el = h1.nextElementSibling;
24
+ !/H1|SCRIPT/.test(el.tagName);
25
+ prev = el, el = el.nextElementSibling, $(prev).remove()) {
26
+ html += el.outerHTML;
27
+ }
28
+ $(h1).remove();
29
+ return html;
30
+ }
31
+
32
+ // src/jst/lean_canvas.jst
33
+ leanCanvasTemplate = function(obj) {
34
+ obj || (obj = {});
35
+ var __t, __p = '', __e = _.escape;
36
+ with (obj) {
37
+ __p += '<table class=\'table table-bordered\'>\n <tr>\n <td rowspan="2" colspan="2">\n <h4>Problem</h4>' +
38
+ ((__t = ( problem )) == null ? '' : __t) +
39
+ '\n <h5>Existing Alternatives</h5>' +
40
+ ((__t = ( alternatives )) == null ? '' : __t) +
41
+ '\n </td>\n <td colspan="2"><h4>Solution</h4>' +
42
+ ((__t = ( solution )) == null ? '' : __t) +
43
+ '</td>\n <td rowspan="2" colspan="2">\n <h4>Unique Value Proposition</h4>' +
44
+ ((__t = ( uvp )) == null ? '' : __t) +
45
+ '\n <h5>High-Level Concept</h5>' +
46
+ ((__t = ( concept )) == null ? '' : __t) +
47
+ '\n </td>\n <td colspan="2"><h4>Unfair Advantage</h4>' +
48
+ ((__t = ( advantage )) == null ? '' : __t) +
49
+ '</td>\n <td rowspan="2" colspan="2">\n <h4>Customer Segments</h4>' +
50
+ ((__t = ( segments )) == null ? '' : __t) +
51
+ '\n <h5>Early Adopters</h5>' +
52
+ ((__t = ( early_adopters )) == null ? '' : __t) +
53
+ '\n </td>\n </tr>\n <tr>\n <td colspan="2"><h4>Key Metrics</h4>' +
54
+ ((__t = ( key_metrics )) == null ? '' : __t) +
55
+ '</td>\n <td colspan="2"><h4>Channels</h4>' +
56
+ ((__t = ( channels )) == null ? '' : __t) +
57
+ '</td>\n </tr>\n <tr>\n <td colspan="5"><h4>Cost Structure</h4>' +
58
+ ((__t = ( cost )) == null ? '' : __t) +
59
+ '</td>\n <td colspan="5"><h4>Revenue Streams</h4>' +
60
+ ((__t = ( revenue )) == null ? '' : __t) +
61
+ '</td>\n </tr>\n</table>\n';
62
+
63
+ }
64
+ return __p
65
+ };
66
+
67
+ ns.register('lean_canvas', function (selector) {
68
+ var $item, $table, names, data, template;
69
+
70
+ $item = $(selector);
71
+
72
+ names = ['problem', 'alternatives', 'segments', 'early_adopters', 'uvp', 'concept',
73
+ 'solution', 'channels', 'revenue', 'cost', 'key_metrics', 'advantage'];
74
+ data = {};
75
+
76
+ $item.find('h1').each(function (i) {
77
+ if (names[i]) { data[names[i]] = getHTML(this); }
78
+ });
79
+
80
+ $table = $(leanCanvasTemplate(data));
81
+ $table.find('h4').css('margin-top', '0');
82
+ $table.find('td').css({
83
+ backgroundColor: 'white',
84
+ verticalAlign: 'top',
85
+ width: '20%'
86
+ });
87
+
88
+ $item.prepend($table);
89
+ });
90
+ })(this);
91
+
92
+ // vim: filetype=jst
@@ -0,0 +1,95 @@
1
+ /**
2
+ * @name problem_solution_canvas.js
3
+ * @description Render ProblemSolutionCanvas on Qiita:Team.
4
+ * @version 0.1.0
5
+ */
6
+
7
+ (function (global) {
8
+ if (!global.Qiita.TeamTemplates) {
9
+ throw 'Qiita.TeamTemplates is required';
10
+ }
11
+
12
+ var ns = global.Qiita.Team; // Namespace
13
+
14
+ if (ns.isRegistered('problem_solution_canvas')) {
15
+ // KPT template has already been registered.
16
+ return;
17
+ }
18
+
19
+ var getBoxHTML, pscTemplateP1, pscTemplateP2;
20
+
21
+ getBoxHTML = function (h2) {
22
+ var html = '';
23
+ for (el = h2.nextElementSibling; !_.include(['H1', 'H2', 'SCRIPT'], el.tagName); el = el.nextElementSibling) {
24
+ html += el.outerHTML;
25
+ }
26
+ return [html, el];
27
+ }
28
+
29
+ // src/jst/problem_solution_canvas_p1.jst
30
+ pscTemplateP1 = function(obj) {
31
+ obj || (obj = {});
32
+ var __t, __p = '', __e = _.escape;
33
+ with (obj) {
34
+ __p += '<h1>' +
35
+ ((__t = ( title )) == null ? '' : __t) +
36
+ '</h1>\n<table>\n <tr>\n <td class="currentStatus">\n <h4>CURRENT STATUS</h4>\n ' +
37
+ ((__t = ( currentStatus )) == null ? '' : __t) +
38
+ '\n </td>\n <td class="leaned">\n <h4>LAST WEEK\'S LESSON LEARNED (AND ACCOMPLISHMENTS)</h4>\n ' +
39
+ ((__t = ( learned )) == null ? '' : __t) +
40
+ '\n </td>\n </tr>\n <tr>\n <td colspan="2">\n <h4>TOP PROBLEMS</h4>\n ' +
41
+ ((__t = ( problems )) == null ? '' : __t) +
42
+ '\n </td>\n </tr>\n</table>\n';
43
+
44
+ }
45
+ return __p
46
+ };
47
+
48
+ // src/jst/problem_solution_canvas_p2.jst
49
+ pscTemplateP2 = function(obj) {
50
+ obj || (obj = {});
51
+ var __t, __p = '', __e = _.escape;
52
+ with (obj) {
53
+ __p += '<h2>' +
54
+ ((__t = ( title )) == null ? '' : __t) +
55
+ '</h2>\n<table>\n <tr>\n <td class="solutions">\n <h4>HYPOTHESIZED SOLUTIONS</h4>\n ' +
56
+ ((__t = ( solutions )) == null ? '' : __t) +
57
+ '\n </td>\n <td class="metrics">\n <h4>METRICS / PROOF + GOALS</h4>\n ' +
58
+ ((__t = ( metrics )) == null ? '' : __t) +
59
+ '\n </td>\n </tr>\n</table>\n';
60
+
61
+ }
62
+ return __p
63
+ };
64
+
65
+ ns.register('problem_solution_canvas', function (solution) {
66
+ var $item = $(item_id);
67
+
68
+ var html = '';
69
+ _.each($item.find('h1'), function (h1, i) {
70
+ var htmlEl, page, h2;
71
+ page = { title: h1.innerText };
72
+ h2 = h1.nextElementSibling;
73
+ if (i === 0) {
74
+ htmlEl = getBoxHTML(h2);
75
+ page.currentStatus = htmlEl[0];
76
+ h2 = htmlEl[1];
77
+ htmlEl = getBoxHTML(h2);
78
+ page.learned = htmlEl[0];
79
+ h2 = htmlEl[1];
80
+ page.problems = getBoxHTML(h2)[0];
81
+ html += pscTemplateP1(page);
82
+ } else {
83
+ htmlEl = getBoxHTML(h2);
84
+ page.solutions = htmlEl[0];
85
+ h2 = htmlEl[1];
86
+ page.metrics = getBoxHTML(h2)[0];
87
+ html += pscTemplateP2(page);
88
+ }
89
+ });
90
+
91
+ $item.html(html);
92
+ });
93
+ })(this);
94
+
95
+ // vim: filetype=jst
@@ -0,0 +1,15 @@
1
+ function(obj) {
2
+ obj || (obj = {});
3
+ var __t, __p = '', __e = _.escape;
4
+ with (obj) {
5
+ __p += '<table class=\'table table-bordered\'>\n <tr>\n <td>\n <h1>Keep</h1>' +
6
+ ((__t = ( keepContent )) == null ? '' : __t) +
7
+ '\n </td>\n <td rowspan="2">\n <h1>Try</h1>' +
8
+ ((__t = ( tryContent )) == null ? '' : __t) +
9
+ '\n </td>\n </tr>\n <tr>\n <td><h1>Problem</h1>' +
10
+ ((__t = ( problemContent )) == null ? '' : __t) +
11
+ '</td>\n </tr>\n</table>\n';
12
+
13
+ }
14
+ return __p
15
+ }
@@ -0,0 +1,33 @@
1
+ function(obj) {
2
+ obj || (obj = {});
3
+ var __t, __p = '', __e = _.escape;
4
+ with (obj) {
5
+ __p += '<table class=\'table table-bordered\'>\n <tr>\n <td rowspan="2" colspan="2">\n <h4>Problem</h4>' +
6
+ ((__t = ( problem )) == null ? '' : __t) +
7
+ '\n <h5>Existing Alternatives</h5>' +
8
+ ((__t = ( alternatives )) == null ? '' : __t) +
9
+ '\n </td>\n <td colspan="2"><h4>Solution</h4>' +
10
+ ((__t = ( solution )) == null ? '' : __t) +
11
+ '</td>\n <td rowspan="2" colspan="2">\n <h4>Unique Value Proposition</h4>' +
12
+ ((__t = ( uvp )) == null ? '' : __t) +
13
+ '\n <h5>High-Level Concept</h5>' +
14
+ ((__t = ( concept )) == null ? '' : __t) +
15
+ '\n </td>\n <td colspan="2"><h4>Unfair Advantage</h4>' +
16
+ ((__t = ( advantage )) == null ? '' : __t) +
17
+ '</td>\n <td rowspan="2" colspan="2">\n <h4>Customer Segments</h4>' +
18
+ ((__t = ( segments )) == null ? '' : __t) +
19
+ '\n <h5>Early Adopters</h5>' +
20
+ ((__t = ( early_adopters )) == null ? '' : __t) +
21
+ '\n </td>\n </tr>\n <tr>\n <td colspan="2"><h4>Key Metrics</h4>' +
22
+ ((__t = ( key_metrics )) == null ? '' : __t) +
23
+ '</td>\n <td colspan="2"><h4>Channels</h4>' +
24
+ ((__t = ( channels )) == null ? '' : __t) +
25
+ '</td>\n </tr>\n <tr>\n <td colspan="5"><h4>Cost Structure</h4>' +
26
+ ((__t = ( cost )) == null ? '' : __t) +
27
+ '</td>\n <td colspan="5"><h4>Revenue Streams</h4>' +
28
+ ((__t = ( revenue )) == null ? '' : __t) +
29
+ '</td>\n </tr>\n</table>\n';
30
+
31
+ }
32
+ return __p
33
+ }
@@ -0,0 +1,17 @@
1
+ function(obj) {
2
+ obj || (obj = {});
3
+ var __t, __p = '', __e = _.escape;
4
+ with (obj) {
5
+ __p += '<h1>' +
6
+ ((__t = ( title )) == null ? '' : __t) +
7
+ '</h1>\n<table>\n <tr>\n <td class="currentStatus">\n <h4>CURRENT STATUS</h4>\n ' +
8
+ ((__t = ( currentStatus )) == null ? '' : __t) +
9
+ '\n </td>\n <td class="leaned">\n <h4>LAST WEEK\'S LESSON LEARNED (AND ACCOMPLISHMENTS)</h4>\n ' +
10
+ ((__t = ( learned )) == null ? '' : __t) +
11
+ '\n </td>\n </tr>\n <tr>\n <td colspan="2">\n <h4>TOP PROBLEMS</h4>\n ' +
12
+ ((__t = ( problems )) == null ? '' : __t) +
13
+ '\n </td>\n </tr>\n</table>\n';
14
+
15
+ }
16
+ return __p
17
+ }
@@ -0,0 +1,15 @@
1
+ function(obj) {
2
+ obj || (obj = {});
3
+ var __t, __p = '', __e = _.escape;
4
+ with (obj) {
5
+ __p += '<h2>' +
6
+ ((__t = ( title )) == null ? '' : __t) +
7
+ '</h2>\n<table>\n <tr>\n <td class="solutions">\n <h4>HYPOTHESIZED SOLUTIONS</h4>\n ' +
8
+ ((__t = ( solutions )) == null ? '' : __t) +
9
+ '\n </td>\n <td class="metrics">\n <h4>METRICS / PROOF + GOALS</h4>\n ' +
10
+ ((__t = ( metrics )) == null ? '' : __t) +
11
+ '\n </td>\n </tr>\n</table>\n';
12
+
13
+ }
14
+ return __p
15
+ }
@@ -0,0 +1,47 @@
1
+ var fs = require('fs');
2
+
3
+ var gulp = require('gulp');
4
+ var data = require('gulp-data');
5
+ var jst = require('gulp-jst');
6
+ var template = require('gulp-template');
7
+
8
+ gulp.task('jst', function () {
9
+ gulp.src('src/jst/*.jst')
10
+ .pipe(jst())
11
+ .pipe(gulp.dest('dist/jst'));
12
+ });
13
+
14
+ var defaultTasks = ['jst'];
15
+
16
+ // Define template:lean_canvas and template:kpt tasks.
17
+ ['lean_canvas', 'kpt'].forEach(function (name) {
18
+ var taskName = 'template:' + name;
19
+
20
+ defaultTasks.push(taskName);
21
+
22
+ gulp.task(taskName, function () {
23
+ gulp.src('src/js/' + name + '.js')
24
+ .pipe(data(function (file) {
25
+ var fname = file.path.split('/').pop();
26
+ return { template: fs.readFileSync('dist/jst/' + fname) };
27
+ }))
28
+ .pipe(template())
29
+ .pipe(gulp.dest('dist/js'));
30
+ });
31
+ });
32
+
33
+ defaultTasks.push('template:problem_solution_canvas');
34
+
35
+ gulp.task('template:problem_solution_canvas', function () {
36
+ gulp.src('src/js/problem_solution_canvas.js')
37
+ .pipe(data(function () {
38
+ return {
39
+ templateP1: fs.readFileSync('dist/jst/problem_solution_canvas_p1.js'),
40
+ templateP2: fs.readFileSync('dist/jst/problem_solution_canvas_p2.js')
41
+ };
42
+ }))
43
+ .pipe(template())
44
+ .pipe(gulp.dest('dist/js'));
45
+ });
46
+
47
+ gulp.task('default', defaultTasks);
@@ -0,0 +1 @@
1
+ require 'qiita/team/templates'
@@ -0,0 +1,2 @@
1
+ require 'qiita/team/templates/engine'
2
+ require 'qiita/team/templates/version'
@@ -0,0 +1,8 @@
1
+ module Qiita
2
+ module Team
3
+ module Templates
4
+ class Engine < ::Rails::Engine
5
+ end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,7 @@
1
+ module Qiita
2
+ module Team
3
+ module Templates
4
+ VERSION = '0.1.1'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "Qiita-Team-Templates",
3
+ "version": "0.0.0",
4
+ "description": "Shared templates for teams",
5
+ "author": "Yuku Takahashi <yuku@qiita.com>",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/increments/Qiita-Team-Templates.git"
9
+ },
10
+ "license": "MIT",
11
+ "devDependencies": {
12
+ "gulp": "^3.8.9",
13
+ "gulp-data": "^1.2.0",
14
+ "gulp-jst": "^0.1.1",
15
+ "gulp-template": "^2.1.0"
16
+ }
17
+ }
@@ -0,0 +1,19 @@
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require "qiita/team/templates/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'qiita-team-templates'
7
+ spec.version = Qiita::Team::Templates::VERSION
8
+ spec.authors = ['Yuku Takahashi']
9
+ spec.email = ['yuku@qiita.com']
10
+ spec.summary = 'Shared templates for teams'
11
+ spec.homepage = 'https://github.com/increments/Qiita-Team-Templates'
12
+ spec.license = 'MIT'
13
+
14
+ spec.files = `git ls-files -z`.split("\x0")
15
+ spec.require_paths = ["lib"]
16
+
17
+ spec.add_development_dependency 'bundler', '~> 1.7'
18
+ spec.add_development_dependency 'rake', '~> 10.0'
19
+ end
@@ -0,0 +1,56 @@
1
+ /**
2
+ * @name kpt.js
3
+ * @description Render KPT on Qiita:Team.
4
+ */
5
+
6
+ (function (global) {
7
+ if (!global.Qiita.TeamTemplates) {
8
+ throw 'Qiita.TeamTemplates is required';
9
+ }
10
+
11
+ var ns = global.Qiita.TeamTemplates; // Namespace
12
+
13
+ if (ns.isRegistered('kpt')) {
14
+ // KPT template has already been registered.
15
+ return;
16
+ }
17
+
18
+ var getHTML, kptTemplate;
19
+
20
+ getHTML = function (h1) {
21
+ var el, prev, html = '';
22
+ for (el = h1.nextElementSibling;
23
+ !/H1|SCRIPT/.test(el.tagName);
24
+ prev = el, el = el.nextElementSibling, $(prev).remove()) {
25
+ html += el.outerHTML;
26
+ }
27
+ $(h1).remove();
28
+ return html;
29
+ }
30
+
31
+ // src/jst/kpt.jst
32
+ kptTemplate = <%= template %>;
33
+
34
+ ns.register('ktp', function (selector) {
35
+ var $item, $table, names, data;
36
+ $item = $(selector);
37
+ names = ['keepContent', 'problemContent', 'tryContent'];
38
+ data = {};
39
+ $item.find('h1').each(function (i) {
40
+ if (names[i]) { data[names[i]] = getHTML(this); }
41
+ });
42
+ $table = $(kptTemplate(data));
43
+ $table.find('h1').css({
44
+ marginTop: '0',
45
+ marginBottom: '20px'
46
+ });
47
+ $table.find('td').css({
48
+ backgroundColor: 'white',
49
+ verticalAlign: 'top',
50
+ width: '50%'
51
+ });
52
+ $item.prepend($table);
53
+ });
54
+ })(this);
55
+
56
+ // vim: filetype=jst
@@ -0,0 +1,59 @@
1
+ /**
2
+ * @name lean_canvas.js
3
+ * @description Render LeanCanvas on Qiita:Team.
4
+ */
5
+
6
+ (function (global) {
7
+ if (!global.Qiita.TeamTemplates) {
8
+ throw 'Qiita.TeamTemplates is required';
9
+ }
10
+
11
+ var ns = global.Qiita.TeamTemplates; // Namespace
12
+
13
+ if (ns.isRegistered('lean_canvas')) {
14
+ // LeanCanvas template has already been registered.
15
+ return;
16
+ }
17
+
18
+ var getHTML, leanCanvasTemplate;
19
+
20
+ getHTML = function (h1) {
21
+ var el, prev, html = '';
22
+ for (el = h1.nextElementSibling;
23
+ !/H1|SCRIPT/.test(el.tagName);
24
+ prev = el, el = el.nextElementSibling, $(prev).remove()) {
25
+ html += el.outerHTML;
26
+ }
27
+ $(h1).remove();
28
+ return html;
29
+ }
30
+
31
+ // src/jst/lean_canvas.jst
32
+ leanCanvasTemplate = <%= template %>;
33
+
34
+ ns.register('lean_canvas', function (selector) {
35
+ var $item, $table, names, data, template;
36
+
37
+ $item = $(selector);
38
+
39
+ names = ['problem', 'alternatives', 'segments', 'early_adopters', 'uvp', 'concept',
40
+ 'solution', 'channels', 'revenue', 'cost', 'key_metrics', 'advantage'];
41
+ data = {};
42
+
43
+ $item.find('h1').each(function (i) {
44
+ if (names[i]) { data[names[i]] = getHTML(this); }
45
+ });
46
+
47
+ $table = $(leanCanvasTemplate(data));
48
+ $table.find('h4').css('margin-top', '0');
49
+ $table.find('td').css({
50
+ backgroundColor: 'white',
51
+ verticalAlign: 'top',
52
+ width: '20%'
53
+ });
54
+
55
+ $item.prepend($table);
56
+ });
57
+ })(this);
58
+
59
+ // vim: filetype=jst
@@ -0,0 +1,64 @@
1
+ /**
2
+ * @name problem_solution_canvas.js
3
+ * @description Render ProblemSolutionCanvas on Qiita:Team.
4
+ */
5
+
6
+ (function (global) {
7
+ if (!global.Qiita.TeamTemplates) {
8
+ throw 'Qiita.TeamTemplates is required';
9
+ }
10
+
11
+ var ns = global.Qiita.Team; // Namespace
12
+
13
+ if (ns.isRegistered('problem_solution_canvas')) {
14
+ // KPT template has already been registered.
15
+ return;
16
+ }
17
+
18
+ var getBoxHTML, pscTemplateP1, pscTemplateP2;
19
+
20
+ getBoxHTML = function (h2) {
21
+ var html = '';
22
+ for (el = h2.nextElementSibling; !_.include(['H1', 'H2', 'SCRIPT'], el.tagName); el = el.nextElementSibling) {
23
+ html += el.outerHTML;
24
+ }
25
+ return [html, el];
26
+ }
27
+
28
+ // src/jst/problem_solution_canvas_p1.jst
29
+ pscTemplateP1 = <%= templateP1 %>;
30
+
31
+ // src/jst/problem_solution_canvas_p2.jst
32
+ pscTemplateP2 = <%= templateP2 %>;
33
+
34
+ ns.register('problem_solution_canvas', function (solution) {
35
+ var $item = $(item_id);
36
+
37
+ var html = '';
38
+ _.each($item.find('h1'), function (h1, i) {
39
+ var htmlEl, page, h2;
40
+ page = { title: h1.innerText };
41
+ h2 = h1.nextElementSibling;
42
+ if (i === 0) {
43
+ htmlEl = getBoxHTML(h2);
44
+ page.currentStatus = htmlEl[0];
45
+ h2 = htmlEl[1];
46
+ htmlEl = getBoxHTML(h2);
47
+ page.learned = htmlEl[0];
48
+ h2 = htmlEl[1];
49
+ page.problems = getBoxHTML(h2)[0];
50
+ html += pscTemplateP1(page);
51
+ } else {
52
+ htmlEl = getBoxHTML(h2);
53
+ page.solutions = htmlEl[0];
54
+ h2 = htmlEl[1];
55
+ page.metrics = getBoxHTML(h2)[0];
56
+ html += pscTemplateP2(page);
57
+ }
58
+ });
59
+
60
+ $item.html(html);
61
+ });
62
+ })(this);
63
+
64
+ // vim: filetype=jst
@@ -0,0 +1,13 @@
1
+ <table class='table table-bordered'>
2
+ <tr>
3
+ <td>
4
+ <h1>Keep</h1><%= keepContent %>
5
+ </td>
6
+ <td rowspan="2">
7
+ <h1>Try</h1><%= tryContent %>
8
+ </td>
9
+ </tr>
10
+ <tr>
11
+ <td><h1>Problem</h1><%= problemContent %></td>
12
+ </tr>
13
+ </table>
@@ -0,0 +1,26 @@
1
+ <table class='table table-bordered'>
2
+ <tr>
3
+ <td rowspan="2" colspan="2">
4
+ <h4>Problem</h4><%= problem %>
5
+ <h5>Existing Alternatives</h5><%= alternatives %>
6
+ </td>
7
+ <td colspan="2"><h4>Solution</h4><%= solution %></td>
8
+ <td rowspan="2" colspan="2">
9
+ <h4>Unique Value Proposition</h4><%= uvp %>
10
+ <h5>High-Level Concept</h5><%= concept %>
11
+ </td>
12
+ <td colspan="2"><h4>Unfair Advantage</h4><%= advantage %></td>
13
+ <td rowspan="2" colspan="2">
14
+ <h4>Customer Segments</h4><%= segments %>
15
+ <h5>Early Adopters</h5><%= early_adopters %>
16
+ </td>
17
+ </tr>
18
+ <tr>
19
+ <td colspan="2"><h4>Key Metrics</h4><%= key_metrics %></td>
20
+ <td colspan="2"><h4>Channels</h4><%= channels %></td>
21
+ </tr>
22
+ <tr>
23
+ <td colspan="5"><h4>Cost Structure</h4><%= cost %></td>
24
+ <td colspan="5"><h4>Revenue Streams</h4><%= revenue %></td>
25
+ </tr>
26
+ </table>
@@ -0,0 +1,19 @@
1
+ <h1><%= title %></h1>
2
+ <table>
3
+ <tr>
4
+ <td class="currentStatus">
5
+ <h4>CURRENT STATUS</h4>
6
+ <%= currentStatus %>
7
+ </td>
8
+ <td class="leaned">
9
+ <h4>LAST WEEK'S LESSON LEARNED (AND ACCOMPLISHMENTS)</h4>
10
+ <%= learned %>
11
+ </td>
12
+ </tr>
13
+ <tr>
14
+ <td colspan="2">
15
+ <h4>TOP PROBLEMS</h4>
16
+ <%= problems %>
17
+ </td>
18
+ </tr>
19
+ </table>
@@ -0,0 +1,13 @@
1
+ <h2><%= title %></h2>
2
+ <table>
3
+ <tr>
4
+ <td class="solutions">
5
+ <h4>HYPOTHESIZED SOLUTIONS</h4>
6
+ <%= solutions %>
7
+ </td>
8
+ <td class="metrics">
9
+ <h4>METRICS / PROOF + GOALS</h4>
10
+ <%= metrics %>
11
+ </td>
12
+ </tr>
13
+ </table>
@@ -0,0 +1,68 @@
1
+ /**
2
+ * @name qiita_team_templates.js
3
+ *
4
+ * Qiita.TeamTemplates is initialized as follows:
5
+ *
6
+ * Qiita.TeamTemplates = {
7
+ * // Registered functions.
8
+ * _map: {},
9
+ * // Queued selectors.
10
+ * _queues: {},
11
+ * // Whether the name has already been registered or not.
12
+ * isRegistered = function (name) {
13
+ * return name in this._map;
14
+ * },
15
+ * // Register the function as the name.
16
+ * register: function (name, func) {
17
+ * this._map[name] = func;
18
+ * },
19
+ * // Push the selector to a queue to render when corresponding
20
+ * // template is registered.
21
+ * render: function (name, selector) {
22
+ * this._queues[name] || (this._queues[name] = []);
23
+ * this._queues[name].push(selector);
24
+ * }
25
+ * }
26
+ */
27
+
28
+ (function (global) {
29
+ 'use strict';
30
+
31
+ // Namespace.
32
+ var ns = global.Qiita.TeamTemplates;
33
+
34
+ // Override
35
+ ns.register = function (name, func) {
36
+ ns._map[name] = func;
37
+ if (ns._queues[name]) {
38
+ // Render queued selectors.
39
+ ns.run(name);
40
+ // Clear queue.
41
+ ns._queues[name] = null;
42
+ }
43
+ };
44
+
45
+ // Override
46
+ ns.render = function (name, selector) {
47
+ if (ns.isRegistered(name)) {
48
+ ns._map[name](selector);
49
+ } else {
50
+ // If the named template has not been registered, push the selector to
51
+ // the corresponding queue.
52
+ ns._queues[name] || (ns._queues[name] = []);
53
+ ns._queues[name].push(selector);
54
+ }
55
+ };
56
+
57
+ ns.run = function (name) {
58
+ if (!ns._queues[name]) { return; }
59
+ for (var i = 0, l = ns._queues[name].length; i < l; i++) {
60
+ ns.render(name, ns._queues[name][i]);
61
+ }
62
+ };
63
+
64
+ // Run for preregisted templates.
65
+ for (var name in ns._map) if (ns._map.hasOwnProperty(name)) {
66
+ ns.run(name);
67
+ }
68
+ })(this);
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qiita-team-templates
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuku Takahashi
@@ -44,7 +44,33 @@ email:
44
44
  executables: []
45
45
  extensions: []
46
46
  extra_rdoc_files: []
47
- files: []
47
+ files:
48
+ - ".editorconfig"
49
+ - ".gitignore"
50
+ - Gemfile
51
+ - Rakefile
52
+ - dist/js/kpt.js
53
+ - dist/js/lean_canvas.js
54
+ - dist/js/problem_solution_canvas.js
55
+ - dist/jst/kpt.js
56
+ - dist/jst/lean_canvas.js
57
+ - dist/jst/problem_solution_canvas_p1.js
58
+ - dist/jst/problem_solution_canvas_p2.js
59
+ - gulpfile.js
60
+ - lib/qiita-team-templates.rb
61
+ - lib/qiita/team/templates.rb
62
+ - lib/qiita/team/templates/engine.rb
63
+ - lib/qiita/team/templates/version.rb
64
+ - package.json
65
+ - qiita-team-templates.gemspec
66
+ - src/js/kpt.js
67
+ - src/js/lean_canvas.js
68
+ - src/js/problem_solution_canvas.js
69
+ - src/jst/kpt.jst
70
+ - src/jst/lean_canvas.jst
71
+ - src/jst/problem_solution_canvas_p1.jst
72
+ - src/jst/problem_solution_canvas_p2.jst
73
+ - vendor/assets/javascripts/qiita_team_templates.js
48
74
  homepage: https://github.com/increments/Qiita-Team-Templates
49
75
  licenses:
50
76
  - MIT