diff --git a/res/app/app.js b/res/app/app.js
index a2a5a6e4..5fda048a 100644
--- a/res/app/app.js
+++ b/res/app/app.js
@@ -8,7 +8,9 @@ angular.module('app', [
'gettext',
require('./layout').name,
require('./device-list').name,
- require('./device-control').name
+ require('./device-control').name,
+ require('./settings').name,
+ require('./help').name
])
.config(['$routeProvider', '$locationProvider',
function ($routeProvider, $locationProvider) {
diff --git a/res/app/components/stf/settings/index.js b/res/app/components/stf/settings/index.js
new file mode 100644
index 00000000..7b9933be
--- /dev/null
+++ b/res/app/components/stf/settings/index.js
@@ -0,0 +1,6 @@
+require('angular-localForage')
+
+module.exports = angular.module('stf/settings', [
+ 'LocalForageModule'
+])
+ .factory('SettingsService', require('./settings-service'))
diff --git a/res/app/components/stf/settings/settings-service.js b/res/app/components/stf/settings/settings-service.js
new file mode 100644
index 00000000..ac084a15
--- /dev/null
+++ b/res/app/components/stf/settings/settings-service.js
@@ -0,0 +1,6 @@
+module.exports = function SettingsServiceFactory($rootScope, $localForage) {
+
+
+
+ return $localForage
+}
diff --git a/res/app/help/help-controller.js b/res/app/help/help-controller.js
new file mode 100644
index 00000000..da7a4cc8
--- /dev/null
+++ b/res/app/help/help-controller.js
@@ -0,0 +1,11 @@
+module.exports = function HelpCtrl($scope) {
+ $scope.links = {
+ manualBasic: '/manual-basic/',
+ manualAdvanced: '/manual-advanced/',
+ wiki: 'http://amewiki.cadc.cyberagent.local/display/STF',
+ chat: 'https://cyberagent.hipchat.com/chat?focus_jid=44808_stf@conf.hipchat.com',
+ tracker: 'http://jira.amb.ca.local/browse/STF',
+ feedback: 'http://jira.amb.ca.local/secure/CreateIssueDetails!init.jspa?pid=10521&issuetype=14&summary=STF%E3%81%AB%E9%96%A2%E3%81%99%E3%82%8B%E3%81%8A%E5%95%8F%E3%81%84%E5%90%88%E3%82%8F%E3%81%9B&description=%E3%81%8A%E5%95%8F%E3%81%84%E5%90%88%E3%82%8F%E3%81%9B%E5%86%85%E5%AE%B9%E3%81%AF%E3%82%B3%E3%82%B3%E3%81%AB%E8%A8%98%E8%BC%89%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84',
+ mail: 'stf@cyberagent.co.jp'
+ }
+}
\ No newline at end of file
diff --git a/res/app/help/help.jade b/res/app/help/help.jade
new file mode 100644
index 00000000..f7d8b18b
--- /dev/null
+++ b/res/app/help/help.jade
@@ -0,0 +1,78 @@
+.container-fluid.main-content
+ .page-title
+ //h1
+ | Help
+ ul.timeline
+ li
+ .timeline-time
+ strong 使い方が知りたい
+ | どうやって使うの?
+ .timeline-icon
+ .bg-primary
+ i.fa.fa-book
+ .timeline-content
+ h2 マニュアル
+ p マニュアルはBasicとAdvancedに分かれています。
+ p Basicは誰でも使える機能の説明になります。
+ p Advancedはエンジニア向けの高度な機能の説明になります。
+ p 最新の情報はコンフルスペースになります
+ a(ng-href='{{links.manualAdvanced}}', target='_blank', role='button').btn.btn-danger.pull-right
+ i.fa.fa-book
+ | Advanced
+ a(ng-href='{{links.manualBasic}}', target='_blank', role='button').btn.btn-danger.pull-right
+ i.fa.fa-book
+ | Basic
+ a(ng-href='{{links.wiki}}', target='_blank', role='button').btn.btn-primary
+ i.fa.fa-book
+ | コンフルスペース
+ .clearfix
+ li
+ .timeline-time
+ strong 使い方、機能追加、一般な問い合わせ
+ | 新しい機能が欲しい
+ .timeline-icon
+ .bg-warning
+ i.fa.fa-ticket
+ .timeline-content
+ h2 お問い合わせ
+ p お問い合わせはJIRAになります。
+ p 質問や疑問、改善や機能追加などの要望は大歓迎です。
+ p メールでも問い合わせが可能です。
+ a(ng-href='{{links.feedback}}', target='_blank', role='button').btn.btn-warning
+ i.fa.fa-ticket
+ | JIRAでお問い合わせ
+ a(ng-href='mailto:{{links.mail}}', role='button').btn.btn-default
+ i.fa.fa-envelope
+ | メールでお問い合わせ
+
+ li
+ .timeline-time
+ strong デバイスが今落ちた、よく分からない助けて
+ | 今すぐ聞きたい
+ .timeline-icon
+ .bg-info
+ i.fa.fa-comments
+ .timeline-content
+ h2 チャットお問い合わせ
+ p リアルタイムお問い合わせはHipChatのSTFルームになります。
+ p 質問や疑問、改善や機能追加などの要望は大歓迎です。
+ a(ng-href='{{links.chat}}', target='_blank', role='button').btn.btn-info.pull-right
+ i.fa.fa-comments
+ | HipChatでお問い合わせ
+ .clearfix
+ li
+ .timeline-time
+ strong バグを見つかった
+ | あのバグどうなっている?
+ .timeline-icon
+ .bg-success
+ i.fa.fa-bug
+ .timeline-content
+ h2 バグトラッカー
+ p プロジェクトのチケットトラッカーはこちらのJIRAになります。
+ p バグや機能のトラッカーです。
+ a(ng-href='{{links.tracker}}', target='_blank', role='button').btn.btn-success
+ i.fa.fa-bug
+ | JIRAチケット
+
+
diff --git a/res/app/help/index.js b/res/app/help/index.js
new file mode 100644
index 00000000..885b2d86
--- /dev/null
+++ b/res/app/help/index.js
@@ -0,0 +1,8 @@
+module.exports = angular.module('help', [])
+ .config(['$routeProvider', function ($routeProvider) {
+ $routeProvider.when('/help', {
+ template: require('./help.jade'),
+ controller: 'HelpCtrl'
+ })
+ }])
+ .controller('HelpCtrl', require('./help-controller'))
diff --git a/res/app/layout/layout-controller.js b/res/app/layout/layout-controller.js
index f4f4dbe7..d851cc97 100644
--- a/res/app/layout/layout-controller.js
+++ b/res/app/layout/layout-controller.js
@@ -1,3 +1,2 @@
module.exports = function LayoutCtrl($scope) {
-
}
diff --git a/res/app/settings/index.js b/res/app/settings/index.js
new file mode 100644
index 00000000..7958ba28
--- /dev/null
+++ b/res/app/settings/index.js
@@ -0,0 +1,9 @@
+module.exports = angular.module('ui-settings', [
+ require('./language').name
+])
+ .config(['$routeProvider', function ($routeProvider) {
+ $routeProvider.when('/settings', {
+ template: require('./settings.jade')
+ })
+ }])
+ //.controller('SettingsCtrl', require('./settings-controller'))
diff --git a/res/app/settings/language/index.js b/res/app/settings/language/index.js
new file mode 100644
index 00000000..8838d1b0
--- /dev/null
+++ b/res/app/settings/language/index.js
@@ -0,0 +1,9 @@
+module.exports = angular.module('stf-ui-language', [
+// require('stf/settings').name
+])
+ .run(["$templateCache", function($templateCache) {
+ $templateCache.put('language.jade', require('./language.jade'))
+ }])
+ .factory('LanguageService', require('./language-service'))
+ .controller('LanguageCtrl', require('./language-controller'))
+
\ No newline at end of file
diff --git a/res/app/settings/language/language-controller.js b/res/app/settings/language/language-controller.js
new file mode 100644
index 00000000..8d160716
--- /dev/null
+++ b/res/app/settings/language/language-controller.js
@@ -0,0 +1,21 @@
+module.exports = function LanguageCtrl($scope, LanguageService, SettingsService) { //gettextCatalog,
+// SettingsService.sync($scope, 'Language', {
+// language: LanguageService.detectedLanguage
+// })
+
+ //SettingsService.set('')
+ console.log('hey')
+
+
+ //SettingsService.set('valueCrazy', 35)
+ //SettingsService.set('valueCrazyNew', {one: 1, two: 35.3, three: '日本語', four: [1, 2, 3, 4]})
+
+ //console.log('he')
+ //console.log(SettingsService.get('valueCrazy'))
+
+// $scope.$watch('language', function (newValue) {
+// gettextCatalog.currentLanguage = newValue
+// })
+//
+// $scope.supportedLanguages = LanguageService.supportedLanguages
+}
diff --git a/res/app/settings/language/language-service.js b/res/app/settings/language/language-service.js
new file mode 100644
index 00000000..4cd8a092
--- /dev/null
+++ b/res/app/settings/language/language-service.js
@@ -0,0 +1,25 @@
+//var _ = require('lodash')
+
+module.exports = function LanguageServiceFactory() {
+ alert('he')
+
+ var LanguageService = {}
+
+ LanguageService.supportedLanguages = [
+ {code: 'en', name: 'English'},
+ {code: 'ja', name: '日本語'}
+ ]
+
+ var browserLocale = navigator.language || navigator.userLanguage || 'en-US'
+ var browserLanguage = browserLocale.substring(0, 2)
+ var detectedLanguage = _.some(LanguageService.supportedLanguages, {code: browserLanguage}) ? browserLanguage : 'en'
+ var defaultLanguage = 'ja'
+ LanguageService.detectedLanguage = defaultLanguage
+ LanguageService.selectedLanguage = defaultLanguage
+
+ LanguageService.getSelectedLanguage = function () {
+ return LanguageService.selectedLanguage = defaultLanguage //WebStorage.get('Language.language') || defaultLanguage
+ }
+
+ return LanguageService
+}
diff --git a/res/app/settings/language/language.jade b/res/app/settings/language/language.jade
new file mode 100644
index 00000000..dad6be6d
--- /dev/null
+++ b/res/app/settings/language/language.jade
@@ -0,0 +1,8 @@
+.widget-container.fluid-height
+ .heading
+ i.fa.fa-flag
+ span(translate) Language
+ .widget-content.padded
+ .form-horizontal
+ .form-group
+ select.form-control(ng-model='language', ng-options='l.code as l.name for l in supportedLanguages')
diff --git a/res/app/settings/settings.jade b/res/app/settings/settings.jade
new file mode 100644
index 00000000..2cccb5ea
--- /dev/null
+++ b/res/app/settings/settings.jade
@@ -0,0 +1,65 @@
+div(pane='center')
+ .row
+ .col-md-4
+ .widget-container.fluid-height
+ .heading
+ i.fa.fa-save
+ span(translate) Local storage
+ .widget-content.padded
+ button(ng-click='resetSettings()').btn.btn-danger
+ i.fa.fa-trash-o
+ span(translate) Reset Settings
+ .col-md-4
+ div(ng-include='"language.jade"')
+ .col-md-4
+ .widget-container.fluid-height
+ .heading
+ i.fa.fa-exclamation-circle
+ span(translate) Notifications
+ .widget-content.padded
+ label.checkbox
+ input(type='checkbox', ng-model='notificationsEnabled', ng-click='enableNotifications()', disabled)
+ span(translate) Enable notifications
+
+ .row //(ng-controller='PortForwardingCtrl')
+ .col-md-12
+ .widget-container.fluid-height
+ .heading
+ i.fa.fa-arrow-circle-o-right
+ span(translate) Reverse Port Forwarding
+ .widget-content.padded
+ div //(ng-controller='PortForwardingCtrl')
+ .xcol-md-6
+ //label.checkbox
+ input(type='checkbox', ng-model='autoPortForwarding', ng-disabled='true')
+ span Auto-enable reverse port forwarding on connect
+ table(ng-table='portsTable').table
+ thead
+ tr
+ th
+ div {{"Target IP / Hostname"|translate}}
+ th
+ div {{"Target Port"|translate}}
+ th
+ div {{"Device Port"|translate}}
+ tbody
+ tr(ng-repeat='result in $data')
+ td(data-title="'Target IP / Hostname'")
+ input(type='text', ng-model='result.targetHost', placeholder='{{"Target host (detect if blank)"|translate}}')
+ td(data-title="'Target Port'")
+ input(type='number', ng-model='result.targetPort', ng-change='targetPortChanged(result)', placeholder='{{"Example: 3000"|translate}}')
+ td(data-title="'Device Port'")
+ input(type='number', ng-model='result.devicePort', placeholder='{{"Example: 3000"|translate}}')
+ //td(titlew)
+ button(ng-click='forwarding = !forwarding', ng-class="{active: forwarding}").btn.btn-primary
+ i.fa(ng-class="{'fa-arrow-circle-right': !forwarding, 'fa-times-circle': forwarding}")
+ span(ng-show='forwarding', translate) Unforward Ports
+ span(ng-hide='forwarding', translate) Forward Ports
+ table(ng-table='deviceStatusTable', ng-hide='!devicesStatus.length').table
+ tr(ng-repeat='result in $data')
+ td(title="'Device'")
+ p {{ result.deviceId }}
+ td(title="'Reachable'")
+ i(ng-class="{'text-status-on': result.value.connectable, 'text-status-off': !result.value.connectable}").fa.fa-circle
+ td(title="'Connected'")
+ i(ng-class="{'text-status-on': result.value.connected, 'text-status-off': !result.value.connected}").fa.fa-circle