qiita-team-templates 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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