├── heroku ├── CNAME ├── .gitattributes ├── app ├── .buildignore ├── robots.txt ├── loaderio-d4ca38611b503725ced9831539b9423c.txt ├── favicon.ico ├── images │ ├── robot_1.png │ ├── robot_2.png │ ├── robot_3.png │ ├── robot_4.png │ ├── team │ │ ├── avi.jpg │ │ ├── eliya.jpg │ │ ├── harar.jpg │ │ ├── ioan.jpg │ │ ├── levi.jpg │ │ ├── meir.jpg │ │ ├── meshi.jpg │ │ ├── orit.jpg │ │ ├── tudor.jpg │ │ └── about_icon.png │ ├── main_image.gif │ ├── button_icon.png │ ├── logo_bubble.png │ ├── robot_2_buble.png │ ├── send_button.png │ ├── start_button.png │ ├── download_button.png │ ├── robot_1_bubble.png │ ├── robot_3_bubble.png │ ├── robot_4_bubble.png │ ├── CloudSlang_mobile.png │ ├── docs_video_cover.png │ ├── main_video_cover.png │ ├── send_button_small.png │ ├── workwith │ │ ├── logo_chef.png │ │ ├── logo_git.png │ │ ├── logo_oo.png │ │ ├── logo_consul.png │ │ ├── logo_docker.png │ │ ├── logo_helion.png │ │ ├── logo_heroku.png │ │ ├── logo_vmware.png │ │ ├── logo_cadvisor.png │ │ ├── logo_circleci.png │ │ ├── logo_core_os.png │ │ ├── logo_couchbase.png │ │ ├── logo_jenkins.png │ │ ├── logo_marathon.png │ │ ├── logo_newrelic.png │ │ ├── logo_openshift.png │ │ ├── logo_stackato.png │ │ ├── logo_amazon_aws.png │ │ ├── logo_open_stack.png │ │ ├── logo_twilio_sms.png │ │ ├── logo_digital_ocean.png │ │ ├── logo_google_cloud.png │ │ └── logo_microsoft_azure.png │ ├── community │ │ ├── icon_blog.png │ │ ├── icon_docs.png │ │ ├── icon_email.png │ │ ├── icon_guide.png │ │ ├── icon_slack.png │ │ ├── icon_github.png │ │ ├── icon_roadmap.png │ │ ├── icon_tutorial.png │ │ ├── icon_twitter.png │ │ ├── communicate_image.png │ │ ├── contribute_image.png │ │ ├── icon_mailing_list.png │ │ └── learn_more_image.png │ ├── bullets │ │ ├── icon_agentless.png │ │ ├── icon_ready_made.png │ │ └── icon_process_based.png │ ├── suggest_workflow_image.png │ ├── logos │ │ ├── mf_logo_black_small.png │ │ └── CloudSlang_logo_no-symbol.png │ ├── gettingstarted │ │ ├── download_atom.png │ │ ├── download_deb.png │ │ ├── download_mac.png │ │ ├── download_rhel.png │ │ ├── popup_robot.png │ │ ├── small_v-trans.png │ │ ├── download_linux.png │ │ ├── download_intellij.png │ │ ├── download_windows.png │ │ └── get_started_robot.png │ └── usecases │ │ ├── use_cases_diagram1.png │ │ ├── use_cases_diagram2.png │ │ ├── use_cases_diagram3.png │ │ └── use_cases_diagram4.png ├── scripts │ ├── controllers │ │ ├── nav.js │ │ ├── community.js │ │ ├── footer.js │ │ ├── blog.js │ │ ├── docs.js │ │ ├── contactus.js │ │ ├── carousel.js │ │ ├── gettingstarted.js │ │ └── main.js │ ├── app.js │ ├── lib │ │ └── gplus-youtubeembed.js │ └── services │ │ └── messages.js ├── views │ ├── blog.html │ ├── docs.html │ ├── getstarted.html │ ├── about.html │ ├── banner.html │ ├── suggestworkflow.html │ ├── getideplugins.html │ ├── subscription.html │ ├── bullets.html │ ├── navbar.html │ ├── getstartedtodev.html │ ├── getstartedtorun.html │ ├── main.html │ ├── downloadclibox.html │ ├── usecases.html │ ├── community.html │ ├── footer.html │ └── workwithcarousel.html ├── styles │ ├── pace-theme-minimal.css │ └── tomorrow-night-bright.css ├── sitemap.xml ├── 404.html ├── index.html └── .htaccess ├── Procfile ├── .bowerrc ├── .travis.yml ├── .gitignore ├── app.json ├── todo.txt ├── .editorconfig ├── README.md ├── .jshintrc ├── bower.json ├── index.js ├── package.json ├── CONTRIBUTING.md ├── tasks └── markdown.js ├── LICENSE └── Gruntfile.js /heroku: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /CNAME: -------------------------------------------------------------------------------- 1 | cloudslang.io 2 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto -------------------------------------------------------------------------------- /app/.buildignore: -------------------------------------------------------------------------------- 1 | *.coffee -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: node index.js 2 | -------------------------------------------------------------------------------- /app/robots.txt: -------------------------------------------------------------------------------- 1 | # robotstxt.org 2 | 3 | User-agent: * 4 | -------------------------------------------------------------------------------- /.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory" : "bower_components" 3 | } 4 | -------------------------------------------------------------------------------- /app/loaderio-d4ca38611b503725ced9831539b9423c.txt: -------------------------------------------------------------------------------- 1 | loaderio-d4ca38611b503725ced9831539b9423c -------------------------------------------------------------------------------- /app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/favicon.ico -------------------------------------------------------------------------------- /app/images/robot_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/robot_1.png -------------------------------------------------------------------------------- /app/images/robot_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/robot_2.png -------------------------------------------------------------------------------- /app/images/robot_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/robot_3.png -------------------------------------------------------------------------------- /app/images/robot_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/robot_4.png -------------------------------------------------------------------------------- /app/images/team/avi.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/team/avi.jpg -------------------------------------------------------------------------------- /app/images/main_image.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/main_image.gif -------------------------------------------------------------------------------- /app/images/team/eliya.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/team/eliya.jpg -------------------------------------------------------------------------------- /app/images/team/harar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/team/harar.jpg -------------------------------------------------------------------------------- /app/images/team/ioan.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/team/ioan.jpg -------------------------------------------------------------------------------- /app/images/team/levi.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/team/levi.jpg -------------------------------------------------------------------------------- /app/images/team/meir.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/team/meir.jpg -------------------------------------------------------------------------------- /app/images/team/meshi.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/team/meshi.jpg -------------------------------------------------------------------------------- /app/images/team/orit.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/team/orit.jpg -------------------------------------------------------------------------------- /app/images/team/tudor.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/team/tudor.jpg -------------------------------------------------------------------------------- /app/images/button_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/button_icon.png -------------------------------------------------------------------------------- /app/images/logo_bubble.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/logo_bubble.png -------------------------------------------------------------------------------- /app/images/robot_2_buble.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/robot_2_buble.png -------------------------------------------------------------------------------- /app/images/send_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/send_button.png -------------------------------------------------------------------------------- /app/images/start_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/start_button.png -------------------------------------------------------------------------------- /app/images/download_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/download_button.png -------------------------------------------------------------------------------- /app/images/robot_1_bubble.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/robot_1_bubble.png -------------------------------------------------------------------------------- /app/images/robot_3_bubble.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/robot_3_bubble.png -------------------------------------------------------------------------------- /app/images/robot_4_bubble.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/robot_4_bubble.png -------------------------------------------------------------------------------- /app/images/team/about_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/team/about_icon.png -------------------------------------------------------------------------------- /app/images/CloudSlang_mobile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/CloudSlang_mobile.png -------------------------------------------------------------------------------- /app/images/docs_video_cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/docs_video_cover.png -------------------------------------------------------------------------------- /app/images/main_video_cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/main_video_cover.png -------------------------------------------------------------------------------- /app/images/send_button_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/send_button_small.png -------------------------------------------------------------------------------- /app/images/workwith/logo_chef.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/workwith/logo_chef.png -------------------------------------------------------------------------------- /app/images/workwith/logo_git.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/workwith/logo_git.png -------------------------------------------------------------------------------- /app/images/workwith/logo_oo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/workwith/logo_oo.png -------------------------------------------------------------------------------- /app/images/community/icon_blog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/community/icon_blog.png -------------------------------------------------------------------------------- /app/images/community/icon_docs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/community/icon_docs.png -------------------------------------------------------------------------------- /app/images/community/icon_email.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/community/icon_email.png -------------------------------------------------------------------------------- /app/images/community/icon_guide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/community/icon_guide.png -------------------------------------------------------------------------------- /app/images/community/icon_slack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/community/icon_slack.png -------------------------------------------------------------------------------- /app/images/workwith/logo_consul.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/workwith/logo_consul.png -------------------------------------------------------------------------------- /app/images/workwith/logo_docker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/workwith/logo_docker.png -------------------------------------------------------------------------------- /app/images/workwith/logo_helion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/workwith/logo_helion.png -------------------------------------------------------------------------------- /app/images/workwith/logo_heroku.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/workwith/logo_heroku.png -------------------------------------------------------------------------------- /app/images/workwith/logo_vmware.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/workwith/logo_vmware.png -------------------------------------------------------------------------------- /app/images/bullets/icon_agentless.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/bullets/icon_agentless.png -------------------------------------------------------------------------------- /app/images/bullets/icon_ready_made.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/bullets/icon_ready_made.png -------------------------------------------------------------------------------- /app/images/community/icon_github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/community/icon_github.png -------------------------------------------------------------------------------- /app/images/community/icon_roadmap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/community/icon_roadmap.png -------------------------------------------------------------------------------- /app/images/community/icon_tutorial.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/community/icon_tutorial.png -------------------------------------------------------------------------------- /app/images/community/icon_twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/community/icon_twitter.png -------------------------------------------------------------------------------- /app/images/suggest_workflow_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/suggest_workflow_image.png -------------------------------------------------------------------------------- /app/images/workwith/logo_cadvisor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/workwith/logo_cadvisor.png -------------------------------------------------------------------------------- /app/images/workwith/logo_circleci.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/workwith/logo_circleci.png -------------------------------------------------------------------------------- /app/images/workwith/logo_core_os.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/workwith/logo_core_os.png -------------------------------------------------------------------------------- /app/images/workwith/logo_couchbase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/workwith/logo_couchbase.png -------------------------------------------------------------------------------- /app/images/workwith/logo_jenkins.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/workwith/logo_jenkins.png -------------------------------------------------------------------------------- /app/images/workwith/logo_marathon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/workwith/logo_marathon.png -------------------------------------------------------------------------------- /app/images/workwith/logo_newrelic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/workwith/logo_newrelic.png -------------------------------------------------------------------------------- /app/images/workwith/logo_openshift.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/workwith/logo_openshift.png -------------------------------------------------------------------------------- /app/images/workwith/logo_stackato.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/workwith/logo_stackato.png -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - '0.10' 4 | before_script: 5 | - 'npm install -g bower grunt-cli' 6 | - 'bower install' 7 | -------------------------------------------------------------------------------- /app/images/logos/mf_logo_black_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/logos/mf_logo_black_small.png -------------------------------------------------------------------------------- /app/images/workwith/logo_amazon_aws.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/workwith/logo_amazon_aws.png -------------------------------------------------------------------------------- /app/images/workwith/logo_open_stack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/workwith/logo_open_stack.png -------------------------------------------------------------------------------- /app/images/workwith/logo_twilio_sms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/workwith/logo_twilio_sms.png -------------------------------------------------------------------------------- /app/images/bullets/icon_process_based.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/bullets/icon_process_based.png -------------------------------------------------------------------------------- /app/images/community/communicate_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/community/communicate_image.png -------------------------------------------------------------------------------- /app/images/community/contribute_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/community/contribute_image.png -------------------------------------------------------------------------------- /app/images/community/icon_mailing_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/community/icon_mailing_list.png -------------------------------------------------------------------------------- /app/images/community/learn_more_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/community/learn_more_image.png -------------------------------------------------------------------------------- /app/images/gettingstarted/download_atom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/gettingstarted/download_atom.png -------------------------------------------------------------------------------- /app/images/gettingstarted/download_deb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/gettingstarted/download_deb.png -------------------------------------------------------------------------------- /app/images/gettingstarted/download_mac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/gettingstarted/download_mac.png -------------------------------------------------------------------------------- /app/images/gettingstarted/download_rhel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/gettingstarted/download_rhel.png -------------------------------------------------------------------------------- /app/images/gettingstarted/popup_robot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/gettingstarted/popup_robot.png -------------------------------------------------------------------------------- /app/images/gettingstarted/small_v-trans.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/gettingstarted/small_v-trans.png -------------------------------------------------------------------------------- /app/images/usecases/use_cases_diagram1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/usecases/use_cases_diagram1.png -------------------------------------------------------------------------------- /app/images/usecases/use_cases_diagram2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/usecases/use_cases_diagram2.png -------------------------------------------------------------------------------- /app/images/usecases/use_cases_diagram3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/usecases/use_cases_diagram3.png -------------------------------------------------------------------------------- /app/images/usecases/use_cases_diagram4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/usecases/use_cases_diagram4.png -------------------------------------------------------------------------------- /app/images/workwith/logo_digital_ocean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/workwith/logo_digital_ocean.png -------------------------------------------------------------------------------- /app/images/workwith/logo_google_cloud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/workwith/logo_google_cloud.png -------------------------------------------------------------------------------- /app/images/gettingstarted/download_linux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/gettingstarted/download_linux.png -------------------------------------------------------------------------------- /app/images/workwith/logo_microsoft_azure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/workwith/logo_microsoft_azure.png -------------------------------------------------------------------------------- /app/images/gettingstarted/download_intellij.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/gettingstarted/download_intellij.png -------------------------------------------------------------------------------- /app/images/gettingstarted/download_windows.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/gettingstarted/download_windows.png -------------------------------------------------------------------------------- /app/images/gettingstarted/get_started_robot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/gettingstarted/get_started_robot.png -------------------------------------------------------------------------------- /app/images/logos/CloudSlang_logo_no-symbol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudSlang/CloudSlang.github.io/HEAD/app/images/logos/CloudSlang_logo_no-symbol.png -------------------------------------------------------------------------------- /app/scripts/controllers/nav.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('cloudSlangWebsiteApp') 4 | .controller('HeaderController', function () { 5 | }); 6 | -------------------------------------------------------------------------------- /app/scripts/controllers/community.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('cloudSlangWebsiteApp') 4 | .controller('CommunityCtrl', function () { 5 | }); 6 | -------------------------------------------------------------------------------- /app/scripts/controllers/footer.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('cloudSlangWebsiteApp') 4 | .controller('FooterCtrl', function () { 5 | 6 | }); 7 | -------------------------------------------------------------------------------- /app/scripts/controllers/blog.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('cloudSlangWebsiteApp') 4 | .controller('BlogCtrl', function () { 5 | window.location.replace('https://blog.cloudslang.io'); 6 | }); 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | public 4 | .tmp 5 | .sass-cache 6 | bower_components 7 | logs/* 8 | !.gitkeep 9 | tmp 10 | .DS_Store 11 | .idea 12 | *.log 13 | *.iml 14 | .project 15 | .settings/ 16 | app/views/docs/generated/* 17 | -------------------------------------------------------------------------------- /app/scripts/controllers/docs.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('cloudSlangWebsiteApp') 4 | .controller('DocsCtrl', function () { 5 | window.location.replace('https://cloudslang-docs.readthedocs.io/en/latest/'); 6 | }); 7 | -------------------------------------------------------------------------------- /app/views/blog.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

Loading blog...

4 |
5 |
6 | -------------------------------------------------------------------------------- /app/views/docs.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

Loading documentation...

4 |
5 |
6 | -------------------------------------------------------------------------------- /app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "CloudSlang-site", 3 | "description": "this the CloudSlang project site", 4 | "website": "https://cloudslang.io", 5 | "keywords": [ 6 | "CloudSlang slang" 7 | ], 8 | "env": { 9 | "BUILDPACK_URL": "https://github.com/mbuchetics/heroku-buildpack-nodejs-grunt.git", 10 | "NODE_ENV": "production" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /todo.txt: -------------------------------------------------------------------------------- 1 | - Getting Started - Orit - In progress 2 | - Logo - DONE 3 | - Fork icons - DONE 4 | - Footer (terms and so on) - DONE 5 | - Fix navigation mark issue - DONE 6 | - Fonts - DONE 7 | - Contact us, server - DONE 8 | - All icons (logo, arrow, favicon, header image, bullets) - Doron - In progress 9 | - About us - Doron - In progress 10 | - Use cases - Doron 11 | - Change email of contact us sender - Doron -------------------------------------------------------------------------------- /app/views/getstarted.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |
5 | 6 |
7 |
8 |
9 |
10 |
11 |
12 | 13 | 14 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig helps developers define and maintain consistent 2 | # coding styles between different editors and IDEs 3 | # editorconfig.org 4 | 5 | root = true 6 | 7 | 8 | [*] 9 | 10 | # Change these settings to your own preference 11 | indent_style = space 12 | indent_size = 4 13 | 14 | # We recommend you to keep these unchanged 15 | end_of_line = lf 16 | charset = utf-8 17 | trim_trailing_whitespace = true 18 | insert_final_newline = true 19 | 20 | [*.md] 21 | trim_trailing_whitespace = false 22 | -------------------------------------------------------------------------------- /app/styles/pace-theme-minimal.css: -------------------------------------------------------------------------------- 1 | /* This is a compiled file, you should be editing the file in the templates directory */ 2 | .pace { 3 | -webkit-pointer-events: none; 4 | pointer-events: none; 5 | 6 | -webkit-user-select: none; 7 | -moz-user-select: none; 8 | user-select: none; 9 | } 10 | 11 | .pace-inactive { 12 | display: none; 13 | } 14 | 15 | .pace .pace-progress { 16 | background: #eb7a55; 17 | position: fixed; 18 | z-index: 2000; 19 | top: 0; 20 | right: 100%; 21 | width: 100%; 22 | height: 2px; 23 | } 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CloudSlang.github.io 2 | CloudSlang website [https://cloudslang.io](https://cloudslang.io) 3 | 4 | ## Build and start server 5 | 6 | ```sh 7 | npm install 8 | npm install -g grunt-cli 9 | 10 | grunt build 11 | grunt serve (will start the server on port 9000) 12 | ``` 13 | **or** 14 | ```sh 15 | grunt serve-express (will start express node server on port 9001) 16 | ``` 17 | 18 | ## Deploying to Heroku 19 | 20 | Alternatively, you can deploy your own copy of the app using this button: 21 | 22 | [![Deploy to Heroku](https://www.herokucdn.com/deploy/button.png)](https://heroku.com/deploy) 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "node": true, 3 | "browser": true, 4 | "esnext": true, 5 | "bitwise": true, 6 | "camelcase": true, 7 | "curly": true, 8 | "eqeqeq": true, 9 | "immed": true, 10 | "indent": 2, 11 | "latedef": true, 12 | "newcap": true, 13 | "noarg": true, 14 | "quotmark": "single", 15 | "regexp": true, 16 | "undef": true, 17 | "unused": true, 18 | "strict": true, 19 | "trailing": true, 20 | "smarttabs": true, 21 | "globals": { 22 | "angular": false, 23 | "$": false, 24 | "_": false, 25 | "hljs": false 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/views/about.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | 9 | 10 |
11 |

{{$root.messages.aboutUsByHp}}

12 |

{{$root.messages.aboutUsWhoWeAreText}}

13 |
14 |
15 |
16 |
17 |
18 | -------------------------------------------------------------------------------- /app/views/banner.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |

{{ $root.messages.bannerTitle }}

5 |

{{ $root.messages.bannerDesc }}

6 |
7 | 15 |
16 |
17 | -------------------------------------------------------------------------------- /app/scripts/controllers/contactus.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('cloudSlangWebsiteApp') 4 | .controller('ContactUsCtrl', function ($scope, $rootScope, ContactUsService) { 5 | $scope.submitForm = function (mailOptions) { 6 | 7 | function onSuccess() { 8 | $scope.submitSuccess = true; 9 | $scope.submitted = true; 10 | $scope.submitMessage = $rootScope.messages.contactSuccess; 11 | } 12 | 13 | function onError() { 14 | $scope.submitSuccess = false; 15 | $scope.submitted = true; 16 | $scope.submitMessage = $rootScope.messages.contactFailure; 17 | } 18 | 19 | ContactUsService.contactUs(mailOptions, onSuccess, onError); 20 | }; 21 | }); -------------------------------------------------------------------------------- /app/scripts/controllers/carousel.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('cloudSlangWebsiteApp') 4 | .controller('CarouselCtrl', function ($scope) { 5 | 6 | $scope.init = function () { 7 | 8 | $('.carousel[data-type="multi"] .item').each(function () { 9 | var next = $(this).next(); 10 | if (!next.length) { 11 | next = $(this).siblings(':first'); 12 | } 13 | next.children(':first-child').clone().appendTo($(this)); 14 | 15 | for (var i = 0; i < 2; i++) { 16 | next = next.next(); 17 | if (!next.length) { 18 | next = $(this).siblings(':first'); 19 | } 20 | 21 | next.children(':first-child').clone().appendTo($(this)); 22 | } 23 | 24 | }); 25 | }; 26 | 27 | $scope.init(); 28 | 29 | }); 30 | -------------------------------------------------------------------------------- /app/views/suggestworkflow.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |

{{ $root.messages.suggestWorkFlowTitle }}

5 |

{{ $root.messages.suggestWorkFlowDescription1 }}

6 |

{{ $root.messages.suggestWorkFlowDescription2 }}

7 |
8 |
9 | 10 |
11 | 16 |
17 |
18 | -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "score-website", 3 | "version": "0.0.0", 4 | "dependencies": { 5 | "angular": "~1.2.8", 6 | "json3": "~3.3.1", 7 | "es5-shim": "~3.1.0", 8 | "bootstrap": "~3.2.0", 9 | "angular-animate": "~1.2.0", 10 | "angular-route": "~1.2.0", 11 | "angular-bootstrap": "~0.11.2", 12 | "jquery.easing": "~1.3.1", 13 | "string-format-js": "~0.1.2", 14 | "lodash": "~3.6.0", 15 | "jQuery-One-Page-Nav": "~3.0.0", 16 | "jquery.transit": "~0.9.12", 17 | "highlightjs": "~8.3.0", 18 | "typed.js": "*", 19 | "pace": "*", 20 | "components-font-awesome": "~4.6.3", 21 | "angular-highlightjs": "*", 22 | "jquery": "<=2.1.4", 23 | "angular-touch": "1.4.1", 24 | "angular-mailchimp": "~0.0.3", 25 | "angulartics": "~0.20.1", 26 | "angulartics-google-analytics": "~0.1.1" 27 | }, 28 | "devDependencies": { 29 | "angular-mocks": "~1.2.0", 30 | "angular-scenario": "~1.2.0" 31 | }, 32 | "appPath": "app", 33 | "resolutions": { 34 | "jquery": ">=1.8.0", 35 | "angular": ">=1.2.8", 36 | "angulartics": "~1.0.0" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /app/sitemap.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | http://www.cloudslang.io/ 6 | 2015-10-13T10:35:44+00:00 7 | weekly 8 | 1.00 9 | 10 | 11 | http://www.cloudslang.io/#/getstarted 12 | 2015-10-13T10:35:44+00:00 13 | weekly 14 | 0.9 15 | 16 | 17 | http://www.cloudslang.io/#/community 18 | 2015-10-13T10:35:44+00:00 19 | weekly 20 | 0.8 21 | 22 | 23 | http://www.cloudslang.io/#/about 24 | 2015-10-13T10:35:44+00:00 25 | weekly 26 | 0.7 27 | 28 | 29 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | var http = require('http'); 2 | var bodyParser = require('body-parser'); 3 | var express = require('express'); 4 | var morgan = require('morgan'); 5 | var compress = require('compression'); 6 | var expressEnforcesSsl = require('express-enforces-ssl'); 7 | var app = express(); 8 | 9 | app.enable('trust proxy'); 10 | app.use(expressEnforcesSsl()); 11 | app.use(compress()); 12 | app.use(morgan('dev')); 13 | app.use(express.static(__dirname + '/public')); 14 | app.use(bodyParser.json()); 15 | app.use(bodyParser.urlencoded({ 16 | extended: true 17 | })); 18 | 19 | app.get('/status',function(req, res){ 20 | res.send('/status GET OK'); 21 | }); 22 | 23 | app.get('/download',function(req, res){ 24 | res.redirect("https://github.com/CloudSlang/cloud-slang/releases/download/cloudslang-2.0.5/cslang-cli-with-content.zip") 25 | }); 26 | 27 | app.use(function(req, res) { 28 | var err = new Error('Not Found'); 29 | err.status = 404; 30 | res.sendFile(__dirname + '/public/404.html') 31 | }); 32 | 33 | 34 | app.set('port', (process.env.PORT || 5000)); 35 | 36 | // Start the server 37 | http.createServer(app).listen(app.get('port'), function() { 38 | console.log('Express server listening on port: ' + app.get('port')); 39 | }); 40 | -------------------------------------------------------------------------------- /app/scripts/app.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular 4 | .module('cloudSlangWebsiteApp', [ 5 | 'ngAnimate', 6 | 'ngRoute', 7 | 'hljs', 8 | 'mailchimp', 9 | 'ui.bootstrap', 10 | 'angulartics', 11 | 'angulartics.google.analytics' 12 | ]) 13 | .config(function ($routeProvider) { 14 | $routeProvider 15 | .when('/', { 16 | templateUrl: 'views/main.html', 17 | controller: 'MainCtrl' 18 | }) 19 | .when('/docs', { 20 | templateUrl: 'views/docs.html', 21 | controller: 'DocsCtrl' 22 | }) 23 | .when('/blog', { 24 | templateUrl: 'views/blog.html', 25 | controller: 'BlogCtrl' 26 | }) 27 | .when('/about', { 28 | templateUrl: 'views/about.html', 29 | controller: 'MainCtrl' 30 | }) 31 | .when('/getstarted', { 32 | templateUrl: 'views/getstarted.html', 33 | controller: 'GettingStartedCtrl' 34 | }) 35 | .when('/community', { 36 | templateUrl: 'views/community.html', 37 | controller: 'CommunityCtrl' 38 | }) 39 | .otherwise({ 40 | redirectTo: '/' 41 | }); 42 | }); 43 | -------------------------------------------------------------------------------- /app/views/getideplugins.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 7 | Get Now 8 | 9 |

{{$root.messages.ideDownloadTextIntelliJ}}

10 |

{{$root.messages.ideDownloadText}}

11 | 12 | 15 | Get Now 16 | 17 |

{{$root.messages.ideDownloadTextAtom}}

18 |

{{$root.messages.ideDownloadText}}

19 |

{{$root.messages.ideDownloadNote}}

20 |
21 |
22 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "scorewebsite", 3 | "version": "0.0.0", 4 | "dependencies": { 5 | "body-parser": "^1.9.2", 6 | "bower": "*", 7 | "compression": "^1.3.0", 8 | "express": "^4.10.1", 9 | "express-enforces-ssl": "^1.1.0", 10 | "grunt": "^0.4.5", 11 | "grunt-cli": "1.3.2", 12 | "grunt-autoprefixer": "^0.7.3", 13 | "grunt-concurrent": "^0.5.0", 14 | "grunt-contrib-clean": "^0.5.0", 15 | "grunt-contrib-concat": "^0.4.0", 16 | "grunt-contrib-connect": "^0.7.1", 17 | "grunt-contrib-copy": "^0.5.0", 18 | "grunt-contrib-cssmin": "^0.12.2", 19 | "grunt-contrib-htmlmin": "^0.3.0", 20 | "grunt-contrib-imagemin": "^1.0.0", 21 | "grunt-contrib-jshint": "^0.10.0", 22 | "grunt-contrib-uglify": "^0.8.0", 23 | "grunt-contrib-watch": "^0.6.1", 24 | "grunt-express-server": "^0.4.19", 25 | "grunt-filerev": "^0.2.1", 26 | "grunt-google-cdn": "^0.4.0", 27 | "grunt-newer": "^0.7.0", 28 | "grunt-ng-annotate": "^0.3.0", 29 | "grunt-open": "^0.2.3", 30 | "grunt-svgmin": "^0.4.0", 31 | "grunt-usemin": "^2.1.1", 32 | "grunt-wiredep": "^1.7.0", 33 | "highlight.js": "^8.3.0", 34 | "jshint-stylish": "^0.2.0", 35 | "load-grunt-tasks": "^0.4.0", 36 | "lodash": "^3.6.0", 37 | "marked": "^0.3.2", 38 | "morgan": "^1.3.2", 39 | "nodemailer": "^0.3.x", 40 | "time-grunt": "^0.3.1" 41 | }, 42 | "engines": { 43 | "node": "8.16.1" 44 | }, 45 | "scripts": { 46 | "postinstall": "bower install" 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /app/scripts/controllers/gettingstarted.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('cloudSlangWebsiteApp') 4 | .controller('GettingStartedCtrl', function () { 5 | 6 | $('#delay').on('click', function (e) { 7 | 8 | e.preventDefault(); //stop the browser from following 9 | window.location.href = 'https://github.com/CloudSlang/cloud-slang/releases/download/cloudslang-2.0.5/cslang-cli-with-content.zip'; 10 | 11 | 12 | var $target = $($(this).data('target')); 13 | $target.data('triggered', true); 14 | setTimeout(function () { 15 | if ($target.data('triggered')) { 16 | $target.modal('show') 17 | .data('triggered', false); // prevents multiple clicks from reopening 18 | } 19 | }, 4000); // milliseconds 20 | return false; 21 | }); 22 | 23 | $('#delay1').on('click', function (e) { 24 | 25 | e.preventDefault(); //stop the browser from following 26 | window.location.href = 'https://github.com/CloudSlang/cloud-slang/releases/download/cloudslang-2.0.5/cslang-cli-with-content.tar.gz'; 27 | 28 | var $target = $($(this).data('target')); 29 | $target.data('triggered', true); 30 | setTimeout(function () { 31 | if ($target.data('triggered')) { 32 | $target.modal('show') 33 | .data('triggered', false); // prevents multiple clicks from reopening 34 | } 35 | }, 4000); // milliseconds 36 | return false; 37 | }); 38 | }); 39 | -------------------------------------------------------------------------------- /app/views/subscription.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | 6 | 7 | 8 | 9 | 10 | 12 | 15 |
16 | 17 | 18 |
19 | 20 |
21 | 22 | 23 |
24 | 25 |
26 |
27 |
28 |
29 | -------------------------------------------------------------------------------- /app/styles/tomorrow-night-bright.css: -------------------------------------------------------------------------------- 1 | /* Tomorrow Night Bright Theme */ 2 | /* Original theme - https://github.com/chriskempson/tomorrow-theme */ 3 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 4 | 5 | /* Tomorrow Comment */ 6 | .hljs-comment, 7 | .hljs-title { 8 | color: #969896; 9 | } 10 | 11 | /* Tomorrow Red */ 12 | .hljs-variable, 13 | .hljs-attribute, 14 | .hljs-tag, 15 | .hljs-regexp, 16 | .ruby .hljs-constant, 17 | .xml .hljs-tag .hljs-title, 18 | .xml .hljs-pi, 19 | .xml .hljs-doctype, 20 | .html .hljs-doctype, 21 | .css .hljs-id, 22 | .css .hljs-class, 23 | .css .hljs-pseudo { 24 | color: #d54e53; 25 | } 26 | 27 | /* Tomorrow Orange */ 28 | .hljs-number, 29 | .hljs-preprocessor, 30 | .hljs-pragma, 31 | .hljs-built_in, 32 | .hljs-literal, 33 | .hljs-params, 34 | .hljs-constant { 35 | color: #e78c45; 36 | } 37 | 38 | /* Tomorrow Yellow */ 39 | .ruby .hljs-class .hljs-title, 40 | .css .hljs-rules .hljs-attribute { 41 | color: #e7c547; 42 | } 43 | 44 | /* Tomorrow Green */ 45 | .hljs-string, 46 | .hljs-value, 47 | .hljs-inheritance, 48 | .hljs-header, 49 | .ruby .hljs-symbol, 50 | .xml .hljs-cdata { 51 | color: #b9ca4a; 52 | } 53 | 54 | /* Tomorrow Aqua */ 55 | .css .hljs-hexcolor { 56 | color: #70c0b1; 57 | } 58 | 59 | /* Tomorrow Blue */ 60 | .hljs-function, 61 | .python .hljs-decorator, 62 | .python .hljs-title, 63 | .ruby .hljs-function .hljs-title, 64 | .ruby .hljs-title .hljs-keyword, 65 | .perl .hljs-sub, 66 | .javascript .hljs-title, 67 | .coffeescript .hljs-title { 68 | color: #7aa6da; 69 | } 70 | 71 | /* Tomorrow Purple */ 72 | .hljs-keyword, 73 | .javascript .hljs-function { 74 | color: #c397d8; 75 | } 76 | 77 | .hljs { 78 | display: block; 79 | overflow-x: auto; 80 | background: black; 81 | color: #eaeaea; 82 | padding: 0.5em; 83 | -webkit-text-size-adjust: none; 84 | } 85 | 86 | .coffeescript .javascript, 87 | .javascript .xml, 88 | .tex .hljs-formula, 89 | .xml .javascript, 90 | .xml .vbscript, 91 | .xml .css, 92 | .xml .hljs-cdata { 93 | opacity: 0.5; 94 | } 95 | -------------------------------------------------------------------------------- /app/views/bullets.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
{{$root.messages.whyCloudSlangTitle}}
5 |
6 |
7 |
8 |
9 |
10 | Process Based 11 |
12 |
13 |
14 |

{{$root.messages.mainBulletsProcessBasedTitle}}


15 |

{{$root.messages.mainBulletsProcessBasedDesc}}

16 |
17 |
18 | 19 |
20 |
21 |
22 | Ready Made 23 |
24 |
25 |
26 |

{{$root.messages.mainBulletsReadyMadeContentTitle}}


27 |

{{$root.messages.mainBulletReadyMadeContentDesc}} 28 |

29 |
30 |
31 | 32 |
33 |
34 |
35 | Agentless 36 |
37 |
38 |
39 |

{{$root.messages.mainBulletsAgentlessTitle}}


40 |

{{$root.messages.mainBulletsAgentlessDesc}} 41 |

42 |
43 |
44 |
45 | -------------------------------------------------------------------------------- /app/scripts/controllers/main.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('cloudSlangWebsiteApp') 4 | .controller('MainCtrl', function ($scope, $rootScope, $document, MessagesService) { 5 | 6 | $rootScope.sections = [ 7 | {id: 'useCases', title: $rootScope.messages.navUseCasesTitle}, 8 | {id: 'suggestWorkflow', title: $rootScope.messages.navSuggestAFlow}, 9 | {id: 'gettingStarted', title: $rootScope.messages.navGettingStartedTitle}, 10 | {id: 'about', title: $rootScope.messages.navAboutTitle}, 11 | 12 | 13 | ]; 14 | 15 | _.forEach($('.navbar-collapse'), function (target) { 16 | $(target).collapse({'toggle': false}); 17 | }); 18 | 19 | // hide menu bar on click (small resolutions) 20 | $document.on('click.nav', '.navbar-collapse.in', function () { 21 | _.forEach($('.navbar-collapse'), function (target) { 22 | $(target).collapse('hide'); 23 | }); 24 | }); 25 | 26 | }).directive('loadingPage', [function () { 27 | return { 28 | restrict: 'E', 29 | template: '
', 30 | link: function () { 31 | Pace.on('done', function () { 32 | $('div.loading-page').fadeOut('slow'); 33 | }); 34 | } 35 | }; 36 | }]).directive('scrollTop', [function() { 37 | return { 38 | restrict: 'A', 39 | template: '', 40 | link: function(scope, element) { 41 | element.on('click', function(event) { 42 | event.preventDefault(); 43 | $('html, body').animate({scrollTop: 0}, 'slow', function () { 44 | $('.header .nav .current').removeClass('current'); 45 | }); 46 | }); 47 | } 48 | }; 49 | }]).directive('youtubeEmbed', [function () { 50 | return { 51 | restrict: 'A', 52 | template: '', 53 | link: function (scope, element) { 54 | var src = $(element).find('img')[0].src; 55 | optimizeYouTubeEmbeds(src); 56 | } 57 | }; 58 | }]); 59 | -------------------------------------------------------------------------------- /app/views/navbar.html: -------------------------------------------------------------------------------- 1 | 36 | -------------------------------------------------------------------------------- /app/views/getstartedtodev.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |

{{ $root.messages.getStartedToDevTitle}}

5 |

{{ $root.messages.getStartedToDevTitleDesc }}

6 |

{{ $root.messages.getStartedToDevPrereq }}


7 |
8 |
9 |
1
10 |

{{$root.messages.getStartedToDevForkHeader}}

11 |

{{ $root.messages.getStartedToDevForkText }}

12 |

{{ $root.messages.getStartedToDevForkText1 }}


13 |

14 | {{ $root.messages.getStartedToDevForkButton }} 15 |

16 |
17 |
18 |

2

19 |

{{$root.messages.getStartedToDevDHeader}}

20 |

{{ $root.messages.getStartedToDevDText}}

21 |

{{ $root.messages.getStartedToDevDText1}}

22 |
23 |

{{ $root.messages.getStartedToDevDText2}}

24 | 25 |
26 |
27 |

3

28 |

{{$root.messages.getStartedToLearnHeader}}

29 |

{{ $root.messages.getStartedToLearnText}}

30 |

{{ $root.messages.getStartedToLearnText1}}


31 |

32 | {{$root.messages.docsLink + " 33 | "}} 34 | 35 |

36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 | -------------------------------------------------------------------------------- /app/scripts/lib/gplus-youtubeembed.js: -------------------------------------------------------------------------------- 1 | // gplus-youtubeembed - Makes embedded YouTube video iframes Google+ style to improve page loading speed. 2 | // Copyright (c) 2013 by Arun - http://www.skipser.com 3 | // Licensed under the GNU LGPL license: http://www.gnu.org/copyleft/lesser.html 4 | // For usage details, read - http://www.skipser.com/510 5 | 'use strict'; 6 | 7 | // Call this function at the end of the closing tag. 8 | function optimizeYouTubeEmbeds(imgUrl) { 9 | // Get all iframes 10 | var frames = document.getElementsByTagName( 'iframe' ); 11 | 12 | // Loop through each iframe in the page. 13 | for ( var i = 0; i < frames.length; i++ ) { 14 | 15 | // Find out youtube embed iframes. 16 | if ( frames[ i ].src && frames[ i ].src.length > 0 && frames[ i ].src.match(/http(s)?:\/\/www\.youtube\.com/)) { 17 | 18 | // For Youtube iframe, extract src and id. 19 | var src=frames[i].src; 20 | var p = /^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/; 21 | var id=(src.match(p) ? RegExp.$1 : false); 22 | if(id === false) { continue;} 23 | 24 | // Get width and height. 25 | if(src === '') {continue;} 26 | 27 | // The image+button overlay code. 28 | var code= '
' + 29 | '' + 30 | '' + 31 | '
' + 32 | '
' + 33 | '
'; 34 | 35 | // Replace the iframe with a the image+button code. 36 | var div = document.createElement('div'); 37 | div.innerHTML=code; 38 | div=div.firstChild; 39 | frames[i].parentNode.replaceChild(div, frames[i]); 40 | i--; 41 | } 42 | } 43 | } 44 | // Replace preview image of a video with it's iframe. 45 | function LoadYoutubeVidOnPreviewClick(id) { 46 | var code= '
' + 47 | '' + 48 | '
'; 49 | var iframe = document.createElement('div'); 50 | iframe.innerHTML=code; 51 | iframe=iframe.firstChild; 52 | var div=document.getElementById('skipser-youtubevid-' + id); 53 | div.parentNode.replaceChild( iframe, div); 54 | } 55 | -------------------------------------------------------------------------------- /app/views/getstartedtorun.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |

{{$root.messages.getStartedToRunTitle}}

5 |

{{ $root.messages.getStartedToRunTitleDesc }}

6 |

{{ $root.messages.getStartedToRunPrereq }}


7 |
8 |
9 |
1
10 |

{{$root.messages.detailedDownloadCliHeader}}

11 |

{{ $root.messages.detailedDownloadCliText }}

12 |

{{ $root.messages.detailedDownloadCliText1 }}


13 |

{{ $root.messages.detailedDownloadCliText2 }} 15 | {{ $root.messages.detailedDownloadCliText3 }}

16 |
{{ $root.messages.DockerRun }}
17 |
18 |
19 |

2

20 |

{{$root.messages.detailedTriggerFlowHeader}}

21 |

{{ $root.messages.detailedTriggerFlowText1}}

22 |
{{$root.messages.detailedTriggerFlowText2}}
23 |
24 |

{{$root.messages.detailedTriggerFlowText4 }}

25 | 26 |
27 |
28 |

3

29 |

{{$root.messages.detailedLearnMoreHeader}}

30 |

{{ $root.messages.popUpBody + " " }} 31 | {{$root.messages.videoLink + " "}} 34 | 35 | {{$root.messages.docsLink + " 36 | "}} 37 | {{ $root.messages.popUpBody2 + " "}} 38 | {{$root.messages.tutorialLink }} 40 | . 41 |

42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 | -------------------------------------------------------------------------------- /app/views/main.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |

{{$root.messages.headerMainTitle}}

9 |

{{$root.messages.headerSubTitle}}

10 |

Orchestrate today, share tomorrow.

11 | 12 | 13 | 20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | 28 | 29 |
30 |

{{$root.messages.headerMainTitle}}

31 |

{{$root.messages.headerSubTitle}}

32 |

Orchestrate today, share tomorrow.

33 |
34 | 41 |
42 |

{{$root.messages.worksWith}}

43 |
44 |
45 |
46 |
47 |
48 |
49 |

{{$root.messages.whatIsTitle}}


50 | 51 |

{{$root.messages.whatIsDescription}}

52 | 53 |
54 |
55 | 56 |
57 |
59 | 61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /app/404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Page Not Found :( 6 | 141 | 142 | 143 |
144 |

Not found :(

145 |

Sorry, but the page you were trying to view does not exist.

146 |

It looks like this was the result of either:

147 | 151 | 154 | 155 |
156 | 157 | 158 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # CloudSlang Contribution Guide 2 | 3 | We welcome and encourage community contributions to CloudSlang. 4 | Please familiarize yourself with the Contribution Guidelines and Project Roadmap before contributing. 5 | There are many ways to help CloudSlang: 6 | * Report issues 7 | * Fix issues 8 | * Improve the documentation 9 | 10 | 11 | ## Contributing Code 12 | 13 | The best way to directly collaborate with the project contributors is through GitHub: https://github.com/CloudSlang 14 | * If you want to contribute to our code by either fixing a problem or creating a new feature, please open a GitHub pull request. 15 | * If you want to raise an issue such as a defect, an enhancement request or a general issue, please open a GitHub issue. 16 | 17 | 18 | Note that all patches from all contributors get reviewed. 19 | After a pull request is made, other contributors will offer feedback. If the patch passes review, a maintainer will accept it with a comment. 20 | When a pull request fails testing, the author is expected to update the pull request to address the failure until it passes testing and the pull request merges successfully. 21 | 22 | At least one review from a maintainer is required for all patches (even patches from maintainers). 23 | 24 | 25 | ## Developer's Certificate of Origin 26 | 27 | All contributions must include acceptance of the DCO: 28 | 29 | Developer Certificate of Origin 30 | Version 1.1 31 | 32 | Copyright (C) 2004, 2006 The Linux Foundation and its contributors. 33 | 660 York Street, Suite 102, 34 | San Francisco, CA 94110 USA 35 | 36 | Everyone is permitted to copy and distribute verbatim copies of this 37 | license document, but changing it is not allowed. 38 | 39 | 40 | Developer's Certificate of Origin 1.1 41 | 42 | By making a contribution to this project, I certify that: 43 | 44 | (a) The contribution was created in whole or in part by me and I 45 | have the right to submit it under the open source license 46 | indicated in the file; or 47 | 48 | (b) The contribution is based upon previous work that, to the best 49 | of my knowledge, is covered under an appropriate open source 50 | license and I have the right under that license to submit that 51 | work with modifications, whether created in whole or in part 52 | by me, under the same open source license (unless I am 53 | permitted to submit under a different license), as indicated 54 | in the file; or 55 | 56 | (c) The contribution was provided directly to me by some other 57 | person who certified (a), (b) or (c) and I have not modified 58 | it. 59 | 60 | (d) I understand and agree that this project and the contribution 61 | are public and that a record of the contribution (including all 62 | personal information I submit with it, including my sign-off) is 63 | maintained indefinitely and may be redistributed consistent with 64 | this project or the open source license(s) involved. 65 | 66 | ### Sign your work 67 | 68 | To accept the DCO, simply add this line to each commit message with your name and email address (git commit -s will do this for you): 69 | 70 | Signed-off-by: Jane Example 71 | For legal reasons, no anonymous or pseudonymous contributions are accepted. 72 | 73 | ## Pull Requests 74 | We encourage and support contributions from the community. No fix is too small. We strive to process all pull requests as soon as possible and with constructive feedback. If your pull request is not accepted at first, please try again after addressing the feedback you received. 75 | To make a pull request you will need a GitHub account. For help, see GitHub's documentation on forking and pull requests. (https://help.github.com/articles/using-pull-requests/ ) 76 | 77 | Normally, all pull requests must include tests that test your change. Occasionally, a change will be very difficult to test. In those cases, please include a note in your commit message explaining why tests are not included. 78 | 79 | 80 | ##Conduct 81 | 82 | Whether you are a regular contributor or a newcomer, we care about making this community a safe place for you. 83 | 84 | We are committed to providing a friendly, safe and welcoming environment for all regardless of their background and the extent of their contributions. 85 | Please avoid using nicknames that might detract from a friendly, safe and welcoming environment for all. 86 | Be kind and courteous. 87 | Those who insult, demean or harass anyone will be excluded from interaction. In particular, behavior that excludes people in socially marginalized groups will not be tolerated. 88 | We welcome discussion about creating a welcoming, safe and productive environment for the community. If you have any questions, feedback or concerns please let us know. (info@cloudslang.io) 89 | -------------------------------------------------------------------------------- /app/views/downloadclibox.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 52 | 53 | 54 | 80 | 81 | 82 |
83 | -------------------------------------------------------------------------------- /app/views/usecases.html: -------------------------------------------------------------------------------- 1 |
2 |

{{$root.messages.useCasesTitle}}

3 | 4 |
5 |
6 |

{{$root.messages.useCasesMigrateContainerTitle}}

7 |

{{$root.messages.useCasesMigrateContainerDesc}}

8 |

9 | 12 | 13 | View in GitHub 14 | 15 | 18 | 19 | Video 20 | 21 |

22 | 23 | Use Case 2 25 |
26 | 29 |
30 | 31 |
32 |
33 |

{{$root.messages.useCasesCoreOsTitle}}

34 |

{{$root.messages.useCasesCoreOsDesc}}

35 |

36 | 39 | 40 | View in GitHub 41 | 42 | 45 | 46 | Blog 47 | 48 | 51 | 52 | Video 53 | 54 |

55 | Use Case 1 57 |
58 | 61 |
62 | 63 |
64 |
65 |

{{$root.messages.useCasesOpenStackTitle}}

66 |

{{$root.messages.useCasesOpenStackDesc}}

67 |

68 | 71 | 72 | View in GitHub 73 | 74 |

75 | Use Case 4 77 |
78 | 81 |
82 | 87 |
88 | -------------------------------------------------------------------------------- /tasks/markdown.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = function (grunt) { 4 | 5 | var marked = require('marked'); 6 | var hljs = require('highlight.js'); 7 | var _ = require('lodash'); 8 | 9 | function escapeId(text) { 10 | return text.toLowerCase().replace(/[^\w]+/g, '-'); 11 | } 12 | 13 | grunt.registerMultiTask("marked", "Runs marked plugin to render markdown files", function () { 14 | var options = { 15 | gfm: true, 16 | tables: true, 17 | breaks: false, 18 | pedantic: false, 19 | sanitize: true, 20 | smartLists: true, 21 | smartypants: false, 22 | highlight: true 23 | }; 24 | 25 | var renderer = new marked.Renderer(); 26 | renderer.heading = anchorHeadings; 27 | renderer.table = bootstrapTable; 28 | renderer.link = underLinedLink; 29 | renderer.image = responsiveImage; 30 | options.renderer = renderer; 31 | 32 | // install highlight.js 33 | options.highlight = (function (highlight) { 34 | return function (code) { 35 | return highlight.highlightAuto(code).value; 36 | }; 37 | })(hljs); 38 | 39 | marked.setOptions(options); 40 | 41 | grunt.util.async.forEachLimit(this.files, 25, function (file, next) { 42 | convert(file.src, file.dest, next); 43 | }.bind(this), this.async()); 44 | 45 | function convert(src, dest, next) { 46 | var content = markdown(grunt.file.read(src)); 47 | grunt.file.write(dest, content); 48 | grunt.log.writeln('File "' + dest + '" created.'); 49 | process.nextTick(next); 50 | } 51 | 52 | function markdown(file) { 53 | var content = marked(file); 54 | return '
' + 55 | '
' + content + '
' + 56 | '
'; 57 | } 58 | 59 | function anchorHeadings(text, level) { 60 | var escapedText = escapeId(text); 61 | 62 | return '' + 63 | '' + 65 | '' + 66 | '' + 67 | text + 68 | ''; 69 | } 70 | 71 | function bootstrapTable(header, body) { 72 | return '
' + 73 | '\n' 74 | + '\n' 75 | + header 76 | + '\n' 77 | + '\n' 78 | + body 79 | + '\n' 80 | + '
\n' + 81 | '
' 82 | } 83 | 84 | function underLinedLink(href, title, text) { 85 | var markedLink = new marked.Renderer().link(href, title, text); 86 | return markedLink.replace(" 2 |
3 | 4 | 5 |
6 |
7 |
8 |

{{ $root.messages.communityTitle }}

9 |

{{ $root.messages.communityTitleDesc1 }}

10 |

{{ $root.messages.communityTitleDesc2 }}

11 |
12 |
13 | 14 |
15 | 55 | 56 |
57 | 58 |

{{ $root.messages.communityContribute }}

59 |
60 |

{{ $root.messages.communityContributeDesc }}

61 |
62 |
63 | 66 | 67 | 68 |
69 |
70 | 72 | 73 | 74 |
75 |
76 | 79 | 80 | 81 |
82 |
83 | 84 |
85 | 86 |

{{$root.messages.communityLearnMore}}

87 |
88 |

{{ $root.messages.communityLearnMoreDesc}}

89 |
90 |
91 | 93 | 94 | 95 |
96 |
97 | 99 | 100 | 101 |
102 |
103 | 105 | 106 | 107 |
108 |
109 |
110 |
111 | -------------------------------------------------------------------------------- /app/views/footer.html: -------------------------------------------------------------------------------- 1 | 132 | -------------------------------------------------------------------------------- /app/views/workwithcarousel.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 102 |
103 |
104 |
105 | -------------------------------------------------------------------------------- /app/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | CloudSlang - Orchestration as Code 8 | 10 | 11 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 52 | 53 | 54 | 55 | 58 | 59 | 60 |
61 | 62 |
63 |
64 |
65 |
66 |
67 | 68 | 69 | 77 | 78 | 79 | 85 | 86 | 87 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 147 | 148 | 149 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | 203 | -------------------------------------------------------------------------------- /app/scripts/services/messages.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('cloudSlangWebsiteApp') 4 | .factory('MessagesService', function ($rootScope) { 5 | // App labels 6 | $rootScope.messages = { 7 | // nav bar 8 | navGettingStartedTitle: 'Get Started', 9 | navUseCasesTitle: 'Use Cases', 10 | navAboutTitle: 'Contributors', 11 | navDocumentationTitle: 'Documentation', 12 | navBlogTitle: 'Blog', 13 | navCommunityTitle: 'Community', 14 | navBackToSiteTitle: 'Back To Site', 15 | navSuggestAFlow: 'Suggest a Flow', 16 | navNewsletter: 'Subscribe', 17 | 18 | // header 19 | //headerMainTitle: 'Automate your development and operations using ready-made workflows', 20 | headerMainTitle: 'Open-source orchestration', 21 | headerSubTitle: 'Ready-made workflows', 22 | //headerSubTitleShort: 'Orchestrate today, share tomorrow', 23 | headerDescription: 'CloudSlang is an open source tool for orchestrating cutting edge technologies. It can orchestrate anything you can imagine in an agentless manner.\ ' + 24 | 'You can use or customize ready-made YAML based workflows. They are powerful, shareable and human readable. Modernize your IT with CloudSlang.', 25 | headerStartNow: 'Start Now', 26 | worksWith: 'Works with:', 27 | 28 | // what is cloudslang 29 | whatIsTitle: 'What is CloudSlang?' , 30 | //whatIsDescription: 'CloudSlang is an open source tool for orchestrating cutting edge technologies, such as Docker and CoreOS in an agentless manner.\ ' + 31 | // 'Use ready-made workflows or define your own custom ones. CloudSlang workflows are reusable, shareable and easy to understand.', 32 | whatIsDescription: 'CloudSlang is an open source tool for orchestrating cutting edge technologies. It can orchestrate anything you can imagine in an agentless manner.\ ' + 33 | 'You can use or customize ready-made YAML based workflows. They are powerful, shareable and human readable. Modernize your IT with CloudSlang.', 34 | whatIsDescription2: 'The CloudSlang project is composed of three main parts: the CloudSlang Orchestration Engine,'+ 35 | ' the YAML-based CloudSlang language and the ready-made CloudSlang content.' , 36 | 37 | 38 | 39 | //community 40 | communityTitle: 'Community', 41 | communityTitleDesc1:'Get involved. The CloudSlang project is completely open source. The code, discussions and roadmap are all out in the open on GitHub. ', 42 | communityTitleDesc2: 'Join us in leveraging the power of the community to create the best-in-class orchestration technology.', 43 | communityCommunicate: 'Communicate', 44 | communityCommunicateDesc: 'See what we\'re working on.' + 45 | ' Or tell us what you\'re working on.', 46 | communityContribute:'Contribute', 47 | communityContributeDesc:'Share one of your own workflows, open as issue or fix a bug.', 48 | communityLearnMore:'Learn More', 49 | communityLearnMoreDesc:'Read the docs, work your way through a tutorial or read our blog.', 50 | 51 | 52 | 53 | 54 | //suggest a workflow 55 | suggestWorkFlowTitle: 'Suggest a Workflow', 56 | suggestWorkFlowDescription1: 'Do you have a use case that you\'d like to automate, but it\'s not covered by our ready-made content?', 57 | suggestWorkFlowDescription2: 'We’d be thrilled if you would contribute and share your own content. In the meantime though, you can click below to let the community know what you need.', 58 | suggestWorkFlowButton: 'Suggest a workflow' , 59 | 60 | // footer 61 | footerPrivacy: 'Privacy Policy', 62 | footerTerms: 'Terms of Use', 63 | footerLicense: 'License', 64 | footerLicenseHref: 'Apache License, Version 2.0.', 65 | footerContactUs: 'Contact Us', 66 | footerGooglePlus: 'Google Plus', 67 | footerNewsLetter: 'Subscribe to our Newsletter', 68 | footerYoutube: 'YouTube', 69 | footerTwitter: 'Twitter', 70 | footerGitHub: 'GitHub', 71 | footerContribute: 'How to Contribute', 72 | footerRoadMap: 'Roadmap', 73 | footerSlackChannel: 'Slack', 74 | footerBlog: 'Blogs', 75 | footerDocs: 'Documents', 76 | footerTutorials: 'Tutorials', 77 | 78 | // bullets 79 | whyCloudSlangTitle: 'Why CloudSlang?' , 80 | mainBulletsProcessBasedTitle: 'Process-Based', 81 | mainBulletsReadyMadeContentTitle: 'Ready-made Content', 82 | mainBulletsAgentlessTitle: 'Agentless', 83 | mainBulletsProcessBasedDesc: 'Many popular orchestration solutions are based on desired state modelling. ' + 84 | 'This approach usually forces you to relinquish control over the runtime behavior of your orchestration and is mostly used for static cases like deployment. ' + 85 | 'CloudSlang takes a process-based approach to orchestration, allowing you to define how your orchestration works and empowering you to also address dynamic cases such as health checks, remediation, and disaster recovery.', 86 | mainBulletReadyMadeContentDesc: 'Although writing your own CloudSlang content is easy using our YAML-based DSL, you don’t need to write a single line of code to leverage the power of CloudSlang.' + 87 | ' There is a growing repository of ready-made content that integrates with many of today’s hottest technologies, such as Docker and CoreOS. ' + 88 | 'And, the open source nature of the project means that you’ll be able to reuse and re-purpose content shared by the community.', 89 | mainBulletsAgentlessDesc: 'Don’t bother setting up and managing agents on all your machines. CloudSlang workflows can use remote APIs to run tasks.', 90 | mainBulletsReadMore: 'Read More', 91 | 92 | // contact us 93 | contactUsHeader: 'You\'d like to reach out to us? Drop us a message!', 94 | contactSuccess: 'Your message was sent successfully. Thanks!', 95 | contactFailure: 'Please fill out all the fields in the form.', 96 | contactSendButton: 'Send Message', 97 | contactPlaceholderName: 'Your Name', 98 | contactPlaceholderEmail: 'Your Email', 99 | contactPlaceholderSubject: 'Subject', 100 | contactPlaceholderMessage: 'Your Message', 101 | 102 | // about us 103 | aboutUsByHp: 'Project CloudSlang by Micro Focus', 104 | aboutUsWhoWeAreText: 'This project is being contributed to the open source community by both Micro Focus engineers and individual contributors with the goal of leveraging the power of community to create the best-in-class orchestration technology.', 105 | aboutUsInHp: 'Individual Contributors (CloudSlang team members)', 106 | aboutUsNotInHp: 'Individual Contributors', 107 | 108 | // get started banner 109 | bannerTitle: 'Get Started', 110 | bannerDesc: 'Click this button and start using CloudSlang within minutes', 111 | startNowBanner: 'Start Now', 112 | 113 | 114 | // use cases 115 | useCasesTitle: 'Example Use Cases', 116 | useCasesCoreOsTitle: 'Clear Unused Docker Images in a CoreOS Cluster', 117 | useCasesMigrateContainerTitle: 'Migrating a Live Container', 118 | useCasesOpenStackTitle: 'OpenStack Health Check', 119 | useCasesCoreOsDesc: 'Unused Docker images can waste a lot of precious disk space. Use this workflow to remove all the unused Docker images from your entire CoreOS cluster.', 120 | useCasesMigrateContainerDesc: 'Sometimes there is a need to redistribute containers across a datacenter. Use this flow to migrate Docker containers based on the CPU load of their hosts while still preserving container state.', 121 | useCasesOpenStackDesc: 'Performs a health check on an OpenStack machine by creating a server, checking that it\'s up and then deleting it.', 122 | useCasesSeeMore: 'See the full content catalog' , 123 | 124 | // getting started 125 | /*getStartedTitleDesc: 'Start Working with CloudSlang by following the simple steps provided below.', 126 | getStartedPrereq: 'Prerequisite: Java JRE version 7 or higher.',*/ 127 | getStartedToRunTitle: 'If you want to RUN', 128 | getStartedToRunTitleDesc: 'Follow the 3 simple steps provided below.', 129 | getStartedToRunPrereq: 'Prerequisite: Java JRE version 7 or higher.', 130 | downloadText: 'Download', 131 | downloadTextZip: 'Windows', 132 | downloadTextRpm: 'Red Hat', 133 | downloadTextDeb: 'Debian', 134 | downloadTextDmg: 'Mac', 135 | downloadTextGZip: 'Linux/Mac', 136 | downloadTextWindows: '.zip', 137 | downloadTextRHEL: '.rpm', 138 | downloadTextDebian: '.deb', 139 | downloadTextMac: '.dmg', 140 | downloadTextMix: 'tar.gz', 141 | downloadTextMd5: 'Download .md5 files to check the .rpm and .deb packages', 142 | cloudSlangVersion: 'CloudSlang version 2.0.5', 143 | detailedDownloadCliHeader: 'Download & Run', 144 | detailedDownloadCliText: 'Download and unpack the CloudSlang CLI.', 145 | detailedDownloadCliText1: 'Go to cslang/bin/ and run the cslang executable file.', 146 | detailedDownloadCliText2: 'If you are using ', 147 | detailedDownloadCliText3: ' you can simply run our Docker image:', 148 | DockerRun: 'docker run -it cloudslang/cloudslang', 149 | detailedDownloadCliDockerImage: 'Docker image', 150 | detailedTriggerFlowHeader: 'Run a workflow', 151 | detailedTriggerFlowText1: 'At the prompt enter:', 152 | detailedTriggerFlowText2: 'run --f ../content/io/cloudslang/base/print/print_text.sl --i text=Hi', 153 | detailedTriggerFlowText4: 'The CLI will run the ready-made print_text operation that will print the value passed to the variable text.', 154 | detailedLearnMoreHeader: 'Learn More', 155 | 156 | getStartedToDevTitle: 'If you want to DEVELOP and CONTRIBUTE', 157 | getStartedToDevTitleDesc: 'Follow the 3 simple steps provided below.', 158 | getStartedToDevPrereq: 'Prerequisite: Nothing special here. You\'ll figure it out.', 159 | getStartedToDevForkHeader: 'Fork & Clone', 160 | getStartedToDevForkText: 'You can contribute on multiple repositories.', 161 | getStartedToDevForkText1: 'But if you want to develop your own content and eventually contribute it back you should fork our content repository.', 162 | getStartedToDevForkButton: 'Fork Content', 163 | getStartedToDevDHeader: 'Develop workflows', 164 | getStartedToDevDText: 'You can alter existing workflows or add new ones according to your needs.', 165 | getStartedToDevDText1: 'You can even write java or python based operations and reference those in your CloudSlang files.', 166 | getStartedToDevDText2: 'If you are working with IntelliJ IDEA or Atom you can download CloudSlang based plugins that will assist you in the development process.', 167 | getStartedToLearnHeader: 'Learn & Contribute', 168 | getStartedToLearnText:'Follow our documents for more information on contributing to CloudSlang and don\'t hesitate to contact us.', 169 | getStartedToLearnText1:'Orchestrate today, share tomorrow.', 170 | ideDownloadText: 'Plugin', 171 | ideDownloadTextIntelliJ: 'IntelliJ', 172 | ideDownloadTextAtom: 'Atom', 173 | ideDownloadNote: 'You can download and install directly from your preferred IDE', 174 | 175 | 176 | // download popup 177 | popUpHeader: 'Keep up to date!' , 178 | popUpBody: 'For more information on getting started with CloudSlang check out the', 179 | videoLink: 'introductory video,', 180 | docsLink: 'Documents', 181 | popUpBody2: 'or the ', 182 | tutorialLink: 'Tutorials', 183 | dot: '.', 184 | emailField: 'Keep up to date with new ready-made flows and language capabilities. Sign up for the CloudSlang newsletter.', 185 | emailPrivacy:'We respect your privacy. ' + 186 | 'Your email address will only be used for communication purposes. It will not be sold, shared with or disclosed to a third party.', 187 | 188 | 189 | // -- embed score 190 | detailedEmbedPomHeader: 'score dependencies', 191 | detailedEmbedPomText: 'Add score dependencies to your pom.xml', 192 | detailedEmbedSpringHeader: 'Spring configuration', 193 | detailedEmbedSpringText: 'Add some score configuration to your Spring application context xml', 194 | detailedEmbedScoreApiHeader: 'Use score API', 195 | detailedEmbedScoreApiText: 'Call score APIs from your Java application (Trigger example)', 196 | detailedEmbedScoreApiMore: 'Press here for more score APIs', 197 | detailedEmbedScoreCompileHeader: 'Compile & Run', 198 | detailedEmbedScoreCompileText: 'Compile your application and create an executable jar using maven and run', 199 | // detailedEmbedCompileCli: 'mvn clean install^1000\n[INFO] Scanning for projects...\n ......\n[INFO] BUILD SUCCESS\n$', 200 | // detailedEmbedScoreRunHeader: 'Run', 201 | // detailedEmbedScoreRunText: 'Run your application from command line', 202 | // detailedEmbedRunCli: 'cd /dev/score-app/target\n' + 203 | // '$ java -jar sample-app.jar\n' + 204 | // '^500 CheckWeather\n' + 205 | // '^250 PrintWeather\n' + 206 | // ' the weather in LA is: hot\n' + 207 | // '^250 Flow : SimpleFlow finished with result: SUCCESS\n' + 208 | // '^250$' 209 | goAheadAndTry: 'Go ahead and try', 210 | goAheadAndTryLink: 'https://github.com/meirwah/test-slang-embedded', 211 | goAheadAndTryLinkMessage: 'Example project' 212 | }; 213 | 214 | $rootScope.year = new Date().getFullYear(); 215 | 216 | }); 217 | -------------------------------------------------------------------------------- /Gruntfile.js: -------------------------------------------------------------------------------- 1 | // Generated on 2014-11-02 using generator-angular 0.9.8 2 | 'use strict'; 3 | 4 | // # Globbing 5 | // for performance reasons we're only matching one level down: 6 | // 'test/spec/{,*/}*.js' 7 | // use this if you want to recursively match all subfolders: 8 | // 'test/spec/**/*.js' 9 | 10 | module.exports = function (grunt) { 11 | 12 | // Load grunt tasks automatically 13 | require('load-grunt-tasks')(grunt); 14 | 15 | // Time how long tasks take. Can help when optimizing build times 16 | require('time-grunt')(grunt); 17 | 18 | // Configurable paths for the application 19 | var appConfig = { 20 | app: require('./bower.json').appPath || 'app', 21 | dist: 'public' 22 | }; 23 | 24 | // Define the configuration for all the tasks 25 | grunt.initConfig({ 26 | 27 | // Project settings 28 | yeoman: appConfig, 29 | 30 | // Watches files for changes and runs tasks based on the changed files 31 | watch: { 32 | bower: { 33 | files: ['bower.json'], 34 | tasks: ['wiredep'] 35 | }, 36 | js: { 37 | files: ['<%= yeoman.app %>/scripts/{,*/}*.js'], 38 | tasks: ['newer:jshint:all'], 39 | options: { 40 | livereload: '<%= connect.options.livereload %>' 41 | } 42 | }, 43 | styles: { 44 | files: ['<%= yeoman.app %>/styles/{,*/}*.css'], 45 | tasks: ['newer:copy:styles', 'autoprefixer'], 46 | options: { 47 | livereload: '<%= connect.options.livereload %>' 48 | } 49 | }, 50 | gruntfile: { 51 | files: ['Gruntfile.js'] 52 | }, 53 | livereload: { 54 | options: { 55 | livereload: '<%= connect.options.livereload %>' 56 | }, 57 | files: [ 58 | '<%= yeoman.app %>/{,*/}*.html', 59 | '.tmp/styles/{,*/}*.css', 60 | '<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}' 61 | ] 62 | }, 63 | express: { 64 | files: [ 65 | '<%= yeoman.app %>/{,*//*}*.html', 66 | '{.tmp,<%= yeoman.app %>}/styles/{,*//*}*.css', 67 | '{.tmp,<%= yeoman.app %>}/scripts/{,*//*}*.js', 68 | '<%= yeoman.app %>/images/{,*//*}*.{png,jpg,jpeg,gif,webp,svg}', 69 | 'index.js', 70 | 'server/{,*//*}*.{js,json}' 71 | ], 72 | tasks: ['express:dev'], 73 | options: { 74 | livereload: true, 75 | nospawn: true //Without this option specified express won't be reloaded 76 | } 77 | } 78 | }, 79 | 80 | // The actual grunt server settings 81 | connect: { 82 | options: { 83 | port: 9000, 84 | // Change this to '0.0.0.0' to access the server from outside. 85 | hostname: 'localhost', 86 | livereload: 35729 87 | }, 88 | livereload: { 89 | options: { 90 | open: true, 91 | middleware: function (connect) { 92 | return [ 93 | connect.static('.tmp'), 94 | connect().use( 95 | '/bower_components', 96 | connect.static('./bower_components') 97 | ), 98 | connect.static(appConfig.app) 99 | ]; 100 | } 101 | } 102 | }, 103 | dist: { 104 | options: { 105 | open: true, 106 | base: '<%= yeoman.dist %>' 107 | } 108 | } 109 | }, 110 | 111 | // Make sure code styles are up to par and there are no obvious mistakes 112 | jshint: { 113 | options: { 114 | jshintrc: '.jshintrc', 115 | reporter: require('jshint-stylish') 116 | }, 117 | all: { 118 | src: [ 119 | 'Gruntfile.js', 120 | '<%= yeoman.app %>/scripts/{,*/}*.js' 121 | ] 122 | } 123 | }, 124 | 125 | // Empties folders to start fresh 126 | clean: { 127 | dist: { 128 | files: [{ 129 | dot: true, 130 | src: [ 131 | '.tmp', 132 | '<%= yeoman.dist %>/{,*/}*', 133 | '!<%= yeoman.dist %>/.git*' 134 | ] 135 | }] 136 | }, 137 | server: '.tmp' 138 | }, 139 | 140 | // Add vendor prefixed styles 141 | autoprefixer: { 142 | options: { 143 | browsers: ['last 1 version'] 144 | }, 145 | dist: { 146 | files: [{ 147 | expand: true, 148 | cwd: '.tmp/styles/', 149 | src: '{,*/}*.css', 150 | dest: '.tmp/styles/' 151 | }] 152 | } 153 | }, 154 | 155 | // Automatically inject Bower components into the app 156 | wiredep: { 157 | app: { 158 | src: ['<%= yeoman.app %>/index.html'], 159 | ignorePath: /\.\.\//, 160 | exclude: [ 161 | '/jquery/', 162 | 'bower_components/bootstrap/dist/js/bootstrap.js', 163 | 'bower_components/highlightjs/styles/default.css' 164 | ] 165 | } 166 | }, 167 | 168 | // Renames files for browser caching purposes 169 | filerev: { 170 | dist: { 171 | src: [ 172 | '<%= yeoman.dist %>/scripts/{,*/}*.js', 173 | '<%= yeoman.dist %>/styles/{,*/}*.css', 174 | '<%= yeoman.dist %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}', 175 | '<%= yeoman.dist %>/styles/fonts/*' 176 | ] 177 | } 178 | }, 179 | 180 | // Reads HTML for usemin blocks to enable smart builds that automatically 181 | // concat, minify and revision files. Creates configurations in memory so 182 | // additional tasks can operate on them 183 | useminPrepare: { 184 | html: '<%= yeoman.app %>/index.html', 185 | options: { 186 | dest: '<%= yeoman.dist %>', 187 | flow: { 188 | html: { 189 | steps: { 190 | js: ['concat', 'uglifyjs'], 191 | css: ['cssmin'] 192 | }, 193 | post: {} 194 | } 195 | } 196 | } 197 | }, 198 | 199 | // Performs rewrites based on filerev and the useminPrepare configuration 200 | usemin: { 201 | html: ['<%= yeoman.dist %>/**/*.html'], 202 | css: ['<%= yeoman.dist %>/styles/{,*/}*.css'], 203 | options: { 204 | assetsDirs: ['<%= yeoman.dist %>','<%= yeoman.dist %>/images'] 205 | } 206 | }, 207 | 208 | // The following *-min tasks will produce minified files in the dist folder 209 | // By default, your `index.html`'s will take care of 210 | // minification. These next options are pre-configured if you do not wish 211 | // to use the Usemin blocks. 212 | // cssmin: { 213 | // dist: { 214 | // files: { 215 | // '<%= yeoman.dist %>/styles/main.css': [ 216 | // '.tmp/styles/{,*/}*.css' 217 | // ] 218 | // } 219 | // } 220 | // }, 221 | // uglify: { 222 | // dist: { 223 | // files: { 224 | // '<%= yeoman.dist %>/scripts/scripts.js': [ 225 | // '<%= yeoman.dist %>/scripts/scripts.js' 226 | // ] 227 | // } 228 | // } 229 | // }, 230 | // concat: { 231 | // dist: {} 232 | // }, 233 | 234 | imagemin: { 235 | dist: { 236 | files: [{ 237 | expand: true, 238 | cwd: '<%= yeoman.app %>/images', 239 | src: '{,*/}*.{png,jpg,jpeg,gif}', 240 | dest: '<%= yeoman.dist %>/images' 241 | }] 242 | } 243 | }, 244 | 245 | svgmin: { 246 | dist: { 247 | files: [{ 248 | expand: true, 249 | cwd: '<%= yeoman.app %>/images', 250 | src: '{,*/}*.svg', 251 | dest: '<%= yeoman.dist %>/images' 252 | }] 253 | } 254 | }, 255 | 256 | htmlmin: { 257 | dist: { 258 | options: { 259 | collapseWhitespace: true, 260 | conservativeCollapse: true, 261 | collapseBooleanAttributes: true, 262 | removeCommentsFromCDATA: true, 263 | removeOptionalTags: true 264 | }, 265 | files: [{ 266 | expand: true, 267 | cwd: '<%= yeoman.dist %>', 268 | src: ['*.html', 'views/{,*/}*.html', 'views/**/*.html'], 269 | dest: '<%= yeoman.dist %>' 270 | }] 271 | } 272 | }, 273 | 274 | // ng-annotate tries to make the code safe for minification automatically 275 | // by using the Angular long form for dependency injection. 276 | ngAnnotate: { 277 | dist: { 278 | files: [{ 279 | expand: true, 280 | cwd: '.tmp/concat/scripts', 281 | src: ['*.js', '!oldieshim.js'], 282 | dest: '.tmp/concat/scripts' 283 | }] 284 | } 285 | }, 286 | 287 | // Replace Google CDN references 288 | cdnify: { 289 | dist: { 290 | html: ['<%= yeoman.dist %>/*.html'] 291 | } 292 | }, 293 | 294 | // Copies remaining files to places other tasks can use 295 | copy: { 296 | dist: { 297 | files: [{ 298 | expand: true, 299 | dot: true, 300 | cwd: '<%= yeoman.app %>', 301 | dest: '<%= yeoman.dist %>', 302 | src: [ 303 | '*.{ico,png,txt}', 304 | '.htaccess', 305 | '*.html', 306 | 'views/**/*.html', 307 | 'views/**/*.json', 308 | 'views/codesnippets/*', 309 | 'images/{,*/}*.{webp}', 310 | 'fonts/*' 311 | ] 312 | }, { 313 | expand: true, 314 | cwd: '.tmp/images', 315 | dest: '<%= yeoman.dist %>/images', 316 | src: ['generated/*'] 317 | }, { 318 | expand: true, 319 | cwd: 'bower_components/bootstrap/dist', 320 | src: 'fonts/*', 321 | dest: '<%= yeoman.dist %>' 322 | }, { 323 | expand: true, 324 | cwd: 'bower_components/components-font-awesome', 325 | src: 'fonts/*', 326 | dest: '<%= yeoman.dist %>' 327 | }] 328 | }, 329 | styles: { 330 | expand: true, 331 | cwd: '<%= yeoman.app %>/styles', 332 | dest: '.tmp/styles/', 333 | src: '{,*/}*.css' 334 | } 335 | }, 336 | 337 | // Run some tasks in parallel to speed up the build process 338 | concurrent: { 339 | server: [ 340 | 'copy:styles' 341 | ], 342 | dist: [ 343 | 'copy:styles', 344 | 'imagemin', 345 | 'svgmin' 346 | ] 347 | }, 348 | 349 | open: { 350 | server: { 351 | url: 'http://localhost:<%= express.options.port %>' 352 | } 353 | }, 354 | 355 | express: { 356 | options: { 357 | port: process.env.PORT || 9001 358 | }, 359 | dev: { 360 | options: { 361 | script: 'index.js' 362 | } 363 | }, 364 | prod: { 365 | options: { 366 | script: 'index.js' 367 | } 368 | } 369 | } 370 | }); 371 | 372 | grunt.registerTask('serve', 'Compile then start a connect web server', function (target) { 373 | if (target === 'dist') { 374 | return grunt.task.run(['build', 'connect:dist:keepalive']); 375 | } 376 | 377 | grunt.task.run([ 378 | 'clean:server', 379 | 'wiredep', 380 | 'concurrent:server', 381 | 'autoprefixer', 382 | 'connect:livereload', 383 | 'watch' 384 | ]); 385 | }); 386 | 387 | grunt.registerTask('serve-express', 'Compile then start an express node', function (target) { 388 | if (target === 'dist') { 389 | return grunt.task.run(['build', 'connect:dist:keepalive']); 390 | } 391 | 392 | grunt.task.run([ 393 | 'clean:server', 394 | 'wiredep', 395 | 'concurrent:server', 396 | 'autoprefixer', 397 | 'express:dev', 398 | 'open', 399 | 'watch' 400 | ]); 401 | }); 402 | 403 | grunt.registerTask('server', 'DEPRECATED TASK. Use the "serve" task instead', function (target) { 404 | grunt.log.warn('The `server` task has been deprecated. Use `grunt serve` to start a server.'); 405 | grunt.task.run(['serve:' + target]); 406 | }); 407 | 408 | grunt.registerTask('build', [ 409 | 'clean:dist', 410 | 'wiredep', 411 | 'useminPrepare', 412 | 'concurrent:dist', 413 | 'autoprefixer', 414 | 'concat', 415 | 'ngAnnotate', 416 | 'copy:dist', 417 | 'cdnify', 418 | 'cssmin', 419 | 'uglify', 420 | 'filerev', 421 | 'usemin', 422 | 'htmlmin' 423 | ]); 424 | 425 | grunt.registerTask('default', [ 426 | 'newer:jshint', 427 | 'build' 428 | ]); 429 | 430 | grunt.registerTask('heroku:production', 'build'); 431 | grunt.registerTask('heroku:dev', 'build'); 432 | 433 | grunt.loadTasks('tasks'); 434 | }; 435 | -------------------------------------------------------------------------------- /app/.htaccess: -------------------------------------------------------------------------------- 1 | # Apache Configuration File 2 | 3 | # (!) Using `.htaccess` files slows down Apache, therefore, if you have access 4 | # to the main server config file (usually called `httpd.conf`), you should add 5 | # this logic there: http://httpd.apache.org/docs/current/howto/htaccess.html. 6 | 7 | # ############################################################################## 8 | # # CROSS-ORIGIN RESOURCE SHARING (CORS) # 9 | # ############################################################################## 10 | 11 | # ------------------------------------------------------------------------------ 12 | # | Cross-domain AJAX requests | 13 | # ------------------------------------------------------------------------------ 14 | 15 | # Enable cross-origin AJAX requests. 16 | # http://code.google.com/p/html5security/wiki/CrossOriginRequestSecurity 17 | # http://enable-cors.org/ 18 | 19 | # 20 | # Header set Access-Control-Allow-Origin "*" 21 | # 22 | 23 | # ------------------------------------------------------------------------------ 24 | # | CORS-enabled images | 25 | # ------------------------------------------------------------------------------ 26 | 27 | # Send the CORS header for images when browsers request it. 28 | # https://developer.mozilla.org/en/CORS_Enabled_Image 29 | # http://blog.chromium.org/2011/07/using-cross-domain-images-in-webgl-and.html 30 | # http://hacks.mozilla.org/2011/11/using-cors-to-load-webgl-textures-from-cross-domain-images/ 31 | 32 | 33 | 34 | 35 | SetEnvIf Origin ":" IS_CORS 36 | Header set Access-Control-Allow-Origin "*" env=IS_CORS 37 | 38 | 39 | 40 | 41 | # ------------------------------------------------------------------------------ 42 | # | Web fonts access | 43 | # ------------------------------------------------------------------------------ 44 | 45 | # Allow access from all domains for web fonts 46 | 47 | 48 | 49 | Header set Access-Control-Allow-Origin "*" 50 | 51 | 52 | 53 | 54 | # ############################################################################## 55 | # # ERRORS # 56 | # ############################################################################## 57 | 58 | # ------------------------------------------------------------------------------ 59 | # | 404 error prevention for non-existing redirected folders | 60 | # ------------------------------------------------------------------------------ 61 | 62 | # Prevent Apache from returning a 404 error for a rewrite if a directory 63 | # with the same name does not exist. 64 | # http://httpd.apache.org/docs/current/content-negotiation.html#multiviews 65 | # http://www.webmasterworld.com/apache/3808792.htm 66 | 67 | Options -MultiViews 68 | 69 | # ------------------------------------------------------------------------------ 70 | # | Custom error messages / pages | 71 | # ------------------------------------------------------------------------------ 72 | 73 | # You can customize what Apache returns to the client in case of an error (see 74 | # http://httpd.apache.org/docs/current/mod/core.html#errordocument), e.g.: 75 | 76 | ErrorDocument 404 /404.html 77 | 78 | 79 | # ############################################################################## 80 | # # INTERNET EXPLORER # 81 | # ############################################################################## 82 | 83 | # ------------------------------------------------------------------------------ 84 | # | Better website experience | 85 | # ------------------------------------------------------------------------------ 86 | 87 | # Force IE to render pages in the highest available mode in the various 88 | # cases when it may not: http://hsivonen.iki.fi/doctype/ie-mode.pdf. 89 | 90 | 91 | Header set X-UA-Compatible "IE=edge" 92 | # `mod_headers` can't match based on the content-type, however, we only 93 | # want to send this header for HTML pages and not for the other resources 94 | 95 | Header unset X-UA-Compatible 96 | 97 | 98 | 99 | # ------------------------------------------------------------------------------ 100 | # | Cookie setting from iframes | 101 | # ------------------------------------------------------------------------------ 102 | 103 | # Allow cookies to be set from iframes in IE. 104 | 105 | # 106 | # Header set P3P "policyref=\"/w3c/p3p.xml\", CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"" 107 | # 108 | 109 | # ------------------------------------------------------------------------------ 110 | # | Screen flicker | 111 | # ------------------------------------------------------------------------------ 112 | 113 | # Stop screen flicker in IE on CSS rollovers (this only works in 114 | # combination with the `ExpiresByType` directives for images from below). 115 | 116 | # BrowserMatch "MSIE" brokenvary=1 117 | # BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1 118 | # BrowserMatch "Opera" !brokenvary 119 | # SetEnvIf brokenvary 1 force-no-vary 120 | 121 | 122 | # ############################################################################## 123 | # # MIME TYPES AND ENCODING # 124 | # ############################################################################## 125 | 126 | # ------------------------------------------------------------------------------ 127 | # | Proper MIME types for all files | 128 | # ------------------------------------------------------------------------------ 129 | 130 | 131 | 132 | # Audio 133 | AddType audio/mp4 m4a f4a f4b 134 | AddType audio/ogg oga ogg 135 | 136 | # JavaScript 137 | # Normalize to standard type (it's sniffed in IE anyways): 138 | # http://tools.ietf.org/html/rfc4329#section-7.2 139 | AddType application/javascript js jsonp 140 | AddType application/json json 141 | 142 | # Video 143 | AddType video/mp4 mp4 m4v f4v f4p 144 | AddType video/ogg ogv 145 | AddType video/webm webm 146 | AddType video/x-flv flv 147 | 148 | # Web fonts 149 | AddType application/font-woff woff 150 | AddType application/vnd.ms-fontobject eot 151 | 152 | # Browsers usually ignore the font MIME types and sniff the content, 153 | # however, Chrome shows a warning if other MIME types are used for the 154 | # following fonts. 155 | AddType application/x-font-ttf ttc ttf 156 | AddType font/opentype otf 157 | 158 | # Make SVGZ fonts work on iPad: 159 | # https://twitter.com/FontSquirrel/status/14855840545 160 | AddType image/svg+xml svg svgz 161 | AddEncoding gzip svgz 162 | 163 | # Other 164 | AddType application/octet-stream safariextz 165 | AddType application/x-chrome-extension crx 166 | AddType application/x-opera-extension oex 167 | AddType application/x-shockwave-flash swf 168 | AddType application/x-web-app-manifest+json webapp 169 | AddType application/x-xpinstall xpi 170 | AddType application/xml atom rdf rss xml 171 | AddType image/webp webp 172 | AddType image/x-icon ico 173 | AddType text/cache-manifest appcache manifest 174 | AddType text/vtt vtt 175 | AddType text/x-component htc 176 | AddType text/x-vcard vcf 177 | 178 | 179 | 180 | # ------------------------------------------------------------------------------ 181 | # | UTF-8 encoding | 182 | # ------------------------------------------------------------------------------ 183 | 184 | # Use UTF-8 encoding for anything served as `text/html` or `text/plain`. 185 | AddDefaultCharset utf-8 186 | 187 | # Force UTF-8 for certain file formats. 188 | 189 | AddCharset utf-8 .atom .css .js .json .rss .vtt .webapp .xml 190 | 191 | 192 | 193 | # ############################################################################## 194 | # # URL REWRITES # 195 | # ############################################################################## 196 | 197 | # ------------------------------------------------------------------------------ 198 | # | Rewrite engine | 199 | # ------------------------------------------------------------------------------ 200 | 201 | # Turning on the rewrite engine and enabling the `FollowSymLinks` option is 202 | # necessary for the following directives to work. 203 | 204 | # If your web host doesn't allow the `FollowSymlinks` option, you may need to 205 | # comment it out and use `Options +SymLinksIfOwnerMatch` but, be aware of the 206 | # performance impact: http://httpd.apache.org/docs/current/misc/perf-tuning.html#symlinks 207 | 208 | # Also, some cloud hosting services require `RewriteBase` to be set: 209 | # http://www.rackspace.com/knowledge_center/frequently-asked-question/why-is-mod-rewrite-not-working-on-my-site 210 | 211 | 212 | Options +FollowSymlinks 213 | # Options +SymLinksIfOwnerMatch 214 | RewriteEngine On 215 | # RewriteBase / 216 | 217 | 218 | # ------------------------------------------------------------------------------ 219 | # | Suppressing / Forcing the "www." at the beginning of URLs | 220 | # ------------------------------------------------------------------------------ 221 | 222 | # The same content should never be available under two different URLs especially 223 | # not with and without "www." at the beginning. This can cause SEO problems 224 | # (duplicate content), therefore, you should choose one of the alternatives and 225 | # redirect the other one. 226 | 227 | # By default option 1 (no "www.") is activated: 228 | # http://no-www.org/faq.php?q=class_b 229 | 230 | # If you'd prefer to use option 2, just comment out all the lines from option 1 231 | # and uncomment the ones from option 2. 232 | 233 | # IMPORTANT: NEVER USE BOTH RULES AT THE SAME TIME! 234 | 235 | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 236 | 237 | # Option 1: rewrite www.example.com → example.com 238 | 239 | 240 | RewriteCond %{HTTPS} !=on 241 | RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 242 | RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L] 243 | 244 | 245 | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 246 | 247 | # Option 2: rewrite example.com → www.example.com 248 | 249 | # Be aware that the following might not be a good idea if you use "real" 250 | # subdomains for certain parts of your website. 251 | 252 | # 253 | # RewriteCond %{HTTPS} !=on 254 | # RewriteCond %{HTTP_HOST} !^www\..+$ [NC] 255 | # RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 256 | # 257 | 258 | 259 | # ############################################################################## 260 | # # SECURITY # 261 | # ############################################################################## 262 | 263 | # ------------------------------------------------------------------------------ 264 | # | Content Security Policy (CSP) | 265 | # ------------------------------------------------------------------------------ 266 | 267 | # You can mitigate the risk of cross-site scripting and other content-injection 268 | # attacks by setting a Content Security Policy which whitelists trusted sources 269 | # of content for your site. 270 | 271 | # The example header below allows ONLY scripts that are loaded from the current 272 | # site's origin (no inline scripts, no CDN, etc). This almost certainly won't 273 | # work as-is for your site! 274 | 275 | # To get all the details you'll need to craft a reasonable policy for your site, 276 | # read: http://html5rocks.com/en/tutorials/security/content-security-policy (or 277 | # see the specification: http://w3.org/TR/CSP). 278 | 279 | # 280 | # Header set Content-Security-Policy "script-src 'self'; object-src 'self'" 281 | # 282 | # Header unset Content-Security-Policy 283 | # 284 | # 285 | 286 | # ------------------------------------------------------------------------------ 287 | # | File access | 288 | # ------------------------------------------------------------------------------ 289 | 290 | # Block access to directories without a default document. 291 | # Usually you should leave this uncommented because you shouldn't allow anyone 292 | # to surf through every directory on your server (which may includes rather 293 | # private places like the CMS's directories). 294 | 295 | 296 | Options -Indexes 297 | 298 | 299 | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 300 | 301 | # Block access to hidden files and directories. 302 | # This includes directories used by version control systems such as Git and SVN. 303 | 304 | 305 | RewriteCond %{SCRIPT_FILENAME} -d [OR] 306 | RewriteCond %{SCRIPT_FILENAME} -f 307 | RewriteRule "(^|/)\." - [F] 308 | 309 | 310 | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 311 | 312 | # Block access to backup and source files. 313 | # These files may be left by some text editors and can pose a great security 314 | # danger when anyone has access to them. 315 | 316 | 317 | Order allow,deny 318 | Deny from all 319 | Satisfy All 320 | 321 | 322 | # ------------------------------------------------------------------------------ 323 | # | Secure Sockets Layer (SSL) | 324 | # ------------------------------------------------------------------------------ 325 | 326 | # Rewrite secure requests properly to prevent SSL certificate warnings, e.g.: 327 | # prevent `https://www.example.com` when your certificate only allows 328 | # `https://secure.example.com`. 329 | 330 | # 331 | # RewriteCond %{SERVER_PORT} !^443 332 | # RewriteRule ^ https://example-domain-please-change-me.com%{REQUEST_URI} [R=301,L] 333 | # 334 | 335 | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 336 | 337 | # Force client-side SSL redirection. 338 | 339 | # If a user types "example.com" in his browser, the above rule will redirect him 340 | # to the secure version of the site. That still leaves a window of opportunity 341 | # (the initial HTTP connection) for an attacker to downgrade or redirect the 342 | # request. The following header ensures that browser will ONLY connect to your 343 | # server via HTTPS, regardless of what the users type in the address bar. 344 | # http://www.html5rocks.com/en/tutorials/security/transport-layer-security/ 345 | 346 | 347 | Header set Strict-Transport-Security max-age=16070400; 348 | 349 | 350 | # ------------------------------------------------------------------------------ 351 | # | Server software information | 352 | # ------------------------------------------------------------------------------ 353 | 354 | # Avoid displaying the exact Apache version number, the description of the 355 | # generic OS-type and the information about Apache's compiled-in modules. 356 | 357 | # ADD THIS DIRECTIVE IN THE `httpd.conf` AS IT WILL NOT WORK IN THE `.htaccess`! 358 | 359 | # ServerTokens Prod 360 | 361 | 362 | # ############################################################################## 363 | # # WEB PERFORMANCE # 364 | # ############################################################################## 365 | 366 | # ------------------------------------------------------------------------------ 367 | # | Compression | 368 | # ------------------------------------------------------------------------------ 369 | 370 | 371 | 372 | # Force compression for mangled headers. 373 | # http://developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping 374 | 375 | 376 | SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding 377 | RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding 378 | 379 | 380 | 381 | # Compress all output labeled with one of the following MIME-types 382 | # (for Apache versions below 2.3.7, you don't need to enable `mod_filter` 383 | # and can remove the `` and `` lines 384 | # as `AddOutputFilterByType` is still in the core directives). 385 | 386 | AddOutputFilterByType DEFLATE application/atom+xml \ 387 | application/javascript \ 388 | application/json \ 389 | application/rss+xml \ 390 | application/vnd.ms-fontobject \ 391 | application/x-font-ttf \ 392 | application/x-web-app-manifest+json \ 393 | application/xhtml+xml \ 394 | application/xml \ 395 | font/opentype \ 396 | image/svg+xml \ 397 | image/x-icon \ 398 | text/css \ 399 | text/html \ 400 | text/plain \ 401 | text/x-component \ 402 | text/xml 403 | 404 | 405 | 406 | 407 | # ------------------------------------------------------------------------------ 408 | # | Content transformations | 409 | # ------------------------------------------------------------------------------ 410 | 411 | # Prevent some of the mobile network providers from modifying the content of 412 | # your site: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.5. 413 | 414 | # 415 | # Header set Cache-Control "no-transform" 416 | # 417 | 418 | # ------------------------------------------------------------------------------ 419 | # | ETag removal | 420 | # ------------------------------------------------------------------------------ 421 | 422 | # Since we're sending far-future expires headers (see below), ETags can 423 | # be removed: http://developer.yahoo.com/performance/rules.html#etags. 424 | 425 | # `FileETag None` is not enough for every server. 426 | 427 | Header unset ETag 428 | 429 | 430 | FileETag None 431 | 432 | # ------------------------------------------------------------------------------ 433 | # | Expires headers (for better cache control) | 434 | # ------------------------------------------------------------------------------ 435 | 436 | # The following expires headers are set pretty far in the future. If you don't 437 | # control versioning with filename-based cache busting, consider lowering the 438 | # cache time for resources like CSS and JS to something like 1 week. 439 | 440 | 441 | 442 | ExpiresActive on 443 | ExpiresDefault "access plus 1 month" 444 | 445 | # CSS 446 | ExpiresByType text/css "access plus 1 year" 447 | 448 | # Data interchange 449 | ExpiresByType application/json "access plus 0 seconds" 450 | ExpiresByType application/xml "access plus 0 seconds" 451 | ExpiresByType text/xml "access plus 0 seconds" 452 | 453 | # Favicon (cannot be renamed!) 454 | ExpiresByType image/x-icon "access plus 1 week" 455 | 456 | # HTML components (HTCs) 457 | ExpiresByType text/x-component "access plus 1 month" 458 | 459 | # HTML 460 | ExpiresByType text/html "access plus 0 seconds" 461 | 462 | # JavaScript 463 | ExpiresByType application/javascript "access plus 1 year" 464 | 465 | # Manifest files 466 | ExpiresByType application/x-web-app-manifest+json "access plus 0 seconds" 467 | ExpiresByType text/cache-manifest "access plus 0 seconds" 468 | 469 | # Media 470 | ExpiresByType audio/ogg "access plus 1 month" 471 | ExpiresByType image/gif "access plus 1 month" 472 | ExpiresByType image/jpeg "access plus 1 month" 473 | ExpiresByType image/png "access plus 1 month" 474 | ExpiresByType video/mp4 "access plus 1 month" 475 | ExpiresByType video/ogg "access plus 1 month" 476 | ExpiresByType video/webm "access plus 1 month" 477 | 478 | # Web feeds 479 | ExpiresByType application/atom+xml "access plus 1 hour" 480 | ExpiresByType application/rss+xml "access plus 1 hour" 481 | 482 | # Web fonts 483 | ExpiresByType application/font-woff "access plus 1 month" 484 | ExpiresByType application/vnd.ms-fontobject "access plus 1 month" 485 | ExpiresByType application/x-font-ttf "access plus 1 month" 486 | ExpiresByType font/opentype "access plus 1 month" 487 | ExpiresByType image/svg+xml "access plus 1 month" 488 | 489 | 490 | 491 | # ------------------------------------------------------------------------------ 492 | # | Filename-based cache busting | 493 | # ------------------------------------------------------------------------------ 494 | 495 | # If you're not using a build process to manage your filename version revving, 496 | # you might want to consider enabling the following directives to route all 497 | # requests such as `/css/style.12345.css` to `/css/style.css`. 498 | 499 | # To understand why this is important and a better idea than `*.css?v231`, read: 500 | # http://stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring 501 | 502 | # 503 | # RewriteCond %{REQUEST_FILENAME} !-f 504 | # RewriteCond %{REQUEST_FILENAME} !-d 505 | # RewriteRule ^(.+)\.(\d+)\.(js|css|png|jpg|gif)$ $1.$3 [L] 506 | # 507 | 508 | # ------------------------------------------------------------------------------ 509 | # | File concatenation | 510 | # ------------------------------------------------------------------------------ 511 | 512 | # Allow concatenation from within specific CSS and JS files, e.g.: 513 | # Inside of `script.combined.js` you could have 514 | # 515 | # 516 | # and they would be included into this single file. 517 | 518 | # 519 | # 520 | # Options +Includes 521 | # AddOutputFilterByType INCLUDES application/javascript application/json 522 | # SetOutputFilter INCLUDES 523 | # 524 | # 525 | # Options +Includes 526 | # AddOutputFilterByType INCLUDES text/css 527 | # SetOutputFilter INCLUDES 528 | # 529 | # 530 | 531 | # ------------------------------------------------------------------------------ 532 | # | Persistent connections | 533 | # ------------------------------------------------------------------------------ 534 | 535 | # Allow multiple requests to be sent over the same TCP connection: 536 | # http://httpd.apache.org/docs/current/en/mod/core.html#keepalive. 537 | 538 | # Enable if you serve a lot of static content but, be aware of the 539 | # possible disadvantages! 540 | 541 | # 542 | # Header set Connection Keep-Alive 543 | # 544 | --------------------------------------------------------------------------------