mirror of
https://github.com/wassname/side-by-side.git
synced 2026-09-10 12:37:06 +08:00
Initial project setup
Featuring: - middleman setup - dummy controller and index page - markdown reader and its qunit tests - travis integration
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
/.sass-cache
|
||||
/build
|
||||
/node_modules
|
||||
/source/data
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
language: node_js
|
||||
|
||||
node_js:
|
||||
- 0.10
|
||||
|
||||
before_script:
|
||||
- bundle
|
||||
- npm install
|
||||
|
||||
script:
|
||||
- middleman &
|
||||
- sleep 5
|
||||
- node_modules/phantomjs/bin/phantomjs node_modules/qunitjs/addons/phantomjs/runner.js http://0.0.0.0:4567/tests.html
|
||||
@@ -0,0 +1,4 @@
|
||||
source 'http://rubygems.org'
|
||||
|
||||
gem "middleman", "~>3.0.13"
|
||||
gem 'rb-inotify', '~> 0.9'
|
||||
+104
@@ -0,0 +1,104 @@
|
||||
GEM
|
||||
remote: http://rubygems.org/
|
||||
specs:
|
||||
activesupport (3.2.13)
|
||||
i18n (= 0.6.1)
|
||||
multi_json (~> 1.0)
|
||||
chunky_png (1.2.8)
|
||||
coffee-script (2.2.0)
|
||||
coffee-script-source
|
||||
execjs
|
||||
coffee-script-source (1.3.3)
|
||||
compass (0.12.2)
|
||||
chunky_png (~> 1.2)
|
||||
fssm (>= 0.2.7)
|
||||
sass (~> 3.1)
|
||||
execjs (1.4.0)
|
||||
multi_json (~> 1.0)
|
||||
ffi (1.8.1)
|
||||
fssm (0.2.10)
|
||||
haml (4.0.2)
|
||||
tilt
|
||||
hike (1.2.2)
|
||||
http_router (0.10.2)
|
||||
rack (>= 1.0.0)
|
||||
url_mount (~> 0.2.1)
|
||||
i18n (0.6.1)
|
||||
listen (0.7.3)
|
||||
maruku (0.6.1)
|
||||
syntax (>= 1.0.0)
|
||||
middleman (3.0.13)
|
||||
middleman-core (= 3.0.13)
|
||||
middleman-more (= 3.0.13)
|
||||
middleman-sprockets (~> 3.0.8)
|
||||
middleman-core (3.0.13)
|
||||
activesupport (~> 3.2.6)
|
||||
bundler (~> 1.1)
|
||||
listen (~> 0.7.3)
|
||||
rack (~> 1.4.1)
|
||||
rack-test (~> 0.6.1)
|
||||
rb-fsevent (~> 0.9.3)
|
||||
thor (~> 0.15.4)
|
||||
tilt (~> 1.3.6)
|
||||
middleman-more (3.0.13)
|
||||
coffee-script (~> 2.2.0)
|
||||
coffee-script-source (~> 1.3.3)
|
||||
compass (>= 0.12.2)
|
||||
execjs (~> 1.4.0)
|
||||
haml (>= 3.1.6)
|
||||
i18n (~> 0.6.0, < 0.6.2)
|
||||
maruku (~> 0.6.0)
|
||||
middleman-core (= 3.0.13)
|
||||
padrino-helpers (= 0.10.7)
|
||||
sass (>= 3.1.20)
|
||||
uglifier (~> 1.2.6)
|
||||
middleman-sprockets (3.0.11)
|
||||
middleman-more (>= 3.0.11)
|
||||
sprockets (~> 2.1)
|
||||
sprockets-sass (~> 0.9.1)
|
||||
multi_json (1.7.3)
|
||||
padrino-core (0.10.7)
|
||||
activesupport (~> 3.2.0)
|
||||
http_router (~> 0.10.2)
|
||||
sinatra (~> 1.3.1)
|
||||
thor (~> 0.15.2)
|
||||
tilt (~> 1.3.0)
|
||||
padrino-helpers (0.10.7)
|
||||
i18n (~> 0.6)
|
||||
padrino-core (= 0.10.7)
|
||||
rack (1.4.5)
|
||||
rack-protection (1.5.0)
|
||||
rack
|
||||
rack-test (0.6.2)
|
||||
rack (>= 1.0)
|
||||
rb-fsevent (0.9.3)
|
||||
rb-inotify (0.9.0)
|
||||
ffi (>= 0.5.0)
|
||||
sass (3.2.9)
|
||||
sinatra (1.3.6)
|
||||
rack (~> 1.4)
|
||||
rack-protection (~> 1.3)
|
||||
tilt (~> 1.3, >= 1.3.3)
|
||||
sprockets (2.9.3)
|
||||
hike (~> 1.2)
|
||||
multi_json (~> 1.0)
|
||||
rack (~> 1.0)
|
||||
tilt (~> 1.1, != 1.3.0)
|
||||
sprockets-sass (0.9.1)
|
||||
sprockets (~> 2.0)
|
||||
tilt (~> 1.1)
|
||||
syntax (1.0.0)
|
||||
thor (0.15.4)
|
||||
tilt (1.3.7)
|
||||
uglifier (1.2.7)
|
||||
execjs (>= 0.3.0)
|
||||
multi_json (~> 1.3)
|
||||
url_mount (0.2.1)
|
||||
rack
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
middleman (~> 3.0.13)
|
||||
rb-inotify (~> 0.9)
|
||||
@@ -0,0 +1,8 @@
|
||||
set :css_dir, 'styles'
|
||||
set :js_dir, 'scripts'
|
||||
|
||||
Tilt.mappings.delete('md')
|
||||
|
||||
configure :build do
|
||||
activate :minify_css
|
||||
end
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "side-by-side",
|
||||
"version": "0.0.1",
|
||||
"author": "Vit Brunner",
|
||||
"description": "Visual comparison of different translations of itemized texts; e.g. poems, bibles, etc.",
|
||||
"devDependencies": {
|
||||
"qunitjs": "1.11.x",
|
||||
"phantomjs": "1.9.x"
|
||||
},
|
||||
"license": "MIT"
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
/ application scripts
|
||||
#{javascript_include_tag "//cdnjs.cloudflare.com/ajax/libs/angular.js/1.1.5/angular.js"}
|
||||
/ TODO use cdnjs.com once they serve marked
|
||||
#{javascript_include_tag "//raw.github.com/chjj/marked/master/lib/marked.js"}
|
||||
#{javascript_include_tag "app"}
|
||||
#{javascript_include_tag "services"}
|
||||
#{javascript_include_tag "reader/markdown"}
|
||||
#{javascript_include_tag "controllers"}
|
||||
@@ -0,0 +1,14 @@
|
||||
!!! 5
|
||||
%html{"ng-app" => "sideBySide"}
|
||||
%head
|
||||
%title Side By Side viewer
|
||||
%meta{:charset => "utf-8"}
|
||||
#{stylesheet_link_tag "//fonts.googleapis.com/css?family=Titillium+Web:400,700,400italic,700italic"}
|
||||
#{stylesheet_link_tag "style"}
|
||||
= render_partial 'scripts'
|
||||
|
||||
%body
|
||||
%div{:class => "container", "ng-controller" => "comparisonController"}
|
||||
%div{:class => "verse", "ng-repeat" => "verse in verses"}
|
||||
%div{:class => "section", "ng-bind" => "verse.section"}
|
||||
%div{:class => "version", "ng-repeat" => "version in verse.versions"} {{ version }}
|
||||
@@ -0,0 +1 @@
|
||||
angular.module 'sideBySide', ['sideBySide.controllers']
|
||||
@@ -0,0 +1,6 @@
|
||||
angular.module("sideBySide.controllers", [])
|
||||
.controller "comparisonController", ($scope) ->
|
||||
$scope.verses = [
|
||||
{ section: 'first', versions: [ 'a', '1' ] }
|
||||
{ section: 'second', versions: [ 'b', '2' ] }
|
||||
]
|
||||
@@ -0,0 +1,45 @@
|
||||
angular.module("sideBySide").factory("markdownReader", () ->
|
||||
return (source) ->
|
||||
read_meta = (block, inlineLexer) ->
|
||||
meta = {}
|
||||
lexed = inlineLexer.output(block.text)
|
||||
for line in lexed.split("\n")
|
||||
match = /([^:]*):(.*)/.exec(line)
|
||||
meta[match[1].trim()] = match[2].trim()
|
||||
return meta
|
||||
|
||||
read_content = (lexed) ->
|
||||
get_section = (lexed) ->
|
||||
items = []
|
||||
while lexed.length > 0
|
||||
if lexed[0]["type"] == "heading"
|
||||
break
|
||||
items.push(lexed.shift())
|
||||
return items
|
||||
|
||||
content = []
|
||||
|
||||
while lexed.length > 0
|
||||
if lexed[0]["type"] == "heading"
|
||||
heading = lexed.shift().text
|
||||
else
|
||||
heading = ''
|
||||
|
||||
text = get_section(lexed)
|
||||
text.links = lexed.links
|
||||
content.push({
|
||||
section: heading
|
||||
text: marked.parser(text)
|
||||
})
|
||||
|
||||
return content
|
||||
|
||||
lexed = marked.lexer(source)
|
||||
meta = lexed.shift()
|
||||
inlineLexer = new marked.InlineLexer(lexed.links)
|
||||
|
||||
return {
|
||||
meta: read_meta(meta, inlineLexer)
|
||||
content: read_content(lexed)
|
||||
}
|
||||
)
|
||||
@@ -0,0 +1,78 @@
|
||||
test("markdownReader", () ->
|
||||
injector = angular.injector(["ng", "sideBySide"])
|
||||
markDownReader = injector.get("markdownReader")
|
||||
|
||||
testCases = [{
|
||||
tested: """
|
||||
Title: Universal Declaration of Human Rights
|
||||
Author: John Peters Humphrey
|
||||
Date: 1948
|
||||
Source: http://en.wikisource.org/wiki/Universal_Declaration_of_Human_Rights
|
||||
|
||||
## 1
|
||||
All human beings are born *free* and equal in dignity and rights...
|
||||
|
||||
## 2
|
||||
Everyone is entitled to all the rights and freedoms...
|
||||
|
||||
Furthermore, no distinction shall be made on the basis of...
|
||||
|
||||
## 11.1
|
||||
Everyone charged with a penal offence has the right to be presumed...
|
||||
|
||||
## 11.2
|
||||
No one shall be held guilty of any penal offence...
|
||||
|
||||
## 13
|
||||
Everyone is entitled to:
|
||||
|
||||
- sex
|
||||
- drugs
|
||||
- rock & roll
|
||||
"""
|
||||
expected: {
|
||||
meta: {
|
||||
Title: "Universal Declaration of Human Rights"
|
||||
Author: "John Peters Humphrey"
|
||||
Date: "1948"
|
||||
Source: '<a href="http://en.wikisource.org/wiki/Universal_Declaration_of_Human_Rights">http://en.wikisource.org/wiki/Universal_Declaration_of_Human_Rights</a>'
|
||||
}
|
||||
content: [
|
||||
{ section: "1", text: "<p>All human beings are born <em>free</em> and equal in dignity and rights...</p>\n" }
|
||||
{ section: "2", text: """<p>Everyone is entitled to all the rights and freedoms...</p>
|
||||
<p>Furthermore, no distinction shall be made on the basis of...</p>\n""" }
|
||||
{ section: "11.1", text: "<p>Everyone charged with a penal offence has the right to be presumed...</p>\n" }
|
||||
{ section: "11.2", text: "<p>No one shall be held guilty of any penal offence...</p>\n" }
|
||||
{ section: "13", text: """<p>Everyone is entitled to:</p>
|
||||
<ul>
|
||||
<li>sex</li>
|
||||
<li>drugs</li>
|
||||
<li>rock & roll</li>
|
||||
</ul>\n""" }
|
||||
]
|
||||
}
|
||||
}, {
|
||||
tested: """
|
||||
Title: Test leading text
|
||||
|
||||
**This** is leading text.
|
||||
# I
|
||||
First section.
|
||||
# II
|
||||
Second section.
|
||||
"""
|
||||
expected: {
|
||||
meta: {
|
||||
Title: "Test leading text"
|
||||
}
|
||||
content: [
|
||||
{ section: "", text: "<p><strong>This</strong> is leading text.</p>\n" }
|
||||
{ section: "I", text: "<p>First section.</p>\n" }
|
||||
{ section: "II", text: "<p>Second section.</p>\n" }
|
||||
]
|
||||
}
|
||||
}]
|
||||
|
||||
for testCase in testCases
|
||||
deepEqual(markDownReader(testCase.tested), testCase.expected)
|
||||
)
|
||||
@@ -0,0 +1,2 @@
|
||||
body
|
||||
font-family: "Titillium Web", sans-serif
|
||||
@@ -0,0 +1,14 @@
|
||||
!!! 5
|
||||
%html
|
||||
%head
|
||||
%title Side By Side test suite
|
||||
%meta{:charset => "utf-8"}
|
||||
= render_partial 'scripts'
|
||||
|
||||
/ test scripts
|
||||
#{stylesheet_link_tag "//cdnjs.cloudflare.com/ajax/libs/qunit/1.11.0/qunit.css"}
|
||||
#{javascript_include_tag "//cdnjs.cloudflare.com/ajax/libs/qunit/1.11.0/qunit.js"}
|
||||
#{javascript_include_tag "tests/reader/markdown"}
|
||||
|
||||
%body
|
||||
%div{:id => "qunit"}
|
||||
Reference in New Issue
Block a user