Browse Source

開發規範、佈署流程

ringechchen 6 years ago
commit
d86a085ffb
100 changed files with 24690 additions and 0 deletions
  1. BIN
      documents/codingStandards/OgilvyOne_DC_CodingStyle_v1.pdf
  2. 9
    0
      documents/codingStandards/readMeFirst.md
  3. 256
    0
      documents/deployments/readMeFirst.md
  4. 9
    0
      readMeFirst.md
  5. 3
    0
      sampleProject/.gitattributes
  6. 9
    0
      sampleProject/.gitignore
  7. 40
    0
      sampleProject/app/Console/Kernel.php
  8. 65
    0
      sampleProject/app/Exceptions/Handler.php
  9. 70
    0
      sampleProject/app/FunMenu.php
  10. 15
    0
      sampleProject/app/FunMenuDetail.php
  11. 201
    0
      sampleProject/app/FunUserGroups.php
  12. 10
    0
      sampleProject/app/Functions.php
  13. 32
    0
      sampleProject/app/Http/Controllers/Auth/ForgotPasswordController.php
  14. 39
    0
      sampleProject/app/Http/Controllers/Auth/LoginController.php
  15. 71
    0
      sampleProject/app/Http/Controllers/Auth/RegisterController.php
  16. 39
    0
      sampleProject/app/Http/Controllers/Auth/ResetPasswordController.php
  17. 105
    0
      sampleProject/app/Http/Controllers/Backend/FunmenusController.php
  18. 108
    0
      sampleProject/app/Http/Controllers/Backend/FunmenusDetailController.php
  19. 17
    0
      sampleProject/app/Http/Controllers/Backend/IndexController.php
  20. 35
    0
      sampleProject/app/Http/Controllers/Backend/PasswordController.php
  21. 118
    0
      sampleProject/app/Http/Controllers/Backend/UsergroupsController.php
  22. 81
    0
      sampleProject/app/Http/Controllers/Backend/UsersController.php
  23. 13
    0
      sampleProject/app/Http/Controllers/Controller.php
  24. 28
    0
      sampleProject/app/Http/Controllers/HomeController.php
  25. 60
    0
      sampleProject/app/Http/Kernel.php
  26. 17
    0
      sampleProject/app/Http/Middleware/EncryptCookies.php
  27. 26
    0
      sampleProject/app/Http/Middleware/RedirectIfAuthenticated.php
  28. 18
    0
      sampleProject/app/Http/Middleware/TrimStrings.php
  29. 17
    0
      sampleProject/app/Http/Middleware/VerifyCsrfToken.php
  30. 35
    0
      sampleProject/app/Http/ViewComposers/LeftMenuComposer.php
  31. 30
    0
      sampleProject/app/Providers/AppServiceProvider.php
  32. 30
    0
      sampleProject/app/Providers/AuthServiceProvider.php
  33. 21
    0
      sampleProject/app/Providers/BroadcastServiceProvider.php
  34. 34
    0
      sampleProject/app/Providers/ComposerServiceProvider.php
  35. 32
    0
      sampleProject/app/Providers/EventServiceProvider.php
  36. 73
    0
      sampleProject/app/Providers/RouteServiceProvider.php
  37. 32
    0
      sampleProject/app/User.php
  38. 51
    0
      sampleProject/artisan
  39. 63
    0
      sampleProject/bootstrap/app.php
  40. 17
    0
      sampleProject/bootstrap/autoload.php
  41. 2
    0
      sampleProject/bootstrap/cache/.gitignore
  42. 58
    0
      sampleProject/composer.json
  43. 4328
    0
      sampleProject/composer.lock
  44. 235
    0
      sampleProject/config/app.php
  45. 102
    0
      sampleProject/config/auth.php
  46. 58
    0
      sampleProject/config/broadcasting.php
  47. 91
    0
      sampleProject/config/cache.php
  48. 108
    0
      sampleProject/config/database.php
  49. 68
    0
      sampleProject/config/filesystems.php
  50. 20
    0
      sampleProject/config/image.php
  51. 123
    0
      sampleProject/config/mail.php
  52. 85
    0
      sampleProject/config/queue.php
  53. 38
    0
      sampleProject/config/services.php
  54. 179
    0
      sampleProject/config/session.php
  55. 33
    0
      sampleProject/config/view.php
  56. 1
    0
      sampleProject/database/.gitignore
  57. 24
    0
      sampleProject/database/factories/ModelFactory.php
  58. 35
    0
      sampleProject/database/migrations/2014_10_12_000000_create_users_table.php
  59. 32
    0
      sampleProject/database/migrations/2014_10_12_100000_create_password_resets_table.php
  60. 35
    0
      sampleProject/database/migrations/2016_02_23_075631_create_functions_table.php
  61. 34
    0
      sampleProject/database/migrations/2016_02_23_080148_create_funmenu_table.php
  62. 35
    0
      sampleProject/database/migrations/2016_02_23_080344_create_funmenudetail_table.php
  63. 35
    0
      sampleProject/database/migrations/2016_02_23_080520_create_funusergroups_table.php
  64. 16
    0
      sampleProject/database/seeds/DatabaseSeeder.php
  65. 19
    0
      sampleProject/package.json
  66. 31
    0
      sampleProject/phpunit.xml
  67. 20
    0
      sampleProject/public/.htaccess
  68. 394
    0
      sampleProject/public/assets/css/animate.delay.css
  69. 1
    0
      sampleProject/public/assets/css/animate.min.css
  70. 5
    0
      sampleProject/public/assets/css/bootstrap-clockpicker.min.css
  71. 337
    0
      sampleProject/public/assets/css/bootstrap-datetimepicker.css
  72. 663
    0
      sampleProject/public/assets/css/bootstrap-editable.css
  73. 1310
    0
      sampleProject/public/assets/css/bootstrap-override.css
  74. 476
    0
      sampleProject/public/assets/css/bootstrap-theme.css
  75. 1
    0
      sampleProject/public/assets/css/bootstrap-theme.css.map
  76. 5
    0
      sampleProject/public/assets/css/bootstrap-theme.min.css
  77. 10
    0
      sampleProject/public/assets/css/bootstrap-timepicker.min.css
  78. 98
    0
      sampleProject/public/assets/css/bootstrap-wysihtml5.css
  79. 6585
    0
      sampleProject/public/assets/css/bootstrap.css
  80. 1
    0
      sampleProject/public/assets/css/bootstrap.css.map
  81. 5
    0
      sampleProject/public/assets/css/bootstrap.min.css
  82. 264
    0
      sampleProject/public/assets/css/codemirror/codemirror.css
  83. 13
    0
      sampleProject/public/assets/css/codemirror/index.html
  84. 75
    0
      sampleProject/public/assets/css/codemirror/theme/ambiance.css
  85. 13
    0
      sampleProject/public/assets/css/codemirror/theme/index.html
  86. 174
    0
      sampleProject/public/assets/css/colorpicker.css
  87. 2418
    0
      sampleProject/public/assets/css/custom.css
  88. 400
    0
      sampleProject/public/assets/css/dropzone.css
  89. 1566
    0
      sampleProject/public/assets/css/font-awesome.css
  90. 4
    0
      sampleProject/public/assets/css/font-awesome.min.css
  91. 13
    0
      sampleProject/public/assets/css/font.helvetica-neue.css
  92. 10
    0
      sampleProject/public/assets/css/font.roboto.css
  93. 612
    0
      sampleProject/public/assets/css/fullcalendar.css
  94. 13
    0
      sampleProject/public/assets/css/index.html
  95. 37
    0
      sampleProject/public/assets/css/jquery-jvectormap-1.2.2.css
  96. 986
    0
      sampleProject/public/assets/css/jquery-ui-1.10.3.css
  97. 261
    0
      sampleProject/public/assets/css/jquery.datatables.css
  98. 99
    0
      sampleProject/public/assets/css/jquery.gritter.css
  99. 67
    0
      sampleProject/public/assets/css/jquery.tagsinput.css
  100. 0
    0
      sampleProject/public/assets/css/lato.css

BIN
documents/codingStandards/OgilvyOne_DC_CodingStyle_v1.pdf View File


+ 9
- 0
documents/codingStandards/readMeFirst.md View File

@@ -0,0 +1,9 @@
1
+# 開發規範相關
2
+
3
+## 目錄結構
4
+1. OgilvyOne_DC_CodingStyle_v1.pdf 命名相關
5
+
6
+## 補充
7
+1. 變數採用「小駝峰式命名法」,具體參閱[這邊](https://zh.wikipedia.org/wiki/%E9%A7%9D%E5%B3%B0%E5%BC%8F%E5%A4%A7%E5%B0%8F%E5%AF%AB)。
8
+2. 排版方式使用 PSR2 規範,具體參閱[這邊](https://www.php-fig.org/psr/psr-2/)。
9
+3. 不須太細看 PSR2 規範,但需要將規範修正原則設定在自己的慣用 IDE 中,就可提醒自己那些地方不合規,以 PhpStorm 為例,體參閱[這邊](https://confluence.jetbrains.com/pages/viewpage.action?pageId=53341345)。

+ 256
- 0
documents/deployments/readMeFirst.md View File

@@ -0,0 +1,256 @@
1
+# 環境佈署相關
2
+
3
+## 目錄結構
4
+1. TBA
5
+
6
+## 名詞解釋
7
+1. DEV: 個人開發環境
8
+2. PRE: 組內/與客戶的聯調預覽環境
9
+3. PRO: 線上環境
10
+
11
+## 流程
12
+### DEV環境背景
13
+0. 紀錄時間 2019-07
14
+1. OS: Ubuntu 16.04.2 LTS
15
+2. Apache: 2.4.18
16
+3. Mysql: 5.7.27
17
+4. PHP: 7.3.7-2
18
+5. XDebug: 2.7.1
19
+6. Composer: 1.8.6
20
+7. Laravel: 5.5.4
21
+8. 預設網頁根目錄: /var/www/html
22
+
23
+### DEV環境建置(都以 root 的名義執行)
24
+apt-get update # 更新軟體來源
25
+
26
+apt-get install apache2 # 安裝 Apache 並啟動服務
27
+
28
+apt-get install mysql-server mysql-client # 安裝 Mysql 並啟動服務,安裝過程中需要設定資料帳號 root 的密碼
29
+
30
+apt-get install software-properties-common # 安裝 php 7.3 之前需要修改軟體來源
31
+
32
+add-apt-repository ppa:ondrej/php # 加入 php 7.3 專用的軟體來源
33
+
34
+apt-get update # 再次更新軟體來源
35
+
36
+apt-get install php7.3 php-pear php7.3-curl php7.3-dev php7.3-gd php7.3-mbstring php7.3-zip php7.3-mysql php7.3-xml # 安裝 php 7.3 與相關 plugin
37
+
38
+apt-get install php-xdebug # 安裝 XDebug
39
+
40
+apt-get install curl zip lrzsz # 安裝其他常用的工具
41
+
42
+apt-get install phpmyadmin # 安裝 phpmyadmin ,選擇 apache 以及啟用 dbconfig-common ,以及設定密碼
43
+
44
+curl -s https://getcomposer.org/installer | php # 下載最新版 composer
45
+
46
+mv composer.phar /usr/local/bin/composer # 安裝 composer
47
+
48
+a2enmod rewrite # 啟用 Apache 目錄重定向模組,讓 laravel 目錄可以正常被解析
49
+
50
+service apache2 restart # 重啟 Apache 使剛才的設定生效
51
+
52
+php -i | grep ini | grep Configuration # 找出 php.ini 的路徑之後要修改設定 (假設是 /etc/php/7.3/cli/php.ini)
53
+
54
+vi /etc/php/7.3/cli/php.ini # 編輯設定檔
55
+
56
+```
57
+; 在最後一行加入這個敘述
58
+; 其中 dev 就對應名詞解釋章節中,當前環境的英文小寫,同理線上環境就是 pro
59
+ogilvy.runtime.environment=dev
60
+
61
+; 搜尋 error_log 開頭的這行,並且將開頭的分號註解移除,指定一個放置 error 訊息的路徑
62
+error_log = /tmp/php_errors.log
63
+```
64
+
65
+### PRE/PRO環境背景與環境建置
66
+1. 由於這些環境背景與建置方式取決於專案或客戶,所以不另行介紹,預設參考 DEV 環境。
67
+
68
+### DEV上的基底程式建置(都以 root 的名義執行)
69
+#### A. 上傳範例程式碼
70
+cd /var/www/html # 切換到網頁根目錄
71
+
72
+rz # 隨後選擇需要上傳的壓縮程式碼,例如 sampleProject.zip
73
+
74
+unzip sampleProject.zip # 解壓縮
75
+
76
+rm sampleProject.zip # 刪除壓縮檔
77
+
78
+mv sampleProject ringeProject # 將資料檔名改成自己想要的名字,例如 ringeProject
79
+
80
+#### B. 下載相依套件
81
+cd /var/www/html/ringeProject # 切換進入專案資料夾
82
+
83
+composer install # 安裝所有相依套件,存入新創建的 vendor 資料夾中
84
+
85
+php artisan optimize # 最佳化相依套件的安裝(讓整體檔案變小)
86
+
87
+#### C. 專案其他設定
88
+cd /var/www/html/ringeProject # 切換進入專案資料夾
89
+
90
+php artisan storage:link # 若專案有用戶創建的靜態內容,則需要有公開連結與對應的資料夾捷徑,它會在 public 資料夾下創建捷徑指向去 storage/app/public 資料夾中,之後的存取 URL 就會是 http://example.com/storage
91
+
92
+php artisan key:generate # 重建 APP_KEY ,也就是 .env 文件中的 APP_KEY 部分
93
+
94
+vi .env # 編輯預設的專案設定文件,但此文件不會被使用,之後需要拷貝成開發環境設定檔名
95
+
96
+```
97
+APP_ENV=dev                                                 # 本範例用在開發環境上所以指定為 dev ,但實際情況會用在預設的線上環境需要指定 pro
98
+APP_KEY=base64:MtT8zoZvIJxglLOMY75wXScbK3rRcxPMHYQoiIvaGRQ= # 在下過 php artisan key:generate 指令後,此行會更新,需要同步到所有相關設定檔
99
+APP_DEBUG=true                                              # dev 環境建議開啟,pro 環境建議關閉
100
+APP_LOG_LEVEL=debug                                         # dev 環境建議指定 debug ,pro 環境建議指定 info
101
+APP_URL=http://ringeProject.ogilvy.com.tw                   # 建議使用 xxx.ogilvy.com.tw 的命名方式(另有教學會指定讓該網址生效),避免開發環境太多臨時專案都用 localhost 產生衝突
102
+APP_NAME=ringeProject                                       # 可填寫程式資料夾的名字,不會被網頁的任何地方顯示
103
+
104
+DB_CONNECTION=mysql                                         # 此行基本上不需要改,用 mysql/maria 都適用
105
+DB_HOST=127.0.0.1                                           # 若按照教學進行則可指定本機,不然可視當前環境另外指定
106
+DB_PORT=3306                                                # mysql 預設的 port 可不用修改
107
+DB_DATABASE=ringeProject                                    # 指定連接的資料庫名稱,可視環境修改
108
+DB_USERNAME=root                                            # mysql 帳號
109
+DB_PASSWORD=root                                            # mysql 密碼
110
+
111
+BROADCAST_DRIVER=log                                        # 不需修改或視情況修改
112
+CACHE_DRIVER=file                                           # 不需修改或視情況修改
113
+SESSION_DRIVER=file                                         # 不需修改或視情況修改
114
+QUEUE_DRIVER=sync                                           # 不需修改或視情況修改
115
+```
116
+
117
+cp .env .env.dev # 拷貝成實際的專案設定文件,結尾的 .dev 對應名詞解釋章節中,當前環境的英文小寫,同理線上環境就是 .pro
118
+
119
+cp .env .env.pre # 拷貝成預覽環境的專案設定文件,之後需要另外調整內容,本範例不介紹
120
+
121
+cp .env .env.pro # 拷貝成線上環境的專案設定文件,之後需要另外調整內容,本範例不介紹
122
+
123
+chmod -R 777 storage # 修改 storage 文件夾讓網頁伺服器有權限寫入數值
124
+
125
+#### D. 匯入資料庫
126
+
127
+cd ~/ # 切換回家目錄
128
+
129
+rz # 隨後選擇需要上傳的資料庫 schema ,例如 tableSchema.sql
130
+
131
+sed "s/sampleProject/ringeProject/g" tableSchema.sql > ringeProject.sql # 將範例資料庫改成在 laravel 設定檔中指定的庫名並以庫名當成檔名保存
132
+
133
+mysql -uroot -p < ringeProject.sql # 匯入資料庫
134
+
135
+rm -f *.sql # 移除這些 schema
136
+
137
+vi /etc/mysql/conf.d/mysql.cnf # 編輯 mysql 設定檔,在最底下加入這個,讓後台選單功能 SQL 可以順利
138
+
139
+```
140
+[mysqld]
141
+sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
142
+```
143
+
144
+service mysql restart # 重啟 mysql
145
+
146
+#### E. 剩餘配置
147
+
148
+vi /etc/apache2/sites-available/ringeProject.conf # 創建專案的 apache 配置文件,請視內容修改成自己的專案名稱
149
+
150
+```
151
+<VirtualHost *:80>
152
+	ServerAdmin  ringech.chen@ogilvy.com     # 改成自己的信箱
153
+	ServerName   ringeProject.ogilvy.com.tw  # 改成 xxx.ogilvy.com.tw 這樣的格式
154
+	DocumentRoot /var/www/html/ringeProject/public
155
+	<Directory  "/var/www/html/ringeProject/public">
156
+		Options FollowSymLinks
157
+		AllowOverride All
158
+	</Directory>
159
+	php_value xdebug.remote_port 7900 # 這個是開發環境 xdebug 用的 port ,避免跟其他人或其他專案混淆一律採取 [分機後2碼+累加編號: 例如 7900],後面章節會詳述
160
+	ErrorLog  ${APACHE_LOG_DIR}/ringeProject.error.log
161
+	CustomLog ${APACHE_LOG_DIR}/ringeProject.access.log combined
162
+</VirtualHost>
163
+```
164
+
165
+a2ensite ringeProject # 啟動該配置文件
166
+
167
+service apache2 reload # 重載入 Apache 使剛才的設定生效
168
+改成
169
+接著編輯自己的操作電腦(並非 Ubuntu 那台),編輯它的 host 文件(舉例 windows 系統放在 C:\Windows\System32\drivers\etc\hosts),於文件末端加入一行
170
+
171
+```
172
+10.10.10.10 ringeProject.ogilvy.com.tw # ringeProject 的 dev 環境 (修改成 dev 伺服器的 IP 以及自己指定的命名空間)
173
+```
174
+
175
+之後在自己的操作電腦打開瀏覽器,輸入 http://ringeproject.ogilvy.com.tw/backend/login 登入驗證架設是否成功,預設登入的帳密: admin@example.com / onemispwd23525008
176
+
177
+### DEV上的程式開發調適
178
+
179
+#### A. 錯誤訊息路徑整理
180
+tail -f 錯誤日誌路徑 # 這個指令方便及時觀察錯誤日誌
181
+
182
+```
183
+/var/www/html/sampleProject/storage/logs/laravel.log # 程式等級的錯誤訊息,例如資料夾權限, mysql 權限等等,通常在瀏覽器執行時會有較詳細的頁面
184
+/tmp/php_errors.log # php 語法等級的錯誤,像是堆疊溢位,正規表達無限迴圈等等
185
+/var/log/apache2/ringeProject.error.log # 伺服器等級的錯誤
186
+/tmp/xdebug.log # xdebug 日誌
187
+```
188
+
189
+#### B. 除錯(使用 Tool=Xdebug + IDE=Phpstorm 作為範例)
190
+
191
+##### 伺服器端的 Xdebug 設定
192
+vi /etc/php/7.3/mods-available/xdebug.ini # 修改配置文件加入以下內容,若沒有此文件也可以修改 php.ini(但需要微調配置內容)
193
+
194
+```
195
+xdebug.remote_autostart = 1
196
+xdebug.remote_enable = 1
197
+xdebug.remote_handler = "dbgp"
198
+xdebug.remote_host = "127.0.0.1" 
199
+xdebug.remote_log = "/tmp/xdebug.log"
200
+xdebug.remote_cookie_expire_time = 36000
201
+```
202
+
203
+service apache2 restart # 重啟動 Apache 使剛才的設定生效
204
+
205
+##### 操作端的 port mapping 設定(使用 Windows 7 作為範例)
206
+需要先下載 [plink](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html)
207
+
208
+plink -ssh -L 7900:127.0.0.1:7900 -pw 開發機的密碼 -N 開發機的帳號@開發機的IP # 打開 cmd 下這個指令即可將本地 phpstorm 的監聽 port 轉移到開發機上的 localhost 對應的 port
209
+
210
+##### 操作端的 Phpstorm 設定
211
+
212
+1. File > Settings > Language & Framework > PHP > Debug > Xdebug > Debug Port > 填寫之前章節指定的 7900 連線埠
213
+
214
+2. File > Settings > Build, Execution, Deployment > Deployment > + > 填入程式碼發布資訊
215
+	1. Name:                         ringeProject
216
+	2. Connection > Type:            SFTP
217
+	3. Connection > SFTP Host:       填入開發機器的IP
218
+	4. Connection > Port:            填入開發機器的PORT
219
+	5. Connection > Root path:       /
220
+	6. Connection > User name:       填入開發機器的帳號
221
+	7. Connection > Auth Type:       Password
222
+	8. Connection > Password:        填入開發機器的密碼
223
+	9. Connection > Web root URL:    http://ringeProject.ogilvy.com.tw
224
+	10. Mappings   > Local path:      操作端電腦專案的根目錄
225
+	11. Mappings   > Remote path:     伺服器端電腦專案的根目錄
226
+	12. Mappings   > Web path on ..:  /
227
+
228
+3. File > Settings > Build, Execution, Deployment > Deployment > Options > Upload Changed files ...: 選擇Ctrl + S ,之後操作端保存程式碼的時候,IDE 就會自動上傳到開發環境即時生效
229
+
230
+
231
+4. File > Settings > Language & Framework > PHP > Servers > + > 填入程式碼路徑對應資訊
232
+	1. Name: ringeProject
233
+	2. Host: ringeproject.ogilvy.com.tw
234
+	3. Port: 80
235
+	4. Use path mapings: 打勾
236
+	5. Absolute path on the server: /var/www/html/ringeProject
237
+
238
+5. 右上方除錯箭頭 > Edit configurations > + > PHP Web Page >
239
+	1. Name:      ringeProject
240
+	2. Server:    選擇剛才建立的 ringeProject
241
+	3. Start URL: http://ringeProject.ogilvy.com.tw/
242
+
243
+6. 詳細的官方教學 [看這邊](https://www.jetbrains.com/help/phpstorm/configuring-xdebug.html)
244
+
245
+### PRE/PRO上的程式佈署
246
+pre 環境選擇性使用手動上傳檔案或者使用版控
247
+
248
+pro 環境希望能夠做到全部使用版控
249
+
250
+具體細節參閱版控資料夾裡面的說明
251
+
252
+### PRE/PRO上的程式調適
253
+參閱「錯誤訊息路徑整理」章節,需要先行在這些環境上的配置文件中找出所有的除錯所需路徑,由於線上環境沒有 xdebug 所以這些路徑會幫助定位問題
254
+
255
+### 其他注意事項
256
+

+ 9
- 0
readMeFirst.md View File

@@ -0,0 +1,9 @@
1
+# DC Team Laravel Base
2
+
3
+## 目錄結構
4
+1. documents/codingStandards/* 開發規範相關
5
+2. documents/deployments/* 環境佈署相關
6
+3. documents/systemControls/* 版本控制相關
7
+4. documents/samples/* 情境範例
8
+5. tableSchema.sql 資料表描述
9
+6. sampleProject/* 範例用的基底框架

+ 3
- 0
sampleProject/.gitattributes View File

@@ -0,0 +1,3 @@
1
+* text=auto
2
+*.css linguist-vendored
3
+*.scss linguist-vendored

+ 9
- 0
sampleProject/.gitignore View File

@@ -0,0 +1,9 @@
1
+/node_modules
2
+/public/storage
3
+/public/hot
4
+/storage/*.key
5
+/vendor
6
+/.idea
7
+Homestead.json
8
+Homestead.yaml
9
+.env

+ 40
- 0
sampleProject/app/Console/Kernel.php View File

@@ -0,0 +1,40 @@
1
+<?php
2
+
3
+namespace App\Console;
4
+
5
+use Illuminate\Console\Scheduling\Schedule;
6
+use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
7
+
8
+class Kernel extends ConsoleKernel
9
+{
10
+    /**
11
+     * The Artisan commands provided by your application.
12
+     *
13
+     * @var array
14
+     */
15
+    protected $commands = [
16
+        //
17
+    ];
18
+
19
+    /**
20
+     * Define the application's command schedule.
21
+     *
22
+     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
23
+     * @return void
24
+     */
25
+    protected function schedule(Schedule $schedule)
26
+    {
27
+        // $schedule->command('inspire')
28
+        //          ->hourly();
29
+    }
30
+
31
+    /**
32
+     * Register the Closure based commands for the application.
33
+     *
34
+     * @return void
35
+     */
36
+    protected function commands()
37
+    {
38
+        require base_path('routes/console.php');
39
+    }
40
+}

+ 65
- 0
sampleProject/app/Exceptions/Handler.php View File

@@ -0,0 +1,65 @@
1
+<?php
2
+
3
+namespace App\Exceptions;
4
+
5
+use Exception;
6
+use Illuminate\Auth\AuthenticationException;
7
+use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
8
+
9
+class Handler extends ExceptionHandler
10
+{
11
+    /**
12
+     * A list of the exception types that should not be reported.
13
+     *
14
+     * @var array
15
+     */
16
+    protected $dontReport = [
17
+        \Illuminate\Auth\AuthenticationException::class,
18
+        \Illuminate\Auth\Access\AuthorizationException::class,
19
+        \Symfony\Component\HttpKernel\Exception\HttpException::class,
20
+        \Illuminate\Database\Eloquent\ModelNotFoundException::class,
21
+        \Illuminate\Session\TokenMismatchException::class,
22
+        \Illuminate\Validation\ValidationException::class,
23
+    ];
24
+
25
+    /**
26
+     * Report or log an exception.
27
+     *
28
+     * This is a great spot to send exceptions to Sentry, Bugsnag, etc.
29
+     *
30
+     * @param  \Exception  $exception
31
+     * @return void
32
+     */
33
+    public function report(Exception $exception)
34
+    {
35
+        parent::report($exception);
36
+    }
37
+
38
+    /**
39
+     * Render an exception into an HTTP response.
40
+     *
41
+     * @param  \Illuminate\Http\Request  $request
42
+     * @param  \Exception  $exception
43
+     * @return \Illuminate\Http\Response
44
+     */
45
+    public function render($request, Exception $exception)
46
+    {
47
+        return parent::render($request, $exception);
48
+    }
49
+
50
+    /**
51
+     * Convert an authentication exception into an unauthenticated response.
52
+     *
53
+     * @param  \Illuminate\Http\Request  $request
54
+     * @param  \Illuminate\Auth\AuthenticationException  $exception
55
+     * @return \Illuminate\Http\Response
56
+     */
57
+    protected function unauthenticated($request, AuthenticationException $exception)
58
+    {
59
+        if ($request->expectsJson()) {
60
+            return response()->json(['error' => 'Unauthenticated.'], 401);
61
+        }
62
+
63
+        return redirect()->guest(route('login'));
64
+    }
65
+}

+ 70
- 0
sampleProject/app/FunMenu.php View File

@@ -0,0 +1,70 @@
1
+<?php
2
+
3
+namespace App;
4
+
5
+use App\User;
6
+use Illuminate\Database\Eloquent\Model;
7
+use DB;
8
+
9
+class FunMenu extends Model
10
+{
11
+    protected $table = 'funmenu';
12
+
13
+    public function leftmenu($user_id)
14
+    {
15
+        $sql = "
16
+				SELECT
17
+                    `icon` as `icon`,
18
+					`MenuName` as `menuname`,
19
+					GROUP_CONCAT(`FunName` ORDER BY `FunMenuDetailCOrder` SEPARATOR ',') AS `submenuname`,
20
+					GROUP_CONCAT(`FunLink` ORDER BY `FunMenuDetailCOrder` SEPARATOR ',') AS `submenulink`
21
+				FROM
22
+					(
23
+						SELECT
24
+							*
25
+						FROM
26
+							`v_leftmenu`
27
+						WHERE
28
+							`FunId` IN (
29
+								SELECT
30
+									`Id`
31
+								FROM
32
+									`functions` AS `Functions_1`
33
+								WHERE
34
+									INSTR(
35
+										CONCAT(
36
+											',',
37
+											(
38
+												SELECT
39
+													GROUP_CONCAT(`FunList` SEPARATOR '') AS `submenuname`
40
+												FROM
41
+													`funusergroups`
42
+												WHERE
43
+													    CONCAT(',', `UsrList`, ',') LIKE CONCAT('%,', '".$user_id."', ',%')
44
+													AND `Valid` = 1
45
+												GROUP BY
46
+													`Valid`
47
+											),
48
+											','
49
+										),
50
+										CONCAT(
51
+											',',
52
+											`Id`,
53
+											','
54
+										)
55
+									) > 0
56
+							)
57
+					) A
58
+				GROUP BY
59
+					`menuname`
60
+				ORDER BY
61
+					`FunMenuCorder`
62
+				LIMIT
63
+					0, 30
64
+				;
65
+			";
66
+
67
+        $result = DB::select($sql);
68
+        return $result;
69
+    }
70
+}

+ 15
- 0
sampleProject/app/FunMenuDetail.php View File

@@ -0,0 +1,15 @@
1
+<?php
2
+
3
+namespace App;
4
+
5
+use Illuminate\Database\Eloquent\Model;
6
+
7
+class FunMenuDetail extends Model
8
+{
9
+    protected $table = 'funmenudetail';
10
+
11
+    public function getFunctions()
12
+    {
13
+        return $this->hasMany('App\Functions');
14
+    }
15
+}

+ 201
- 0
sampleProject/app/FunUserGroups.php View File

@@ -0,0 +1,201 @@
1
+<?php
2
+
3
+namespace App;
4
+
5
+use Illuminate\Database\Eloquent\Model;
6
+use DB;
7
+
8
+class FunUserGroups extends Model
9
+{
10
+    protected $table = 'funusergroups';
11
+    
12
+    public function selectedUsrList($id)
13
+    {
14
+        $sql = "
15
+				SELECT 
16
+					* 
17
+				FROM 
18
+					`users`
19
+				WHERE 
20
+					`id` IN (
21
+						SELECT 
22
+							`id` 
23
+						FROM 
24
+							`users` 
25
+						AS 
26
+							`Funusers_1`
27
+						WHERE 
28
+							INSTR(
29
+								CONCAT(
30
+									',', 
31
+									(
32
+										SELECT 
33
+											`UsrList` 
34
+										FROM 
35
+											`funusergroups` 
36
+										WHERE 
37
+											`id`=".$id."
38
+									), 
39
+									','
40
+								), 
41
+								CONCAT(
42
+									',', 
43
+									`id`, 
44
+									',' 
45
+								)
46
+							) > 0 
47
+					)
48
+				;
49
+			";
50
+        $result = DB::select($sql);
51
+        return $result;
52
+    }
53
+    
54
+    public function unseletedUsrList($id)
55
+    {
56
+        $sql = "
57
+				SELECT 
58
+					* 
59
+				FROM 
60
+					`users`
61
+				WHERE 
62
+					`id` Not IN (
63
+						SELECT 
64
+							`id` 
65
+						FROM 
66
+							`users` 
67
+						AS 
68
+							`Funusers_1`
69
+						WHERE 
70
+							INSTR(
71
+								CONCAT(
72
+									',', 
73
+									(
74
+										SELECT 
75
+											`UsrList` 
76
+										FROM 
77
+											`funusergroups` 
78
+										WHERE 
79
+											`id`=".$id."
80
+									), 
81
+									','
82
+								), 
83
+								CONCAT(
84
+									',', 
85
+									`id`, 
86
+									','
87
+								)
88
+							) > 0 
89
+					)
90
+				;
91
+			";
92
+        $result = DB::select($sql);
93
+        return $result;
94
+    }
95
+    
96
+    public function unseletedFunList($id)
97
+    {
98
+        $sql = "
99
+				SELECT 
100
+					* 
101
+				FROM 
102
+					`functions`
103
+				WHERE 
104
+					`id` Not IN (
105
+						SELECT 
106
+							`id` 
107
+						FROM 
108
+							`functions` 
109
+						AS 
110
+							`Functions_1`
111
+						WHERE 
112
+							INSTR(
113
+								CONCAT(
114
+									',', 
115
+									(
116
+										SELECT 
117
+											`FunList` 
118
+										FROM 
119
+											`funusergroups` 
120
+										WHERE 
121
+											`id`=".$id."
122
+									), 
123
+									','
124
+								), 
125
+								CONCAT(
126
+									',', 
127
+									`id`, 
128
+									','
129
+								)
130
+							) > 0 
131
+					)
132
+				;
133
+			";
134
+        $result = DB::select($sql);
135
+        return $result;
136
+    }
137
+    
138
+    public function seletedFunList($id)
139
+    {
140
+        $sql = "
141
+				SELECT 
142
+					* 
143
+				FROM 
144
+					`functions`
145
+				WHERE 
146
+					`id` IN (
147
+						SELECT 
148
+							`id` 
149
+						FROM 
150
+							`functions` 
151
+						AS 
152
+							`Functions_1`
153
+						WHERE 
154
+							INSTR(
155
+								CONCAT(
156
+									',', 
157
+									(
158
+										SELECT 
159
+											`FunList` 
160
+										FROM 
161
+											`funusergroups` 
162
+										WHERE 
163
+											`id`=".$id."
164
+										-- ;
165
+									), 
166
+									','
167
+								), 
168
+								CONCAT(
169
+									',', 
170
+									`id`, 
171
+									',' 
172
+								)
173
+							) > 0 
174
+					)
175
+				;
176
+			";
177
+        $result = DB::select($sql);
178
+        return $result;
179
+    }
180
+    
181
+    public function operData($id)
182
+    {
183
+        $sql = "
184
+			SELECT
185
+				`id`,
186
+				`Name`,
187
+				`Valid`,
188
+				`created_at`,
189
+				`updated_at`,
190
+				
191
+                `Oid`
192
+			FROM
193
+				`funusergroups`
194
+			WHERE
195
+				`id`='".$id."'
196
+			;
197
+		";
198
+        $result = DB::select($sql);
199
+        return $result;
200
+    }
201
+}

+ 10
- 0
sampleProject/app/Functions.php View File

@@ -0,0 +1,10 @@
1
+<?php
2
+
3
+namespace App;
4
+
5
+use Illuminate\Database\Eloquent\Model;
6
+
7
+class Functions extends Model
8
+{
9
+    protected $table = 'functions';
10
+}

+ 32
- 0
sampleProject/app/Http/Controllers/Auth/ForgotPasswordController.php View File

@@ -0,0 +1,32 @@
1
+<?php
2
+
3
+namespace App\Http\Controllers\Auth;
4
+
5
+use App\Http\Controllers\Controller;
6
+use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
7
+
8
+class ForgotPasswordController extends Controller
9
+{
10
+    /*
11
+    |--------------------------------------------------------------------------
12
+    | Password Reset Controller
13
+    |--------------------------------------------------------------------------
14
+    |
15
+    | This controller is responsible for handling password reset emails and
16
+    | includes a trait which assists in sending these notifications from
17
+    | your application to your users. Feel free to explore this trait.
18
+    |
19
+    */
20
+
21
+    use SendsPasswordResetEmails;
22
+
23
+    /**
24
+     * Create a new controller instance.
25
+     *
26
+     * @return void
27
+     */
28
+    public function __construct()
29
+    {
30
+        $this->middleware('guest');
31
+    }
32
+}

+ 39
- 0
sampleProject/app/Http/Controllers/Auth/LoginController.php View File

@@ -0,0 +1,39 @@
1
+<?php
2
+
3
+namespace App\Http\Controllers\Auth;
4
+
5
+use App\Http\Controllers\Controller;
6
+use Illuminate\Foundation\Auth\AuthenticatesUsers;
7
+
8
+class LoginController extends Controller
9
+{
10
+    /*
11
+    |--------------------------------------------------------------------------
12
+    | Login Controller
13
+    |--------------------------------------------------------------------------
14
+    |
15
+    | This controller handles authenticating users for the application and
16
+    | redirecting them to your home screen. The controller uses a trait
17
+    | to conveniently provide its functionality to your applications.
18
+    |
19
+    */
20
+
21
+    use AuthenticatesUsers;
22
+
23
+    /**
24
+     * Where to redirect users after login.
25
+     *
26
+     * @var string
27
+     */
28
+    protected $redirectTo = '/home';
29
+
30
+    /**
31
+     * Create a new controller instance.
32
+     *
33
+     * @return void
34
+     */
35
+    public function __construct()
36
+    {
37
+        $this->middleware('guest', ['except' => 'logout']);
38
+    }
39
+}

+ 71
- 0
sampleProject/app/Http/Controllers/Auth/RegisterController.php View File

@@ -0,0 +1,71 @@
1
+<?php
2
+
3
+namespace App\Http\Controllers\Auth;
4
+
5
+use App\User;
6
+use App\Http\Controllers\Controller;
7
+use Illuminate\Support\Facades\Validator;
8
+use Illuminate\Foundation\Auth\RegistersUsers;
9
+
10
+class RegisterController extends Controller
11
+{
12
+    /*
13
+    |--------------------------------------------------------------------------
14
+    | Register Controller
15
+    |--------------------------------------------------------------------------
16
+    |
17
+    | This controller handles the registration of new users as well as their
18
+    | validation and creation. By default this controller uses a trait to
19
+    | provide this functionality without requiring any additional code.
20
+    |
21
+    */
22
+
23
+    use RegistersUsers;
24
+
25
+    /**
26
+     * Where to redirect users after registration.
27
+     *
28
+     * @var string
29
+     */
30
+    protected $redirectTo = '/home';
31
+
32
+    /**
33
+     * Create a new controller instance.
34
+     *
35
+     * @return void
36
+     */
37
+    public function __construct()
38
+    {
39
+        $this->middleware('guest');
40
+    }
41
+
42
+    /**
43
+     * Get a validator for an incoming registration request.
44
+     *
45
+     * @param  array  $data
46
+     * @return \Illuminate\Contracts\Validation\Validator
47
+     */
48
+    protected function validator(array $data)
49
+    {
50
+        return Validator::make($data, [
51
+            'name' => 'required|max:255',
52
+            'email' => 'required|email|max:255|unique:users',
53
+            'password' => 'required|min:6|confirmed',
54
+        ]);
55
+    }
56
+
57
+    /**
58
+     * Create a new user instance after a valid registration.
59
+     *
60
+     * @param  array  $data
61
+     * @return User
62
+     */
63
+    protected function create(array $data)
64
+    {
65
+        return User::create([
66
+            'name' => $data['name'],
67
+            'email' => $data['email'],
68
+            'password' => bcrypt($data['password']),
69
+        ]);
70
+    }
71
+}

+ 39
- 0
sampleProject/app/Http/Controllers/Auth/ResetPasswordController.php View File

@@ -0,0 +1,39 @@
1
+<?php
2
+
3
+namespace App\Http\Controllers\Auth;
4
+
5
+use App\Http\Controllers\Controller;
6
+use Illuminate\Foundation\Auth\ResetsPasswords;
7
+
8
+class ResetPasswordController extends Controller
9
+{
10
+    /*
11
+    |--------------------------------------------------------------------------
12
+    | Password Reset Controller
13
+    |--------------------------------------------------------------------------
14
+    |
15
+    | This controller is responsible for handling password reset requests
16
+    | and uses a simple trait to include this behavior. You're free to
17
+    | explore this trait and override any methods you wish to tweak.
18
+    |
19
+    */
20
+
21
+    use ResetsPasswords;
22
+
23
+    /**
24
+     * Where to redirect users after resetting their password.
25
+     *
26
+     * @var string
27
+     */
28
+    protected $redirectTo = '/home';
29
+
30
+    /**
31
+     * Create a new controller instance.
32
+     *
33
+     * @return void
34
+     */
35
+    public function __construct()
36
+    {
37
+        $this->middleware('guest');
38
+    }
39
+}

+ 105
- 0
sampleProject/app/Http/Controllers/Backend/FunmenusController.php View File

@@ -0,0 +1,105 @@
1
+<?php
2
+
3
+namespace App\Http\Controllers\Backend;
4
+
5
+use Illuminate\Http\Request;
6
+
7
+use App\Http\Requests;
8
+use App\Http\Controllers\Controller;
9
+use App\FunMenu;
10
+use App\FunMenuDetail;
11
+use Redirect;
12
+use Session;
13
+use Validator;
14
+
15
+class FunmenusController extends Controller
16
+{
17
+    public function index()
18
+    {
19
+        $tables = FunMenu::All();
20
+
21
+        return view('admin.funmenus', [
22
+            'tables' => $tables,
23
+        ]);
24
+    }
25
+
26
+    public function create()
27
+    {
28
+        return view('admin.funmenusedit', [
29
+            'datas' => "",
30
+        ]);
31
+    }
32
+
33
+    public function edit($id)
34
+    {
35
+        $datas = FunMenu::find($id);
36
+        return view('admin.funmenusedit', [
37
+            'datas' => $datas,
38
+        ]);
39
+    }
40
+
41
+    public function store(Request $request)
42
+    {
43
+        $validator = Validator::make($request->all(), [
44
+            'MenuName' => 'required|max:255',
45
+            'Corder' => 'required'
46
+
47
+        ]);
48
+        if ($validator->fails()) {
49
+            return Redirect::back()
50
+            ->withErrors($validator);
51
+        }
52
+        else
53
+        {
54
+            if ($request->mode == "insert")
55
+            {
56
+                $funmenu = new FunMenu;
57
+                $funmenu->icon = $request->icon;
58
+                $funmenu->MenuName = $request->MenuName;
59
+                $funmenu->Valid = ($request->Valid == "on") ? 1 : 0;
60
+                $funmenu->Corder = $request->Corder;
61
+                $funmenu->Oid = $request->user()->id;
62
+                $funmenu->save();
63
+            }
64
+            else
65
+            {
66
+                $funmenu = FunMenu::find($request->id);
67
+                $funmenu->icon = $request->icon;
68
+                $funmenu->MenuName = $request->MenuName;
69
+                $funmenu->Valid = ($request->Valid == "on") ? 1 : 0;
70
+                $funmenu->Corder = $request->Corder;
71
+                $funmenu->Oid = $request->user()->id;
72
+                $funmenu->save();
73
+            }
74
+        }
75
+
76
+        return Redirect::back();
77
+    }
78
+
79
+    public function delete($id)
80
+    {
81
+        if ($id == 1)
82
+        {
83
+            Session::flash('msg', 'This can not be delete!!');
84
+        }
85
+        else
86
+        {
87
+            $funmenudetails = FunMenuDetail::where('FunMenuId', '=', $id);
88
+
89
+            if ($funmenudetails->count() > 0)
90
+            {
91
+                Session::flash('msg', 'Must delete functions first!!');
92
+            }
93
+            else
94
+            {
95
+                $funmenu = FunMenu::find($id);
96
+                $funmenu->delete();
97
+
98
+
99
+                $funmenudetails->delete();
100
+            }
101
+        }
102
+
103
+        return Redirect::back();
104
+    }
105
+}

+ 108
- 0
sampleProject/app/Http/Controllers/Backend/FunmenusDetailController.php View File

@@ -0,0 +1,108 @@
1
+<?php
2
+
3
+namespace App\Http\Controllers\Backend;
4
+
5
+use Illuminate\Http\Request;
6
+
7
+use App\Http\Requests;
8
+use App\Http\Controllers\Controller;
9
+use App\FunMenu;
10
+use App\FunMenuDetail;
11
+use App\Functions;
12
+use Redirect;
13
+use Session;
14
+
15
+class FunmenusDetailController extends Controller
16
+{
17
+    public function index($menuid)
18
+    {
19
+        $parentname = FunMenu::select('MenuName')->where('id', '=', $menuid)->get();
20
+        $funmenus = FunMenuDetail::select('FunId')->where('FunMenuId', '=', $menuid)->get();
21
+        $tables = Functions::whereIn('id', $funmenus)->get();
22
+
23
+        return view('admin.funmenusdetail', [
24
+            'parentname' => $parentname,
25
+            'tables' => $tables,
26
+            'id' => $menuid,
27
+        ]);
28
+    }
29
+
30
+    public function create($menuid)
31
+    {
32
+        return view('admin.funmenusdetailedit', [
33
+            'datas' => "",
34
+            'datas2' => "",
35
+            'id' => $menuid,
36
+        ]);
37
+    }
38
+
39
+    public function edit($menuid, $id)
40
+    {
41
+        $datas = Functions::find($id);
42
+        $datas2 = FunMenuDetail::select('id','Corder')->where('FunMenuId', '=', $menuid)->where('FunId', '=', $id)->get();
43
+
44
+        return view('admin.funmenusdetailedit', [
45
+            'datas' => $datas,
46
+            'datas2' => $datas2[0],
47
+            'id' => $menuid,
48
+        ]);
49
+    }
50
+
51
+    public function store(Request $request, $menuid)
52
+    {
53
+        if ($request->mode == "insert")
54
+        {
55
+            $function = new Functions;
56
+            $function->FunName = $request->FunName;
57
+            $function->FunLink = $request->FunLink;
58
+            $function->FunDesc = $request->FunDesc;
59
+            $function->Valid = ($request->Valid == "on") ? 1 : 0;
60
+            $function->Oid = $request->user()->id;
61
+            $function->save();
62
+
63
+            $functiondetail = new FunMenuDetail;
64
+            $functiondetail->FunMenuId = $menuid;
65
+            $functiondetail->FunId = $function->id;
66
+            $functiondetail->Valid = ($request->Valid == "on") ? 1 : 0;
67
+            $functiondetail->Corder = $request->Corder;
68
+            $functiondetail->Oid = $request->user()->id;
69
+            $functiondetail->save();
70
+        }
71
+        else
72
+        {
73
+            $function = Functions::find($request->id);
74
+            $function->FunName = $request->FunName;
75
+            $function->FunLink = $request->FunLink;
76
+            $function->FunDesc = $request->FunDesc;
77
+            $function->Valid = ($request->Valid == "on") ? 1 : 0;
78
+            $function->Oid = $request->user()->id;
79
+            $function->save();
80
+
81
+            $functiondetail = FunMenuDetail::find($request->detailid);
82
+            $functiondetail->Valid = ($request->Valid == "on") ? 1 : 0;
83
+            $functiondetail->Corder = $request->Corder;
84
+            $functiondetail->Oid = $request->user()->id;
85
+            $functiondetail->save();
86
+        }
87
+
88
+        return Redirect::back();
89
+    }
90
+
91
+    public function delete($menuid, $id)
92
+    {
93
+        if ($menuid == 1)
94
+        {
95
+            Session::flash('msg', 'This can not be delete!!');
96
+        }
97
+        else
98
+        {
99
+            $function = Functions::find($id);
100
+            $function->delete();
101
+
102
+            $funmenudetail = FunMenuDetail::where('FunId', '=', $id);
103
+            $funmenudetail->delete();
104
+        }
105
+
106
+        return Redirect::back();
107
+    }
108
+}

+ 17
- 0
sampleProject/app/Http/Controllers/Backend/IndexController.php View File

@@ -0,0 +1,17 @@
1
+<?php
2
+
3
+namespace App\Http\Controllers\Backend;
4
+
5
+use Illuminate\Http\Request;
6
+
7
+use App\FunMenu;
8
+use App\Http\Requests;
9
+use App\Http\Controllers\Controller;
10
+
11
+class IndexController extends Controller
12
+{
13
+    public function index()
14
+    {
15
+        return view('admin.index');
16
+    }
17
+}

+ 35
- 0
sampleProject/app/Http/Controllers/Backend/PasswordController.php View File

@@ -0,0 +1,35 @@
1
+<?php
2
+
3
+namespace App\Http\Controllers\Backend;
4
+
5
+use Illuminate\Http\Request;
6
+
7
+use App\User;
8
+use App\FunMenu;
9
+use App\Http\Requests;
10
+use App\Http\Controllers\Controller;
11
+use Session;
12
+use Redirect;
13
+
14
+class PasswordController extends Controller
15
+{
16
+    public function index()
17
+    {
18
+        return view('admin.password');
19
+    }
20
+
21
+    public function update(Request $request)
22
+    {
23
+        $this->validate($request, [
24
+            'qpwd1' => 'required|max:255',
25
+        ]);
26
+
27
+        $user = User::find($request->user()->id);
28
+        $user->password = bcrypt($request->qpwd1);
29
+        $user->save();
30
+
31
+        Session::flash('msg', 'Update Success!');
32
+
33
+        return Redirect::back();
34
+    }
35
+}

+ 118
- 0
sampleProject/app/Http/Controllers/Backend/UsergroupsController.php View File

@@ -0,0 +1,118 @@
1
+<?php
2
+
3
+namespace App\Http\Controllers\Backend;
4
+
5
+use Illuminate\Http\Request;
6
+
7
+use App\FunMenu;
8
+use App\FunUserGroups;
9
+use App\Http\Requests;
10
+use App\Http\Controllers\Controller;
11
+use Redirect;
12
+
13
+class UsergroupsController extends Controller
14
+{
15
+    public function index()
16
+    {
17
+        $tables = FunUserGroups::all();
18
+
19
+        return view('admin.usergroups', [
20
+            'tables' => $tables,
21
+        ]);
22
+    }
23
+
24
+    public function delete(Request $request, FunUserGroups $id)
25
+    {
26
+        if($id->id == 1)
27
+        {
28
+            return Redirect::back()->withErrors("Admin group can not be delete!");
29
+        }
30
+        else
31
+        {
32
+            $id->delete();
33
+        }
34
+        return Redirect::back();
35
+    }
36
+
37
+    public function create(Request $request)
38
+    {
39
+        $user_name = $request->user()->name;
40
+        $user_id = $request->user()->id;
41
+
42
+        $funmenu = new FunMenu;
43
+        $result = $funmenu->leftmenu($user_id);
44
+
45
+        $usergroup = new FunUserGroups;
46
+        $seleted_usrlist = $usergroup->selectedUsrList(9999);
47
+        $unseleted_usrlist = $usergroup->unseletedUsrList(9999);
48
+        $seleted_funlist = $usergroup->seletedFunList(9999);
49
+        $unseleted_funlist = $usergroup->unseletedFunList(9999);
50
+
51
+        return view('admin.usergroupsedit', [
52
+            'leftmenu' => $result,
53
+            'username' => $user_name,
54
+            'seleted_usrlist' => $seleted_usrlist,
55
+            'unseleted_usrlist' => $unseleted_usrlist,
56
+            'seleted_funlist' => $seleted_funlist,
57
+            'unseleted_funlist' => $unseleted_funlist,
58
+            'operdata' => "",
59
+
60
+        ]);
61
+    }
62
+
63
+    public function edit(Request $request, $id)
64
+    {
65
+        $user_name = $request->user()->name;
66
+        $user_id = $request->user()->id;
67
+        $fun_id = $id;
68
+
69
+        $funmenu = new FunMenu;
70
+        $result = $funmenu->leftmenu($user_id);
71
+
72
+        $usergroup = new FunUserGroups;
73
+        $seleted_usrlist = $usergroup->selectedUsrList($fun_id);
74
+        $unseleted_usrlist = $usergroup->unseletedUsrList($fun_id);
75
+        $seleted_funlist = $usergroup->seletedFunList($fun_id);
76
+        $unseleted_funlist = $usergroup->unseletedFunList($fun_id);
77
+        $operdata = $usergroup->operData($fun_id);
78
+
79
+        return view('admin.usergroupsedit', [
80
+            'leftmenu' => $result,
81
+            'username' => $user_name,
82
+            'seleted_usrlist' => $seleted_usrlist,
83
+            'unseleted_usrlist' => $unseleted_usrlist,
84
+            'seleted_funlist' => $seleted_funlist,
85
+            'unseleted_funlist' => $unseleted_funlist,
86
+            'operdata' => $operdata,
87
+
88
+        ]);
89
+    }
90
+
91
+    public function store(Request $request)
92
+    {
93
+        if ($request->mode == "insert")
94
+        {
95
+            $usergroup = new FunUserGroups;
96
+            $usergroup->Name = $request->Name;
97
+            $usergroup->FunList = $request->hidfunlist;
98
+            $usergroup->UsrList = $request->hidusrlist;
99
+            $usergroup->Valid = ($request->Valid == "on") ? 1 : 0;
100
+            $usergroup->Oid = $request->user()->id;
101
+            $usergroup->save();
102
+
103
+            return redirect('/backend/Usergroups');
104
+        }
105
+        else
106
+        {
107
+            $usergroup = FunUserGroups::find($request->id);
108
+            $usergroup->Name = $request->Name;
109
+            $usergroup->FunList = $request->hidfunlist;
110
+            $usergroup->UsrList = $request->hidusrlist;
111
+            $usergroup->Valid = ($request->Valid == "on") ? 1 : 0;
112
+            $usergroup->Oid = $request->user()->id;
113
+            $usergroup->save();
114
+
115
+            return redirect('/backend/Usergroups');
116
+        }
117
+    }
118
+}

+ 81
- 0
sampleProject/app/Http/Controllers/Backend/UsersController.php View File

@@ -0,0 +1,81 @@
1
+<?php
2
+
3
+namespace App\Http\Controllers\Backend;
4
+
5
+use Illuminate\Http\Request;
6
+
7
+use App\FunMenu;
8
+use App\User;
9
+use App\Http\Requests;
10
+use App\Http\Controllers\Controller;
11
+use Redirect;
12
+
13
+class UsersController extends Controller
14
+{
15
+    public function index()
16
+    {
17
+        $tables = User::all();
18
+
19
+        return view('admin.users', [
20
+            'tables' => $tables,
21
+        ]);
22
+    }
23
+
24
+    public function create(Request $request)
25
+    {
26
+        return view('admin.usersedit',[
27
+            'operdata' => "",
28
+        ]);
29
+    }
30
+
31
+    public function edit($id)
32
+    {
33
+        $usr_id = $id;
34
+        $operdata = User::find($usr_id);
35
+
36
+        return view('admin.usersedit',[
37
+            'operdata' => $operdata,
38
+        ]);
39
+    }
40
+
41
+    public function store(Request $request)
42
+    {
43
+        $role = \App\Role::where('name', 'admin')->first();
44
+
45
+        if ($request->mode == "insert")
46
+        {
47
+            $user = new User;
48
+            $user->name = $request->name;
49
+            $user->email = $request->email;
50
+            $user->password = bcrypt($request->password);
51
+            $user->save();
52
+            $user->attachRole($role);
53
+            return redirect('/backend/Users');
54
+        }
55
+        else
56
+        {
57
+            $user = User::find($request->id);
58
+            $user->name = $request->name;
59
+            if ($request->password != "")
60
+            {
61
+                $user->password = bcrypt($request->password);
62
+            }
63
+            $user->save();
64
+
65
+            return redirect('/backend/Users');
66
+        }
67
+    }
68
+
69
+    public function delete(Request $request, User $id)
70
+    {
71
+        if($id->email == "admin@gmail.com")
72
+        {
73
+            return Redirect::back()->withErrors("Administrator can not be delete!");
74
+        }
75
+        else
76
+        {
77
+            $id->delete();
78
+        }
79
+        return Redirect::back();
80
+    }
81
+}

+ 13
- 0
sampleProject/app/Http/Controllers/Controller.php View File

@@ -0,0 +1,13 @@
1
+<?php
2
+
3
+namespace App\Http\Controllers;
4
+
5
+use Illuminate\Foundation\Bus\DispatchesJobs;
6
+use Illuminate\Routing\Controller as BaseController;
7
+use Illuminate\Foundation\Validation\ValidatesRequests;
8
+use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
9
+
10
+class Controller extends BaseController
11
+{
12
+    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
13
+}

+ 28
- 0
sampleProject/app/Http/Controllers/HomeController.php View File

@@ -0,0 +1,28 @@
1
+<?php
2
+
3
+namespace App\Http\Controllers;
4
+
5
+use Illuminate\Http\Request;
6
+
7
+class HomeController extends Controller
8
+{
9
+    /**
10
+     * Create a new controller instance.
11
+     *
12
+     * @return void
13
+     */
14
+    public function __construct()
15
+    {
16
+        $this->middleware('auth');
17
+    }
18
+
19
+    /**
20
+     * Show the application dashboard.
21
+     *
22
+     * @return \Illuminate\Http\Response
23
+     */
24
+    public function index()
25
+    {
26
+        return view('home');
27
+    }
28
+}

+ 60
- 0
sampleProject/app/Http/Kernel.php View File

@@ -0,0 +1,60 @@
1
+<?php
2
+
3
+namespace App\Http;
4
+
5
+use Illuminate\Foundation\Http\Kernel as HttpKernel;
6
+
7
+class Kernel extends HttpKernel
8
+{
9
+    /**
10
+     * The application's global HTTP middleware stack.
11
+     *
12
+     * These middleware are run during every request to your application.
13
+     *
14
+     * @var array
15
+     */
16
+    protected $middleware = [
17
+        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
18
+        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
19
+        \App\Http\Middleware\TrimStrings::class,
20
+        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
21
+    ];
22
+
23
+    /**
24
+     * The application's route middleware groups.
25
+     *
26
+     * @var array
27
+     */
28
+    protected $middlewareGroups = [
29
+        'web' => [
30
+            \App\Http\Middleware\EncryptCookies::class,
31
+            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
32
+            \Illuminate\Session\Middleware\StartSession::class,
33
+            // \Illuminate\Session\Middleware\AuthenticateSession::class,
34
+            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
35
+            \App\Http\Middleware\VerifyCsrfToken::class,
36
+            \Illuminate\Routing\Middleware\SubstituteBindings::class,
37
+        ],
38
+
39
+        'api' => [
40
+            'throttle:60,1',
41
+            'bindings',
42
+        ],
43
+    ];
44
+
45
+    /**
46
+     * The application's route middleware.
47
+     *
48
+     * These middleware may be assigned to groups or used individually.
49
+     *
50
+     * @var array
51
+     */
52
+    protected $routeMiddleware = [
53
+        'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
54
+        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
55
+        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
56
+        'can' => \Illuminate\Auth\Middleware\Authorize::class,
57
+        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
58
+        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
59
+    ];
60
+}

+ 17
- 0
sampleProject/app/Http/Middleware/EncryptCookies.php View File

@@ -0,0 +1,17 @@
1
+<?php
2
+
3
+namespace App\Http\Middleware;
4
+
5
+use Illuminate\Cookie\Middleware\EncryptCookies as BaseEncrypter;
6
+
7
+class EncryptCookies extends BaseEncrypter
8
+{
9
+    /**
10
+     * The names of the cookies that should not be encrypted.
11
+     *
12
+     * @var array
13
+     */
14
+    protected $except = [
15
+        //
16
+    ];
17
+}

+ 26
- 0
sampleProject/app/Http/Middleware/RedirectIfAuthenticated.php View File

@@ -0,0 +1,26 @@
1
+<?php
2
+
3
+namespace App\Http\Middleware;
4
+
5
+use Closure;
6
+use Illuminate\Support\Facades\Auth;
7
+
8
+class RedirectIfAuthenticated
9
+{
10
+    /**
11
+     * Handle an incoming request.
12
+     *
13
+     * @param  \Illuminate\Http\Request  $request
14
+     * @param  \Closure  $next
15
+     * @param  string|null  $guard
16
+     * @return mixed
17
+     */
18
+    public function handle($request, Closure $next, $guard = null)
19
+    {
20
+        if (Auth::guard($guard)->check()) {
21
+            return redirect('/home');
22
+        }
23
+
24
+        return $next($request);
25
+    }
26
+}

+ 18
- 0
sampleProject/app/Http/Middleware/TrimStrings.php View File

@@ -0,0 +1,18 @@
1
+<?php
2
+
3
+namespace App\Http\Middleware;
4
+
5
+use Illuminate\Foundation\Http\Middleware\TrimStrings as BaseTrimmer;
6
+
7
+class TrimStrings extends BaseTrimmer
8
+{
9
+    /**
10
+     * The names of the attributes that should not be trimmed.
11
+     *
12
+     * @var array
13
+     */
14
+    protected $except = [
15
+        'password',
16
+        'password_confirmation',
17
+    ];
18
+}

+ 17
- 0
sampleProject/app/Http/Middleware/VerifyCsrfToken.php View File

@@ -0,0 +1,17 @@
1
+<?php
2
+
3
+namespace App\Http\Middleware;
4
+
5
+use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
6
+
7
+class VerifyCsrfToken extends BaseVerifier
8
+{
9
+    /**
10
+     * The URIs that should be excluded from CSRF verification.
11
+     *
12
+     * @var array
13
+     */
14
+    protected $except = [
15
+        //
16
+    ];
17
+}

+ 35
- 0
sampleProject/app/Http/ViewComposers/LeftMenuComposer.php View File

@@ -0,0 +1,35 @@
1
+<?php
2
+
3
+namespace App\Http\ViewComposers;
4
+
5
+use Illuminate\Http\Request;
6
+use Illuminate\View\View;
7
+use App\FunMenu;
8
+use Auth;
9
+
10
+class LeftMenuComposer {
11
+
12
+    protected $user_id;
13
+    protected $user_name;
14
+
15
+    public function __construct()
16
+    {
17
+        if (Auth::check()) {
18
+            // 這個使用者已經登入...
19
+            $user = Auth::user();
20
+
21
+            $this->user_id = $user->id;
22
+            $this->user_name = $user->name;
23
+        } else {
24
+            $this->user_id = 0;
25
+            $this->user_name = "Guest";
26
+        }
27
+    }
28
+
29
+    public function compose(View $view)
30
+    {
31
+        $funmenu = new FunMenu;
32
+        $result = $funmenu->leftmenu($this->user_id);
33
+        $view->with(['leftmenu' => $result, 'username' => $this->user_name]);
34
+    }
35
+}

+ 30
- 0
sampleProject/app/Providers/AppServiceProvider.php View File

@@ -0,0 +1,30 @@
1
+<?php
2
+
3
+namespace App\Providers;
4
+
5
+use Illuminate\Support\ServiceProvider;
6
+use Illuminate\Support\Facades\Schema;
7
+
8
+class AppServiceProvider extends ServiceProvider
9
+{
10
+    /**
11
+     * Bootstrap any application services.
12
+     *
13
+     * @return void
14
+     */
15
+    public function boot()
16
+    {
17
+        //
18
+		Schema::defaultStringLength(191);
19
+    }
20
+
21
+    /**
22
+     * Register any application services.
23
+     *
24
+     * @return void
25
+     */
26
+    public function register()
27
+    {
28
+        //
29
+    }
30
+}

+ 30
- 0
sampleProject/app/Providers/AuthServiceProvider.php View File

@@ -0,0 +1,30 @@
1
+<?php
2
+
3
+namespace App\Providers;
4
+
5
+use Illuminate\Support\Facades\Gate;
6
+use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
7
+
8
+class AuthServiceProvider extends ServiceProvider
9
+{
10
+    /**
11
+     * The policy mappings for the application.
12
+     *
13
+     * @var array
14
+     */
15
+    protected $policies = [
16
+        'App\Model' => 'App\Policies\ModelPolicy',
17
+    ];
18
+
19
+    /**
20
+     * Register any authentication / authorization services.
21
+     *
22
+     * @return void
23
+     */
24
+    public function boot()
25
+    {
26
+        $this->registerPolicies();
27
+
28
+        //
29
+    }
30
+}

+ 21
- 0
sampleProject/app/Providers/BroadcastServiceProvider.php View File

@@ -0,0 +1,21 @@
1
+<?php
2
+
3
+namespace App\Providers;
4
+
5
+use Illuminate\Support\ServiceProvider;
6
+use Illuminate\Support\Facades\Broadcast;
7
+
8
+class BroadcastServiceProvider extends ServiceProvider
9
+{
10
+    /**
11
+     * Bootstrap any application services.
12
+     *
13
+     * @return void
14
+     */
15
+    public function boot()
16
+    {
17
+        Broadcast::routes();
18
+
19
+        require base_path('routes/channels.php');
20
+    }
21
+}

+ 34
- 0
sampleProject/app/Providers/ComposerServiceProvider.php View File

@@ -0,0 +1,34 @@
1
+<?php
2
+
3
+namespace App\Providers;
4
+
5
+use View;
6
+use Illuminate\Support\ServiceProvider;
7
+use Illuminate\Http\Request;
8
+
9
+class ComposerServiceProvider extends ServiceProvider
10
+{
11
+    /**
12
+     * Bootstrap the application services.
13
+     *
14
+     * @return void
15
+     */
16
+    public function boot()
17
+    {
18
+        //
19
+        //dd('something2');
20
+        View::composer(['admin.index', 'admin.uc.leftmenu', 'admin.uc.header'], 'App\Http\ViewComposers\LeftMenuComposer');
21
+        //view()->composer(['admin.index', 'admin.uc.leftmenu', 'admin.uc.header'], 'App\Http\ViewComposers\LeftMenuComposer');
22
+        //$this->app['view']->composer(['admin.index', 'admin.uc.leftmenu', 'admin.uc.header'], 'App\Http\ViewComposers\LeftMenuComposer');
23
+    }
24
+
25
+    /**
26
+     * Register the application services.
27
+     *
28
+     * @return void
29
+     */
30
+    public function register()
31
+    {
32
+        //
33
+    }
34
+}

+ 32
- 0
sampleProject/app/Providers/EventServiceProvider.php View File

@@ -0,0 +1,32 @@
1
+<?php
2
+
3
+namespace App\Providers;
4
+
5
+use Illuminate\Support\Facades\Event;
6
+use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
7
+
8
+class EventServiceProvider extends ServiceProvider
9
+{
10
+    /**
11
+     * The event listener mappings for the application.
12
+     *
13
+     * @var array
14
+     */
15
+    protected $listen = [
16
+        'App\Events\SomeEvent' => [
17
+            'App\Listeners\EventListener',
18
+        ],
19
+    ];
20
+
21
+    /**
22
+     * Register any events for your application.
23
+     *
24
+     * @return void
25
+     */
26
+    public function boot()
27
+    {
28
+        parent::boot();
29
+
30
+        //
31
+    }
32
+}

+ 73
- 0
sampleProject/app/Providers/RouteServiceProvider.php View File

@@ -0,0 +1,73 @@
1
+<?php
2
+
3
+namespace App\Providers;
4
+
5
+use Illuminate\Support\Facades\Route;
6
+use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
7
+
8
+class RouteServiceProvider extends ServiceProvider
9
+{
10
+    /**
11
+     * This namespace is applied to your controller routes.
12
+     *
13
+     * In addition, it is set as the URL generator's root namespace.
14
+     *
15
+     * @var string
16
+     */
17
+    protected $namespace = 'App\Http\Controllers';
18
+
19
+    /**
20
+     * Define your route model bindings, pattern filters, etc.
21
+     *
22
+     * @return void
23
+     */
24
+    public function boot()
25
+    {
26
+        //
27
+
28
+        parent::boot();
29
+    }
30
+
31
+    /**
32
+     * Define the routes for the application.
33
+     *
34
+     * @return void
35
+     */
36
+    public function map()
37
+    {
38
+        $this->mapApiRoutes();
39
+
40
+        $this->mapWebRoutes();
41
+
42
+        //
43
+    }
44
+
45
+    /**
46
+     * Define the "web" routes for the application.
47
+     *
48
+     * These routes all receive session state, CSRF protection, etc.
49
+     *
50
+     * @return void
51
+     */
52
+    protected function mapWebRoutes()
53
+    {
54
+        Route::middleware('web')
55
+             ->namespace($this->namespace)
56
+             ->group(base_path('routes/web.php'));
57
+    }
58
+
59
+    /**
60
+     * Define the "api" routes for the application.
61
+     *
62
+     * These routes are typically stateless.
63
+     *
64
+     * @return void
65
+     */
66
+    protected function mapApiRoutes()
67
+    {
68
+        Route::prefix('api')
69
+             ->middleware('api')
70
+             ->namespace($this->namespace)
71
+             ->group(base_path('routes/api.php'));
72
+    }
73
+}

+ 32
- 0
sampleProject/app/User.php View File

@@ -0,0 +1,32 @@
1
+<?php
2
+
3
+namespace App;
4
+
5
+use Illuminate\Notifications\Notifiable;
6
+use Illuminate\Foundation\Auth\User as Authenticatable;
7
+
8
+class User extends Authenticatable
9
+{
10
+    use Notifiable;
11
+
12
+    /**
13
+     * The attributes that are mass assignable.
14
+     *
15
+     * @var array
16
+     */
17
+    protected $fillable = [
18
+        'name',
19
+        'email',
20
+        'password',
21
+    ];
22
+
23
+    /**
24
+     * The attributes that should be hidden for arrays.
25
+     *
26
+     * @var array
27
+     */
28
+    protected $hidden = [
29
+        'password',
30
+        'remember_token',
31
+    ];
32
+}

+ 51
- 0
sampleProject/artisan View File

@@ -0,0 +1,51 @@
1
+#!/usr/bin/env php
2
+<?php
3
+
4
+/*
5
+|--------------------------------------------------------------------------
6
+| Register The Auto Loader
7
+|--------------------------------------------------------------------------
8
+|
9
+| Composer provides a convenient, automatically generated class loader
10
+| for our application. We just need to utilize it! We'll require it
11
+| into the script here so that we do not have to worry about the
12
+| loading of any our classes "manually". Feels great to relax.
13
+|
14
+*/
15
+
16
+require __DIR__.'/bootstrap/autoload.php';
17
+
18
+$app = require_once __DIR__.'/bootstrap/app.php';
19
+
20
+/*
21
+|--------------------------------------------------------------------------
22
+| Run The Artisan Application
23
+|--------------------------------------------------------------------------
24
+|
25
+| When we run the console application, the current CLI command will be
26
+| executed in this console and the response sent back to a terminal
27
+| or another output device for the developers. Here goes nothing!
28
+|
29
+*/
30
+
31
+$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
32
+
33
+$status = $kernel->handle(
34
+    $input = new Symfony\Component\Console\Input\ArgvInput,
35
+    new Symfony\Component\Console\Output\ConsoleOutput
36
+);
37
+
38
+/*
39
+|--------------------------------------------------------------------------
40
+| Shutdown The Application
41
+|--------------------------------------------------------------------------
42
+|
43
+| Once Artisan has finished running. We will fire off the shutdown events
44
+| so that any final work may be done by the application before we shut
45
+| down the process. This is the last thing to happen to the request.
46
+|
47
+*/
48
+
49
+$kernel->terminate($input, $status);
50
+
51
+exit($status);

+ 63
- 0
sampleProject/bootstrap/app.php View File

@@ -0,0 +1,63 @@
1
+<?php
2
+
3
+/*
4
+|--------------------------------------------------------------------------
5
+| Create The Application
6
+|--------------------------------------------------------------------------
7
+|
8
+| The first thing we will do is create a new Laravel application instance
9
+| which serves as the "glue" for all the components of Laravel, and is
10
+| the IoC container for the system binding all of the various parts.
11
+|
12
+*/
13
+
14
+$app = new Illuminate\Foundation\Application(
15
+    realpath(__DIR__.'/../')
16
+);
17
+
18
+/*
19
+|--------------------------------------------------------------------------
20
+| Bind Important Interfaces
21
+|--------------------------------------------------------------------------
22
+|
23
+| Next, we need to bind some important interfaces into the container so
24
+| we will be able to resolve them when needed. The kernels serve the
25
+| incoming requests to this application from both the web and CLI.
26
+|
27
+*/
28
+
29
+$app->singleton(
30
+    Illuminate\Contracts\Http\Kernel::class,
31
+    App\Http\Kernel::class
32
+);
33
+
34
+$app->singleton(
35
+    Illuminate\Contracts\Console\Kernel::class,
36
+    App\Console\Kernel::class
37
+);
38
+
39
+$app->singleton(
40
+    Illuminate\Contracts\Debug\ExceptionHandler::class,
41
+    App\Exceptions\Handler::class
42
+);
43
+
44
+/*
45
+|--------------------------------------------------------------------------
46
+| Return The Application
47
+|--------------------------------------------------------------------------
48
+|
49
+| This script returns the application instance. The instance is given to
50
+| the calling script so we can separate the building of the instances
51
+| from the actual running of the application and sending responses.
52
+|
53
+*/
54
+
55
+// 環境偵測(需要事先在 php.ini 中做好相關設定,若線上環境不支援修改則直接套用預設的 .env)
56
+$ore = get_cfg_var('ogilvy.runtime.environment');
57
+$ore = !empty($ore) ? $ore : 'pro';
58
+if(!defined('APP_MODE')){
59
+    define('APP_MODE', $ore);
60
+}
61
+$app->loadEnvironmentFrom('.env.'.$ore);
62
+
63
+return $app;

+ 17
- 0
sampleProject/bootstrap/autoload.php View File

@@ -0,0 +1,17 @@
1
+<?php
2
+
3
+define('LARAVEL_START', microtime(true));
4
+
5
+/*
6
+|--------------------------------------------------------------------------
7
+| Register The Composer Auto Loader
8
+|--------------------------------------------------------------------------
9
+|
10
+| Composer provides a convenient, automatically generated class loader
11
+| for our application. We just need to utilize it! We'll require it
12
+| into the script here so that we do not have to worry about the
13
+| loading of any our classes "manually". Feels great to relax.
14
+|
15
+*/
16
+
17
+require __DIR__.'/../vendor/autoload.php';

+ 2
- 0
sampleProject/bootstrap/cache/.gitignore View File

@@ -0,0 +1,2 @@
1
+*
2
+!.gitignore

+ 58
- 0
sampleProject/composer.json View File

@@ -0,0 +1,58 @@
1
+{
2
+    "name": "laravel/laravel",
3
+    "description": "The Laravel Framework.",
4
+    "keywords": ["framework", "laravel"],
5
+    "license": "MIT",
6
+    "type": "project",
7
+    "require": {
8
+        "php": ">=5.6.4",
9
+        "aws/aws-sdk-php-laravel": "~3.0",
10
+        "intervention/image": "^2.3",
11
+        "laravel/framework": "5.5.*",
12
+        "laravel/tinker": "~1.0",
13
+        "league/flysystem-aws-s3-v3": "~1.0"
14
+    },
15
+    "require-dev": {
16
+        "fzaninotto/faker": "~1.4",
17
+        "mockery/mockery": "0.9.*",
18
+        "phpunit/phpunit": "~6.0",
19
+		"filp/whoops": "~2.0"
20
+    },
21
+    "autoload": {
22
+        "classmap": [
23
+            "database"
24
+        ],
25
+        "psr-4": {
26
+            "App\\": "app/"
27
+        }
28
+    },
29
+    "autoload-dev": {
30
+        "psr-4": {
31
+            "Tests\\": "tests/"
32
+        }
33
+    },
34
+    "scripts": {
35
+        "post-root-package-install": [
36
+            "php -r \"file_exists('.env') || copy('.env.example', '.env');\""
37
+        ],
38
+        "post-create-project-cmd": [
39
+            "php artisan key:generate"
40
+        ],
41
+        "post-install-cmd": [
42
+            "Illuminate\\Foundation\\ComposerScripts::postInstall",
43
+            "php artisan optimize"
44
+        ],
45
+        "post-update-cmd": [
46
+            "Illuminate\\Foundation\\ComposerScripts::postUpdate",
47
+            "php artisan optimize"
48
+        ],
49
+		"post-autoload-dump": [
50
+			"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
51
+			"@php artisan package:discover"
52
+		]
53
+    },
54
+    "config": {
55
+        "preferred-install": "dist",
56
+        "sort-packages": true
57
+    }
58
+}

+ 4328
- 0
sampleProject/composer.lock
File diff suppressed because it is too large
View File


+ 235
- 0
sampleProject/config/app.php View File

@@ -0,0 +1,235 @@
1
+<?php
2
+
3
+return [
4
+
5
+    /*
6
+    |--------------------------------------------------------------------------
7
+    | Application Name
8
+    |--------------------------------------------------------------------------
9
+    |
10
+    | This value is the name of your application. This value is used when the
11
+    | framework needs to place the application's name in a notification or
12
+    | any other location as required by the application or its packages.
13
+    */
14
+
15
+    'name' => 'Laravel',
16
+
17
+    /*
18
+    |--------------------------------------------------------------------------
19
+    | Application Environment
20
+    |--------------------------------------------------------------------------
21
+    |
22
+    | This value determines the "environment" your application is currently
23
+    | running in. This may determine how you prefer to configure various
24
+    | services your application utilizes. Set this in your ".env" file.
25
+    |
26
+    */
27
+
28
+    'env' => env('APP_ENV', 'production'),
29
+
30
+    /*
31
+    |--------------------------------------------------------------------------
32
+    | Application Debug Mode
33
+    |--------------------------------------------------------------------------
34
+    |
35
+    | When your application is in debug mode, detailed error messages with
36
+    | stack traces will be shown on every error that occurs within your
37
+    | application. If disabled, a simple generic error page is shown.
38
+    |
39
+    */
40
+
41
+    'debug' => env('APP_DEBUG', false),
42
+
43
+    /*
44
+    |--------------------------------------------------------------------------
45
+    | Application URL
46
+    |--------------------------------------------------------------------------
47
+    |
48
+    | This URL is used by the console to properly generate URLs when using
49
+    | the Artisan command line tool. You should set this to the root of
50
+    | your application so that it is used when running Artisan tasks.
51
+    |
52
+    */
53
+
54
+    'url' => env('APP_URL', 'http://localhost'),
55
+
56
+    /*
57
+    |--------------------------------------------------------------------------
58
+    | Application Timezone
59
+    |--------------------------------------------------------------------------
60
+    |
61
+    | Here you may specify the default timezone for your application, which
62
+    | will be used by the PHP date and date-time functions. We have gone
63
+    | ahead and set this to a sensible default for you out of the box.
64
+    |
65
+    */
66
+
67
+    'timezone' => 'UTC',
68
+
69
+    /*
70
+    |--------------------------------------------------------------------------
71
+    | Application Locale Configuration
72
+    |--------------------------------------------------------------------------
73
+    |
74
+    | The application locale determines the default locale that will be used
75
+    | by the translation service provider. You are free to set this value
76
+    | to any of the locales which will be supported by the application.
77
+    |
78
+    */
79
+
80
+    'locale' => 'en',
81
+
82
+    /*
83
+    |--------------------------------------------------------------------------
84
+    | Application Fallback Locale
85
+    |--------------------------------------------------------------------------
86
+    |
87
+    | The fallback locale determines the locale to use when the current one
88
+    | is not available. You may change the value to correspond to any of
89
+    | the language folders that are provided through your application.
90
+    |
91
+    */
92
+
93
+    'fallback_locale' => 'en',
94
+
95
+    /*
96
+    |--------------------------------------------------------------------------
97
+    | Encryption Key
98
+    |--------------------------------------------------------------------------
99
+    |
100
+    | This key is used by the Illuminate encrypter service and should be set
101
+    | to a random, 32 character string, otherwise these encrypted strings
102
+    | will not be safe. Please do this before deploying an application!
103
+    |
104
+    */
105
+
106
+    'key' => env('APP_KEY'),
107
+
108
+    'cipher' => 'AES-256-CBC',
109
+
110
+    /*
111
+    |--------------------------------------------------------------------------
112
+    | Logging Configuration
113
+    |--------------------------------------------------------------------------
114
+    |
115
+    | Here you may configure the log settings for your application. Out of
116
+    | the box, Laravel uses the Monolog PHP logging library. This gives
117
+    | you a variety of powerful log handlers / formatters to utilize.
118
+    |
119
+    | Available Settings: "single", "daily", "syslog", "errorlog"
120
+    |
121
+    */
122
+
123
+    'log' => env('APP_LOG', 'single'),
124
+
125
+    'log_level' => env('APP_LOG_LEVEL', 'debug'),
126
+
127
+    /*
128
+    |--------------------------------------------------------------------------
129
+    | Autoloaded Service Providers
130
+    |--------------------------------------------------------------------------
131
+    |
132
+    | The service providers listed here will be automatically loaded on the
133
+    | request to your application. Feel free to add your own services to
134
+    | this array to grant expanded functionality to your applications.
135
+    |
136
+    */
137
+
138
+    'providers' => [
139
+
140
+        /*
141
+         * Laravel Framework Service Providers...
142
+         */
143
+        Illuminate\Auth\AuthServiceProvider::class,
144
+        Illuminate\Broadcasting\BroadcastServiceProvider::class,
145
+        Illuminate\Bus\BusServiceProvider::class,
146
+        Illuminate\Cache\CacheServiceProvider::class,
147
+        Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
148
+        Illuminate\Cookie\CookieServiceProvider::class,
149
+        Illuminate\Database\DatabaseServiceProvider::class,
150
+        Illuminate\Encryption\EncryptionServiceProvider::class,
151
+        Illuminate\Filesystem\FilesystemServiceProvider::class,
152
+        Illuminate\Foundation\Providers\FoundationServiceProvider::class,
153
+        Illuminate\Hashing\HashServiceProvider::class,
154
+        Illuminate\Mail\MailServiceProvider::class,
155
+        Illuminate\Notifications\NotificationServiceProvider::class,
156
+        Illuminate\Pagination\PaginationServiceProvider::class,
157
+        Illuminate\Pipeline\PipelineServiceProvider::class,
158
+        Illuminate\Queue\QueueServiceProvider::class,
159
+        Illuminate\Redis\RedisServiceProvider::class,
160
+        Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
161
+        Illuminate\Session\SessionServiceProvider::class,
162
+        Illuminate\Translation\TranslationServiceProvider::class,
163
+        Illuminate\Validation\ValidationServiceProvider::class,
164
+        Illuminate\View\ViewServiceProvider::class,
165
+
166
+        /*
167
+         * Package Service Providers...
168
+         */
169
+        Laravel\Tinker\TinkerServiceProvider::class,
170
+
171
+        /*
172
+         * Application Service Providers...
173
+         */
174
+        App\Providers\AppServiceProvider::class,
175
+        App\Providers\AuthServiceProvider::class,
176
+        // App\Providers\BroadcastServiceProvider::class,
177
+        App\Providers\EventServiceProvider::class,
178
+        App\Providers\RouteServiceProvider::class,
179
+
180
+        App\Providers\ComposerServiceProvider::class,
181
+        Intervention\Image\ImageServiceProvider::class,
182
+
183
+    ],
184
+
185
+    /*
186
+    |--------------------------------------------------------------------------
187
+    | Class Aliases
188
+    |--------------------------------------------------------------------------
189
+    |
190
+    | This array of class aliases will be registered when this application
191
+    | is started. However, feel free to register as many as you wish as
192
+    | the aliases are "lazy" loaded so they don't hinder performance.
193
+    |
194
+    */
195
+
196
+    'aliases' => [
197
+
198
+        'App' => Illuminate\Support\Facades\App::class,
199
+        'Artisan' => Illuminate\Support\Facades\Artisan::class,
200
+        'Auth' => Illuminate\Support\Facades\Auth::class,
201
+        'Blade' => Illuminate\Support\Facades\Blade::class,
202
+        'Broadcast' => Illuminate\Support\Facades\Broadcast::class,
203
+        'Bus' => Illuminate\Support\Facades\Bus::class,
204
+        'Cache' => Illuminate\Support\Facades\Cache::class,
205
+        'Config' => Illuminate\Support\Facades\Config::class,
206
+        'Cookie' => Illuminate\Support\Facades\Cookie::class,
207
+        'Crypt' => Illuminate\Support\Facades\Crypt::class,
208
+        'DB' => Illuminate\Support\Facades\DB::class,
209
+        'Eloquent' => Illuminate\Database\Eloquent\Model::class,
210
+        'Event' => Illuminate\Support\Facades\Event::class,
211
+        'File' => Illuminate\Support\Facades\File::class,
212
+        'Gate' => Illuminate\Support\Facades\Gate::class,
213
+        'Hash' => Illuminate\Support\Facades\Hash::class,
214
+        'Lang' => Illuminate\Support\Facades\Lang::class,
215
+        'Log' => Illuminate\Support\Facades\Log::class,
216
+        'Mail' => Illuminate\Support\Facades\Mail::class,
217
+        'Notification' => Illuminate\Support\Facades\Notification::class,
218
+        'Password' => Illuminate\Support\Facades\Password::class,
219
+        'Queue' => Illuminate\Support\Facades\Queue::class,
220
+        'Redirect' => Illuminate\Support\Facades\Redirect::class,
221
+        'Redis' => Illuminate\Support\Facades\Redis::class,
222
+        'Request' => Illuminate\Support\Facades\Request::class,
223
+        'Response' => Illuminate\Support\Facades\Response::class,
224
+        'Route' => Illuminate\Support\Facades\Route::class,
225
+        'Schema' => Illuminate\Support\Facades\Schema::class,
226
+        'Session' => Illuminate\Support\Facades\Session::class,
227
+        'Storage' => Illuminate\Support\Facades\Storage::class,
228
+        'URL' => Illuminate\Support\Facades\URL::class,
229
+        'Validator' => Illuminate\Support\Facades\Validator::class,
230
+        'View' => Illuminate\Support\Facades\View::class,
231
+        'Image' => Intervention\Image\Facades\Image::class,
232
+
233
+    ],
234
+
235
+];

+ 102
- 0
sampleProject/config/auth.php View File

@@ -0,0 +1,102 @@
1
+<?php
2
+
3
+return [
4
+
5
+    /*
6
+    |--------------------------------------------------------------------------
7
+    | Authentication Defaults
8
+    |--------------------------------------------------------------------------
9
+    |
10
+    | This option controls the default authentication "guard" and password
11
+    | reset options for your application. You may change these defaults
12
+    | as required, but they're a perfect start for most applications.
13
+    |
14
+    */
15
+
16
+    'defaults' => [
17
+        'guard' => 'web',
18
+        'passwords' => 'users',
19
+    ],
20
+
21
+    /*
22
+    |--------------------------------------------------------------------------
23
+    | Authentication Guards
24
+    |--------------------------------------------------------------------------
25
+    |
26
+    | Next, you may define every authentication guard for your application.
27
+    | Of course, a great default configuration has been defined for you
28
+    | here which uses session storage and the Eloquent user provider.
29
+    |
30
+    | All authentication drivers have a user provider. This defines how the
31
+    | users are actually retrieved out of your database or other storage
32
+    | mechanisms used by this application to persist your user's data.
33
+    |
34
+    | Supported: "session", "token"
35
+    |
36
+    */
37
+
38
+    'guards' => [
39
+        'web' => [
40
+            'driver' => 'session',
41
+            'provider' => 'users',
42
+        ],
43
+
44
+        'api' => [
45
+            'driver' => 'token',
46
+            'provider' => 'users',
47
+        ],
48
+    ],
49
+
50
+    /*
51
+    |--------------------------------------------------------------------------
52
+    | User Providers
53
+    |--------------------------------------------------------------------------
54
+    |
55
+    | All authentication drivers have a user provider. This defines how the
56
+    | users are actually retrieved out of your database or other storage
57
+    | mechanisms used by this application to persist your user's data.
58
+    |
59
+    | If you have multiple user tables or models you may configure multiple
60
+    | sources which represent each model / table. These sources may then
61
+    | be assigned to any extra authentication guards you have defined.
62
+    |
63
+    | Supported: "database", "eloquent"
64
+    |
65
+    */
66
+
67
+    'providers' => [
68
+        'users' => [
69
+            'driver' => 'eloquent',
70
+            'model' => App\User::class,
71
+        ],
72
+
73
+        // 'users' => [
74
+        //     'driver' => 'database',
75
+        //     'table' => 'users',
76
+        // ],
77
+    ],
78
+
79
+    /*
80
+    |--------------------------------------------------------------------------
81
+    | Resetting Passwords
82
+    |--------------------------------------------------------------------------
83
+    |
84
+    | You may specify multiple password reset configurations if you have more
85
+    | than one user table or model in the application and you want to have
86
+    | separate password reset settings based on the specific user types.
87
+    |
88
+    | The expire time is the number of minutes that the reset token should be
89
+    | considered valid. This security feature keeps tokens short-lived so
90
+    | they have less time to be guessed. You may change this as needed.
91
+    |
92
+    */
93
+
94
+    'passwords' => [
95
+        'users' => [
96
+            'provider' => 'users',
97
+            'table' => 'password_resets',
98
+            'expire' => 60,
99
+        ],
100
+    ],
101
+
102
+];

+ 58
- 0
sampleProject/config/broadcasting.php View File

@@ -0,0 +1,58 @@
1
+<?php
2
+
3
+return [
4
+
5
+    /*
6
+    |--------------------------------------------------------------------------
7
+    | Default Broadcaster
8
+    |--------------------------------------------------------------------------
9
+    |
10
+    | This option controls the default broadcaster that will be used by the
11
+    | framework when an event needs to be broadcast. You may set this to
12
+    | any of the connections defined in the "connections" array below.
13
+    |
14
+    | Supported: "pusher", "redis", "log", "null"
15
+    |
16
+    */
17
+
18
+    'default' => env('BROADCAST_DRIVER', 'null'),
19
+
20
+    /*
21
+    |--------------------------------------------------------------------------
22
+    | Broadcast Connections
23
+    |--------------------------------------------------------------------------
24
+    |
25
+    | Here you may define all of the broadcast connections that will be used
26
+    | to broadcast events to other systems or over websockets. Samples of
27
+    | each available type of connection are provided inside this array.
28
+    |
29
+    */
30
+
31
+    'connections' => [
32
+
33
+        'pusher' => [
34
+            'driver' => 'pusher',
35
+            'key' => env('PUSHER_APP_KEY'),
36
+            'secret' => env('PUSHER_APP_SECRET'),
37
+            'app_id' => env('PUSHER_APP_ID'),
38
+            'options' => [
39
+                //
40
+            ],
41
+        ],
42
+
43
+        'redis' => [
44
+            'driver' => 'redis',
45
+            'connection' => 'default',
46
+        ],
47
+
48
+        'log' => [
49
+            'driver' => 'log',
50
+        ],
51
+
52
+        'null' => [
53
+            'driver' => 'null',
54
+        ],
55
+
56
+    ],
57
+
58
+];

+ 91
- 0
sampleProject/config/cache.php View File

@@ -0,0 +1,91 @@
1
+<?php
2
+
3
+return [
4
+
5
+    /*
6
+    |--------------------------------------------------------------------------
7
+    | Default Cache Store
8
+    |--------------------------------------------------------------------------
9
+    |
10
+    | This option controls the default cache connection that gets used while
11
+    | using this caching library. This connection is used when another is
12
+    | not explicitly specified when executing a given caching function.
13
+    |
14
+    | Supported: "apc", "array", "database", "file", "memcached", "redis"
15
+    |
16
+    */
17
+
18
+    'default' => env('CACHE_DRIVER', 'file'),
19
+
20
+    /*
21
+    |--------------------------------------------------------------------------
22
+    | Cache Stores
23
+    |--------------------------------------------------------------------------
24
+    |
25
+    | Here you may define all of the cache "stores" for your application as
26
+    | well as their drivers. You may even define multiple stores for the
27
+    | same cache driver to group types of items stored in your caches.
28
+    |
29
+    */
30
+
31
+    'stores' => [
32
+
33
+        'apc' => [
34
+            'driver' => 'apc',
35
+        ],
36
+
37
+        'array' => [
38
+            'driver' => 'array',
39
+        ],
40
+
41
+        'database' => [
42
+            'driver' => 'database',
43
+            'table' => 'cache',
44
+            'connection' => null,
45
+        ],
46
+
47
+        'file' => [
48
+            'driver' => 'file',
49
+            'path' => storage_path('framework/cache/data'),
50
+        ],
51
+
52
+        'memcached' => [
53
+            'driver' => 'memcached',
54
+            'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),
55
+            'sasl' => [
56
+                env('MEMCACHED_USERNAME'),
57
+                env('MEMCACHED_PASSWORD'),
58
+            ],
59
+            'options' => [
60
+                // Memcached::OPT_CONNECT_TIMEOUT  => 2000,
61
+            ],
62
+            'servers' => [
63
+                [
64
+                    'host' => env('MEMCACHED_HOST', '127.0.0.1'),
65
+                    'port' => env('MEMCACHED_PORT', 11211),
66
+                    'weight' => 100,
67
+                ],
68
+            ],
69
+        ],
70
+
71
+        'redis' => [
72
+            'driver' => 'redis',
73
+            'connection' => 'default',
74
+        ],
75
+
76
+    ],
77
+
78
+    /*
79
+    |--------------------------------------------------------------------------
80
+    | Cache Key Prefix
81
+    |--------------------------------------------------------------------------
82
+    |
83
+    | When utilizing a RAM based store such as APC or Memcached, there might
84
+    | be other applications utilizing the same cache. So, we'll specify a
85
+    | value to get prefixed to all our keys so we can avoid collisions.
86
+    |
87
+    */
88
+
89
+    'prefix' => 'laravel',
90
+
91
+];

+ 108
- 0
sampleProject/config/database.php View File

@@ -0,0 +1,108 @@
1
+<?php
2
+
3
+return [
4
+
5
+    /*
6
+    |--------------------------------------------------------------------------
7
+    | Default Database Connection Name
8
+    |--------------------------------------------------------------------------
9
+    |
10
+    | Here you may specify which of the database connections below you wish
11
+    | to use as your default connection for all database work. Of course
12
+    | you may use many connections at once using the Database library.
13
+    |
14
+    */
15
+
16
+    'default' => env('DB_CONNECTION', 'mysql'),
17
+
18
+    /*
19
+    |--------------------------------------------------------------------------
20
+    | Database Connections
21
+    |--------------------------------------------------------------------------
22
+    |
23
+    | Here are each of the database connections setup for your application.
24
+    | Of course, examples of configuring each database platform that is
25
+    | supported by Laravel is shown below to make development simple.
26
+    |
27
+    |
28
+    | All database work in Laravel is done through the PHP PDO facilities
29
+    | so make sure you have the driver for your particular database of
30
+    | choice installed on your machine before you begin development.
31
+    |
32
+    */
33
+
34
+    'connections' => [
35
+
36
+        'sqlite' => [
37
+            'driver' => 'sqlite',
38
+            'database' => env('DB_DATABASE', database_path('database.sqlite')),
39
+            'prefix' => '',
40
+        ],
41
+
42
+        'mysql' => [
43
+            'driver' => 'mysql',
44
+            'host' => env('DB_HOST', '127.0.0.1'),
45
+            'port' => env('DB_PORT', '3306'),
46
+            'database' => env('DB_DATABASE', 'forge'),
47
+            'username' => env('DB_USERNAME', 'forge'),
48
+            'password' => env('DB_PASSWORD', ''),
49
+            'charset' => 'utf8mb4',
50
+            'collation' => 'utf8mb4_unicode_ci',
51
+            'prefix' => '',
52
+            'strict' => false, # 設置 false 避免後台選單的複合 SQL 造成 only_full_group_by 權限問題
53
+            'engine' => null,
54
+        ],
55
+
56
+        'pgsql' => [
57
+            'driver' => 'pgsql',
58
+            'host' => env('DB_HOST', '127.0.0.1'),
59
+            'port' => env('DB_PORT', '5432'),
60
+            'database' => env('DB_DATABASE', 'forge'),
61
+            'username' => env('DB_USERNAME', 'forge'),
62
+            'password' => env('DB_PASSWORD', ''),
63
+            'charset' => 'utf8',
64
+            'prefix' => '',
65
+            'schema' => 'public',
66
+            'sslmode' => 'prefer',
67
+        ],
68
+
69
+    ],
70
+
71
+    /*
72
+    |--------------------------------------------------------------------------
73
+    | Migration Repository Table
74
+    |--------------------------------------------------------------------------
75
+    |
76
+    | This table keeps track of all the migrations that have already run for
77
+    | your application. Using this information, we can determine which of
78
+    | the migrations on disk haven't actually been run in the database.
79
+    |
80
+    */
81
+
82
+    'migrations' => 'migrations',
83
+
84
+    /*
85
+    |--------------------------------------------------------------------------
86
+    | Redis Databases
87
+    |--------------------------------------------------------------------------
88
+    |
89
+    | Redis is an open source, fast, and advanced key-value store that also
90
+    | provides a richer set of commands than a typical key-value systems
91
+    | such as APC or Memcached. Laravel makes it easy to dig right in.
92
+    |
93
+    */
94
+
95
+    'redis' => [
96
+
97
+        'client' => 'predis',
98
+
99
+        'default' => [
100
+            'host' => env('REDIS_HOST', '127.0.0.1'),
101
+            'password' => env('REDIS_PASSWORD', null),
102
+            'port' => env('REDIS_PORT', 6379),
103
+            'database' => 0,
104
+        ],
105
+
106
+    ],
107
+
108
+];

+ 68
- 0
sampleProject/config/filesystems.php View File

@@ -0,0 +1,68 @@
1
+<?php
2
+
3
+return [
4
+
5
+    /*
6
+    |--------------------------------------------------------------------------
7
+    | Default Filesystem Disk
8
+    |--------------------------------------------------------------------------
9
+    |
10
+    | Here you may specify the default filesystem disk that should be used
11
+    | by the framework. The "local" disk, as well as a variety of cloud
12
+    | based disks are available to your application. Just store away!
13
+    |
14
+    */
15
+
16
+    'default' => 'local',
17
+
18
+    /*
19
+    |--------------------------------------------------------------------------
20
+    | Default Cloud Filesystem Disk
21
+    |--------------------------------------------------------------------------
22
+    |
23
+    | Many applications store files both locally and in the cloud. For this
24
+    | reason, you may specify a default "cloud" driver here. This driver
25
+    | will be bound as the Cloud disk implementation in the container.
26
+    |
27
+    */
28
+
29
+    'cloud' => 's3',
30
+
31
+    /*
32
+    |--------------------------------------------------------------------------
33
+    | Filesystem Disks
34
+    |--------------------------------------------------------------------------
35
+    |
36
+    | Here you may configure as many filesystem "disks" as you wish, and you
37
+    | may even configure multiple disks of the same driver. Defaults have
38
+    | been setup for each driver as an example of the required options.
39
+    |
40
+    | Supported Drivers: "local", "ftp", "s3", "rackspace"
41
+    |
42
+    */
43
+
44
+    'disks' => [
45
+
46
+        'local' => [
47
+            'driver' => 'local',
48
+            'root' => storage_path('app'),
49
+        ],
50
+
51
+        'public' => [
52
+            'driver' => 'local',
53
+            'root' => storage_path('app/public'),
54
+            'url' => env('APP_URL').'/storage',
55
+            'visibility' => 'public',
56
+        ],
57
+
58
+        's3' => [
59
+            'driver' => 's3',
60
+            'key' => env('AWS_KEY'),
61
+            'secret' => env('AWS_SECRET'),
62
+            'region' => env('AWS_REGION'),
63
+            'bucket' => env('AWS_BUCKET'),
64
+        ],
65
+
66
+    ],
67
+
68
+];

+ 20
- 0
sampleProject/config/image.php View File

@@ -0,0 +1,20 @@
1
+<?php
2
+
3
+return array(
4
+
5
+    /*
6
+    |--------------------------------------------------------------------------
7
+    | Image Driver
8
+    |--------------------------------------------------------------------------
9
+    |
10
+    | Intervention Image supports "GD Library" and "Imagick" to process images
11
+    | internally. You may choose one of them according to your PHP
12
+    | configuration. By default PHP's "GD Library" implementation is used.
13
+    |
14
+    | Supported: "gd", "imagick"
15
+    |
16
+    */
17
+
18
+    'driver' => 'gd'
19
+
20
+);

+ 123
- 0
sampleProject/config/mail.php View File

@@ -0,0 +1,123 @@
1
+<?php
2
+
3
+return [
4
+
5
+    /*
6
+    |--------------------------------------------------------------------------
7
+    | Mail Driver
8
+    |--------------------------------------------------------------------------
9
+    |
10
+    | Laravel supports both SMTP and PHP's "mail" function as drivers for the
11
+    | sending of e-mail. You may specify which one you're using throughout
12
+    | your application here. By default, Laravel is setup for SMTP mail.
13
+    |
14
+    | Supported: "smtp", "sendmail", "mailgun", "mandrill", "ses",
15
+    |            "sparkpost", "log", "array"
16
+    |
17
+    */
18
+
19
+    'driver' => env('MAIL_DRIVER', 'smtp'),
20
+
21
+    /*
22
+    |--------------------------------------------------------------------------
23
+    | SMTP Host Address
24
+    |--------------------------------------------------------------------------
25
+    |
26
+    | Here you may provide the host address of the SMTP server used by your
27
+    | applications. A default option is provided that is compatible with
28
+    | the Mailgun mail service which will provide reliable deliveries.
29
+    |
30
+    */
31
+
32
+    'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
33
+
34
+    /*
35
+    |--------------------------------------------------------------------------
36
+    | SMTP Host Port
37
+    |--------------------------------------------------------------------------
38
+    |
39
+    | This is the SMTP port used by your application to deliver e-mails to
40
+    | users of the application. Like the host we have set this value to
41
+    | stay compatible with the Mailgun e-mail application by default.
42
+    |
43
+    */
44
+
45
+    'port' => env('MAIL_PORT', 587),
46
+
47
+    /*
48
+    |--------------------------------------------------------------------------
49
+    | Global "From" Address
50
+    |--------------------------------------------------------------------------
51
+    |
52
+    | You may wish for all e-mails sent by your application to be sent from
53
+    | the same address. Here, you may specify a name and address that is
54
+    | used globally for all e-mails that are sent by your application.
55
+    |
56
+    */
57
+
58
+    'from' => [
59
+        'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
60
+        'name' => env('MAIL_FROM_NAME', 'Example'),
61
+    ],
62
+
63
+    /*
64
+    |--------------------------------------------------------------------------
65
+    | E-Mail Encryption Protocol
66
+    |--------------------------------------------------------------------------
67
+    |
68
+    | Here you may specify the encryption protocol that should be used when
69
+    | the application send e-mail messages. A sensible default using the
70
+    | transport layer security protocol should provide great security.
71
+    |
72
+    */
73
+
74
+    'encryption' => env('MAIL_ENCRYPTION', 'tls'),
75
+
76
+    /*
77
+    |--------------------------------------------------------------------------
78
+    | SMTP Server Username
79
+    |--------------------------------------------------------------------------
80
+    |
81
+    | If your SMTP server requires a username for authentication, you should
82
+    | set it here. This will get used to authenticate with your server on
83
+    | connection. You may also set the "password" value below this one.
84
+    |
85
+    */
86
+
87
+    'username' => env('MAIL_USERNAME'),
88
+
89
+    'password' => env('MAIL_PASSWORD'),
90
+
91
+    /*
92
+    |--------------------------------------------------------------------------
93
+    | Sendmail System Path
94
+    |--------------------------------------------------------------------------
95
+    |
96
+    | When using the "sendmail" driver to send e-mails, we will need to know
97
+    | the path to where Sendmail lives on this server. A default path has
98
+    | been provided here, which will work well on most of your systems.
99
+    |
100
+    */
101
+
102
+    'sendmail' => '/usr/sbin/sendmail -bs',
103
+
104
+    /*
105
+    |--------------------------------------------------------------------------
106
+    | Markdown Mail Settings
107
+    |--------------------------------------------------------------------------
108
+    |
109
+    | If you are using Markdown based email rendering, you may configure your
110
+    | theme and component paths here, allowing you to customize the design
111
+    | of the emails. Or, you may simply stick with the Laravel defaults!
112
+    |
113
+    */
114
+
115
+    'markdown' => [
116
+        'theme' => 'default',
117
+
118
+        'paths' => [
119
+            resource_path('views/vendor/mail'),
120
+        ],
121
+    ],
122
+
123
+];

+ 85
- 0
sampleProject/config/queue.php View File

@@ -0,0 +1,85 @@
1
+<?php
2
+
3
+return [
4
+
5
+    /*
6
+    |--------------------------------------------------------------------------
7
+    | Default Queue Driver
8
+    |--------------------------------------------------------------------------
9
+    |
10
+    | Laravel's queue API supports an assortment of back-ends via a single
11
+    | API, giving you convenient access to each back-end using the same
12
+    | syntax for each one. Here you may set the default queue driver.
13
+    |
14
+    | Supported: "sync", "database", "beanstalkd", "sqs", "redis", "null"
15
+    |
16
+    */
17
+
18
+    'default' => env('QUEUE_DRIVER', 'sync'),
19
+
20
+    /*
21
+    |--------------------------------------------------------------------------
22
+    | Queue Connections
23
+    |--------------------------------------------------------------------------
24
+    |
25
+    | Here you may configure the connection information for each server that
26
+    | is used by your application. A default configuration has been added
27
+    | for each back-end shipped with Laravel. You are free to add more.
28
+    |
29
+    */
30
+
31
+    'connections' => [
32
+
33
+        'sync' => [
34
+            'driver' => 'sync',
35
+        ],
36
+
37
+        'database' => [
38
+            'driver' => 'database',
39
+            'table' => 'jobs',
40
+            'queue' => 'default',
41
+            'retry_after' => 90,
42
+        ],
43
+
44
+        'beanstalkd' => [
45
+            'driver' => 'beanstalkd',
46
+            'host' => 'localhost',
47
+            'queue' => 'default',
48
+            'retry_after' => 90,
49
+        ],
50
+
51
+        'sqs' => [
52
+            'driver' => 'sqs',
53
+            'key' => 'your-public-key',
54
+            'secret' => 'your-secret-key',
55
+            'prefix' => 'https://sqs.us-east-1.amazonaws.com/your-account-id',
56
+            'queue' => 'your-queue-name',
57
+            'region' => 'us-east-1',
58
+        ],
59
+
60
+        'redis' => [
61
+            'driver' => 'redis',
62
+            'connection' => 'default',
63
+            'queue' => 'default',
64
+            'retry_after' => 90,
65
+        ],
66
+
67
+    ],
68
+
69
+    /*
70
+    |--------------------------------------------------------------------------
71
+    | Failed Queue Jobs
72
+    |--------------------------------------------------------------------------
73
+    |
74
+    | These options configure the behavior of failed queue job logging so you
75
+    | can control which database and table are used to store the jobs that
76
+    | have failed. You may change them to any database / table you wish.
77
+    |
78
+    */
79
+
80
+    'failed' => [
81
+        'database' => env('DB_CONNECTION', 'mysql'),
82
+        'table' => 'failed_jobs',
83
+    ],
84
+
85
+];

+ 38
- 0
sampleProject/config/services.php View File

@@ -0,0 +1,38 @@
1
+<?php
2
+
3
+return [
4
+
5
+    /*
6
+    |--------------------------------------------------------------------------
7
+    | Third Party Services
8
+    |--------------------------------------------------------------------------
9
+    |
10
+    | This file is for storing the credentials for third party services such
11
+    | as Stripe, Mailgun, SparkPost and others. This file provides a sane
12
+    | default location for this type of information, allowing packages
13
+    | to have a conventional place to find your various credentials.
14
+    |
15
+    */
16
+
17
+    'mailgun' => [
18
+        'domain' => env('MAILGUN_DOMAIN'),
19
+        'secret' => env('MAILGUN_SECRET'),
20
+    ],
21
+
22
+    'ses' => [
23
+        'key' => env('SES_KEY'),
24
+        'secret' => env('SES_SECRET'),
25
+        'region' => 'us-east-1',
26
+    ],
27
+
28
+    'sparkpost' => [
29
+        'secret' => env('SPARKPOST_SECRET'),
30
+    ],
31
+
32
+    'stripe' => [
33
+        'model' => App\User::class,
34
+        'key' => env('STRIPE_KEY'),
35
+        'secret' => env('STRIPE_SECRET'),
36
+    ],
37
+
38
+];

+ 179
- 0
sampleProject/config/session.php View File

@@ -0,0 +1,179 @@
1
+<?php
2
+
3
+return [
4
+
5
+    /*
6
+    |--------------------------------------------------------------------------
7
+    | Default Session Driver
8
+    |--------------------------------------------------------------------------
9
+    |
10
+    | This option controls the default session "driver" that will be used on
11
+    | requests. By default, we will use the lightweight native driver but
12
+    | you may specify any of the other wonderful drivers provided here.
13
+    |
14
+    | Supported: "file", "cookie", "database", "apc",
15
+    |            "memcached", "redis", "array"
16
+    |
17
+    */
18
+
19
+    'driver' => env('SESSION_DRIVER', 'file'),
20
+
21
+    /*
22
+    |--------------------------------------------------------------------------
23
+    | Session Lifetime
24
+    |--------------------------------------------------------------------------
25
+    |
26
+    | Here you may specify the number of minutes that you wish the session
27
+    | to be allowed to remain idle before it expires. If you want them
28
+    | to immediately expire on the browser closing, set that option.
29
+    |
30
+    */
31
+
32
+    'lifetime' => 120,
33
+
34
+    'expire_on_close' => false,
35
+
36
+    /*
37
+    |--------------------------------------------------------------------------
38
+    | Session Encryption
39
+    |--------------------------------------------------------------------------
40
+    |
41
+    | This option allows you to easily specify that all of your session data
42
+    | should be encrypted before it is stored. All encryption will be run
43
+    | automatically by Laravel and you can use the Session like normal.
44
+    |
45
+    */
46
+
47
+    'encrypt' => false,
48
+
49
+    /*
50
+    |--------------------------------------------------------------------------
51
+    | Session File Location
52
+    |--------------------------------------------------------------------------
53
+    |
54
+    | When using the native session driver, we need a location where session
55
+    | files may be stored. A default has been set for you but a different
56
+    | location may be specified. This is only needed for file sessions.
57
+    |
58
+    */
59
+
60
+    'files' => storage_path('framework/sessions'),
61
+
62
+    /*
63
+    |--------------------------------------------------------------------------
64
+    | Session Database Connection
65
+    |--------------------------------------------------------------------------
66
+    |
67
+    | When using the "database" or "redis" session drivers, you may specify a
68
+    | connection that should be used to manage these sessions. This should
69
+    | correspond to a connection in your database configuration options.
70
+    |
71
+    */
72
+
73
+    'connection' => null,
74
+
75
+    /*
76
+    |--------------------------------------------------------------------------
77
+    | Session Database Table
78
+    |--------------------------------------------------------------------------
79
+    |
80
+    | When using the "database" session driver, you may specify the table we
81
+    | should use to manage the sessions. Of course, a sensible default is
82
+    | provided for you; however, you are free to change this as needed.
83
+    |
84
+    */
85
+
86
+    'table' => 'sessions',
87
+
88
+    /*
89
+    |--------------------------------------------------------------------------
90
+    | Session Cache Store
91
+    |--------------------------------------------------------------------------
92
+    |
93
+    | When using the "apc" or "memcached" session drivers, you may specify a
94
+    | cache store that should be used for these sessions. This value must
95
+    | correspond with one of the application's configured cache stores.
96
+    |
97
+    */
98
+
99
+    'store' => null,
100
+
101
+    /*
102
+    |--------------------------------------------------------------------------
103
+    | Session Sweeping Lottery
104
+    |--------------------------------------------------------------------------
105
+    |
106
+    | Some session drivers must manually sweep their storage location to get
107
+    | rid of old sessions from storage. Here are the chances that it will
108
+    | happen on a given request. By default, the odds are 2 out of 100.
109
+    |
110
+    */
111
+
112
+    'lottery' => [2, 100],
113
+
114
+    /*
115
+    |--------------------------------------------------------------------------
116
+    | Session Cookie Name
117
+    |--------------------------------------------------------------------------
118
+    |
119
+    | Here you may change the name of the cookie used to identify a session
120
+    | instance by ID. The name specified here will get used every time a
121
+    | new session cookie is created by the framework for every driver.
122
+    |
123
+    */
124
+
125
+    'cookie' => 'laravel_session',
126
+
127
+    /*
128
+    |--------------------------------------------------------------------------
129
+    | Session Cookie Path
130
+    |--------------------------------------------------------------------------
131
+    |
132
+    | The session cookie path determines the path for which the cookie will
133
+    | be regarded as available. Typically, this will be the root path of
134
+    | your application but you are free to change this when necessary.
135
+    |
136
+    */
137
+
138
+    'path' => '/',
139
+
140
+    /*
141
+    |--------------------------------------------------------------------------
142
+    | Session Cookie Domain
143
+    |--------------------------------------------------------------------------
144
+    |
145
+    | Here you may change the domain of the cookie used to identify a session
146
+    | in your application. This will determine which domains the cookie is
147
+    | available to in your application. A sensible default has been set.
148
+    |
149
+    */
150
+
151
+    'domain' => env('SESSION_DOMAIN', null),
152
+
153
+    /*
154
+    |--------------------------------------------------------------------------
155
+    | HTTPS Only Cookies
156
+    |--------------------------------------------------------------------------
157
+    |
158
+    | By setting this option to true, session cookies will only be sent back
159
+    | to the server if the browser has a HTTPS connection. This will keep
160
+    | the cookie from being sent to you if it can not be done securely.
161
+    |
162
+    */
163
+
164
+    'secure' => env('SESSION_SECURE_COOKIE', false),
165
+
166
+    /*
167
+    |--------------------------------------------------------------------------
168
+    | HTTP Access Only
169
+    |--------------------------------------------------------------------------
170
+    |
171
+    | Setting this value to true will prevent JavaScript from accessing the
172
+    | value of the cookie and the cookie will only be accessible through
173
+    | the HTTP protocol. You are free to modify this option if needed.
174
+    |
175
+    */
176
+
177
+    'http_only' => true,
178
+
179
+];

+ 33
- 0
sampleProject/config/view.php View File

@@ -0,0 +1,33 @@
1
+<?php
2
+
3
+return [
4
+
5
+    /*
6
+    |--------------------------------------------------------------------------
7
+    | View Storage Paths
8
+    |--------------------------------------------------------------------------
9
+    |
10
+    | Most templating systems load templates from disk. Here you may specify
11
+    | an array of paths that should be checked for your views. Of course
12
+    | the usual Laravel view path has already been registered for you.
13
+    |
14
+    */
15
+
16
+    'paths' => [
17
+        resource_path('views'),
18
+    ],
19
+
20
+    /*
21
+    |--------------------------------------------------------------------------
22
+    | Compiled View Path
23
+    |--------------------------------------------------------------------------
24
+    |
25
+    | This option determines where all the compiled Blade templates will be
26
+    | stored for your application. Typically, this is within the storage
27
+    | directory. However, as usual, you are free to change this value.
28
+    |
29
+    */
30
+
31
+    'compiled' => realpath(storage_path('framework/views')),
32
+
33
+];

+ 1
- 0
sampleProject/database/.gitignore View File

@@ -0,0 +1 @@
1
+*.sqlite

+ 24
- 0
sampleProject/database/factories/ModelFactory.php View File

@@ -0,0 +1,24 @@
1
+<?php
2
+
3
+/*
4
+|--------------------------------------------------------------------------
5
+| Model Factories
6
+|--------------------------------------------------------------------------
7
+|
8
+| Here you may define all of your model factories. Model factories give
9
+| you a convenient way to create models for testing and seeding your
10
+| database. Just tell the factory how a default model should look.
11
+|
12
+*/
13
+
14
+/** @var \Illuminate\Database\Eloquent\Factory $factory */
15
+$factory->define(App\User::class, function (Faker\Generator $faker) {
16
+    static $password;
17
+
18
+    return [
19
+        'name' => $faker->name,
20
+        'email' => $faker->unique()->safeEmail,
21
+        'password' => $password ?: $password = bcrypt('secret'),
22
+        'remember_token' => str_random(10),
23
+    ];
24
+});

+ 35
- 0
sampleProject/database/migrations/2014_10_12_000000_create_users_table.php View File

@@ -0,0 +1,35 @@
1
+<?php
2
+
3
+use Illuminate\Support\Facades\Schema;
4
+use Illuminate\Database\Schema\Blueprint;
5
+use Illuminate\Database\Migrations\Migration;
6
+
7
+class CreateUsersTable extends Migration
8
+{
9
+    /**
10
+     * Run the migrations.
11
+     *
12
+     * @return void
13
+     */
14
+    public function up()
15
+    {
16
+        Schema::create('users', function (Blueprint $table) {
17
+            $table->increments('id');
18
+            $table->string('name');
19
+            $table->string('email')->unique();
20
+            $table->string('password');
21
+            $table->rememberToken();
22
+            $table->timestamps();
23
+        });
24
+    }
25
+
26
+    /**
27
+     * Reverse the migrations.
28
+     *
29
+     * @return void
30
+     */
31
+    public function down()
32
+    {
33
+        Schema::dropIfExists('users');
34
+    }
35
+}

+ 32
- 0
sampleProject/database/migrations/2014_10_12_100000_create_password_resets_table.php View File

@@ -0,0 +1,32 @@
1
+<?php
2
+
3
+use Illuminate\Support\Facades\Schema;
4
+use Illuminate\Database\Schema\Blueprint;
5
+use Illuminate\Database\Migrations\Migration;
6
+
7
+class CreatePasswordResetsTable extends Migration
8
+{
9
+    /**
10
+     * Run the migrations.
11
+     *
12
+     * @return void
13
+     */
14
+    public function up()
15
+    {
16
+        Schema::create('password_resets', function (Blueprint $table) {
17
+            $table->string('email')->index();
18
+            $table->string('token')->index();
19
+            $table->timestamp('created_at')->nullable();
20
+        });
21
+    }
22
+
23
+    /**
24
+     * Reverse the migrations.
25
+     *
26
+     * @return void
27
+     */
28
+    public function down()
29
+    {
30
+        Schema::dropIfExists('password_resets');
31
+    }
32
+}

+ 35
- 0
sampleProject/database/migrations/2016_02_23_075631_create_functions_table.php View File

@@ -0,0 +1,35 @@
1
+<?php
2
+
3
+use Illuminate\Database\Schema\Blueprint;
4
+use Illuminate\Database\Migrations\Migration;
5
+
6
+class CreateFunctionsTable extends Migration
7
+{
8
+    /**
9
+     * Run the migrations.
10
+     *
11
+     * @return void
12
+     */
13
+    public function up()
14
+    {
15
+        Schema::create('functions', function (Blueprint $table) {
16
+            $table->increments('id');
17
+            $table->string('FunName');
18
+            $table->string('FunLink');
19
+            $table->string('FunDesc');
20
+            $table->integer('Valid');
21
+            $table->timestamps();
22
+            $table->integer('Oid');
23
+        });
24
+    }
25
+
26
+    /**
27
+     * Reverse the migrations.
28
+     *
29
+     * @return void
30
+     */
31
+    public function down()
32
+    {
33
+        Schema::drop('functions');
34
+    }
35
+}

+ 34
- 0
sampleProject/database/migrations/2016_02_23_080148_create_funmenu_table.php View File

@@ -0,0 +1,34 @@
1
+<?php
2
+
3
+use Illuminate\Database\Schema\Blueprint;
4
+use Illuminate\Database\Migrations\Migration;
5
+
6
+class CreateFunmenuTable extends Migration
7
+{
8
+    /**
9
+     * Run the migrations.
10
+     *
11
+     * @return void
12
+     */
13
+    public function up()
14
+    {
15
+        Schema::create('funmenu', function (Blueprint $table) {
16
+            $table->increments('id');
17
+            $table->string('MenuName');
18
+            $table->integer('Valid');
19
+            $table->integer('Corder');
20
+            $table->timestamps();
21
+            $table->integer('Oid');
22
+        });
23
+    }
24
+
25
+    /**
26
+     * Reverse the migrations.
27
+     *
28
+     * @return void
29
+     */
30
+    public function down()
31
+    {
32
+        Schema::drop('funmenu');
33
+    }
34
+}

+ 35
- 0
sampleProject/database/migrations/2016_02_23_080344_create_funmenudetail_table.php View File

@@ -0,0 +1,35 @@
1
+<?php
2
+
3
+use Illuminate\Database\Schema\Blueprint;
4
+use Illuminate\Database\Migrations\Migration;
5
+
6
+class CreateFunmenudetailTable extends Migration
7
+{
8
+    /**
9
+     * Run the migrations.
10
+     *
11
+     * @return void
12
+     */
13
+    public function up()
14
+    {
15
+        Schema::create('funmenudetail', function (Blueprint $table) {
16
+            $table->increments('id');
17
+            $table->integer('FunMenuId');
18
+            $table->integer('FunId');
19
+            $table->integer('Valid');
20
+            $table->integer('Corder');
21
+            $table->timestamps();
22
+            $table->integer('Oid');
23
+        });
24
+    }
25
+
26
+    /**
27
+     * Reverse the migrations.
28
+     *
29
+     * @return void
30
+     */
31
+    public function down()
32
+    {
33
+        Schema::drop('funmenudetail');
34
+    }
35
+}

+ 35
- 0
sampleProject/database/migrations/2016_02_23_080520_create_funusergroups_table.php View File

@@ -0,0 +1,35 @@
1
+<?php
2
+
3
+use Illuminate\Database\Schema\Blueprint;
4
+use Illuminate\Database\Migrations\Migration;
5
+
6
+class CreateFunusergroupsTable extends Migration
7
+{
8
+    /**
9
+     * Run the migrations.
10
+     *
11
+     * @return void
12
+     */
13
+    public function up()
14
+    {
15
+        Schema::create('funusergroups', function (Blueprint $table) {
16
+            $table->increments('id');
17
+            $table->string('Name');
18
+            $table->string('FunList');
19
+            $table->string('UsrList');
20
+            $table->integer('Valid');
21
+            $table->timestamps();
22
+            $table->integer('Oid');
23
+        });
24
+    }
25
+
26
+    /**
27
+     * Reverse the migrations.
28
+     *
29
+     * @return void
30
+     */
31
+    public function down()
32
+    {
33
+        Schema::drop('funusergroups');
34
+    }
35
+}

+ 16
- 0
sampleProject/database/seeds/DatabaseSeeder.php View File

@@ -0,0 +1,16 @@
1
+<?php
2
+
3
+use Illuminate\Database\Seeder;
4
+
5
+class DatabaseSeeder extends Seeder
6
+{
7
+    /**
8
+     * Run the database seeds.
9
+     *
10
+     * @return void
11
+     */
12
+    public function run()
13
+    {
14
+        // $this->call(UsersTableSeeder::class);
15
+    }
16
+}

+ 19
- 0
sampleProject/package.json View File

@@ -0,0 +1,19 @@
1
+{
2
+  "private": true,
3
+  "scripts": {
4
+    "dev": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
5
+    "watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
6
+    "watch-poll": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --watch-poll --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
7
+    "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
8
+    "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
9
+  },
10
+  "devDependencies": {
11
+    "axios": "^0.15.3",
12
+    "bootstrap-sass": "^3.3.7",
13
+    "cross-env": "^3.2.3",
14
+    "jquery": "^3.1.1",
15
+    "laravel-mix": "^0.8.3",
16
+    "lodash": "^4.17.4",
17
+    "vue": "^2.1.10"
18
+  }
19
+}

+ 31
- 0
sampleProject/phpunit.xml View File

@@ -0,0 +1,31 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<phpunit backupGlobals="false"
3
+         backupStaticAttributes="false"
4
+         bootstrap="bootstrap/autoload.php"
5
+         colors="true"
6
+         convertErrorsToExceptions="true"
7
+         convertNoticesToExceptions="true"
8
+         convertWarningsToExceptions="true"
9
+         processIsolation="false"
10
+         stopOnFailure="false">
11
+    <testsuites>
12
+        <testsuite name="Feature Tests">
13
+            <directory suffix="Test.php">./tests/Feature</directory>
14
+        </testsuite>
15
+
16
+        <testsuite name="Unit Tests">
17
+            <directory suffix="Test.php">./tests/Unit</directory>
18
+        </testsuite>
19
+    </testsuites>
20
+    <filter>
21
+        <whitelist processUncoveredFilesFromWhitelist="true">
22
+            <directory suffix=".php">./app</directory>
23
+        </whitelist>
24
+    </filter>
25
+    <php>
26
+        <env name="APP_ENV" value="testing"/>
27
+        <env name="CACHE_DRIVER" value="array"/>
28
+        <env name="SESSION_DRIVER" value="array"/>
29
+        <env name="QUEUE_DRIVER" value="sync"/>
30
+    </php>
31
+</phpunit>

+ 20
- 0
sampleProject/public/.htaccess View File

@@ -0,0 +1,20 @@
1
+<IfModule mod_rewrite.c>
2
+    <IfModule mod_negotiation.c>
3
+        Options -MultiViews
4
+    </IfModule>
5
+
6
+    RewriteEngine On
7
+
8
+    # Redirect Trailing Slashes If Not A Folder...
9
+    RewriteCond %{REQUEST_FILENAME} !-d
10
+    RewriteRule ^(.*)/$ /$1 [L,R=301]
11
+
12
+    # Handle Front Controller...
13
+    RewriteCond %{REQUEST_FILENAME} !-d
14
+    RewriteCond %{REQUEST_FILENAME} !-f
15
+    RewriteRule ^ index.php [L]
16
+
17
+    # Handle Authorization Header
18
+    RewriteCond %{HTTP:Authorization} .
19
+    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
20
+</IfModule>

+ 394
- 0
sampleProject/public/assets/css/animate.delay.css View File

@@ -0,0 +1,394 @@
1
+.animate0 {
2
+   	-webkit-animation-duration: .8s;
3
+	-webkit-animation-delay: 0s;
4
+	-webkit-animation-timing-function: ease;
5
+	-webkit-animation-fill-mode: both;
6
+	-moz-animation-duration: .8s;
7
+	-moz-animation-delay: 0s;
8
+	-moz-animation-timing-function: ease;
9
+	-moz-animation-fill-mode: both;
10
+	-ms-animation-duration: .8s;
11
+	-ms-animation-delay: 0s;
12
+	-ms-animation-timing-function: ease;
13
+	-ms-animation-fill-mode: both;
14
+	animation-duration: .8s;
15
+	animation-delay: 0s;
16
+	animation-timing-function: ease;
17
+	animation-fill-mode: both;	          
18
+}         
19
+
20
+.animate1{
21
+   	-webkit-animation-duration: .8s;
22
+	-webkit-animation-delay: .2s;
23
+	-webkit-animation-timing-function: ease;
24
+	-webkit-animation-fill-mode: both;
25
+	-moz-animation-duration: .8s;
26
+	-moz-animation-delay: .2s;
27
+	-moz-animation-timing-function: ease;
28
+	-moz-animation-fill-mode: both;
29
+	-ms-animation-duration: .8s;
30
+	-ms-animation-delay: .2s;
31
+	-ms-animation-timing-function: ease;
32
+	-ms-animation-fill-mode: both;
33
+	animation-duration: .8s;
34
+	animation-delay: .2s;
35
+	animation-timing-function: ease;
36
+	animation-fill-mode: both;	          
37
+} 
38
+
39
+.animate2{
40
+   	-webkit-animation-duration: .8s;
41
+	-webkit-animation-delay: .4s;
42
+	-webkit-animation-timing-function: ease;
43
+	-webkit-animation-fill-mode: both;
44
+	-moz-animation-duration: .8s;
45
+	-moz-animation-delay: .4s;
46
+	-moz-animation-timing-function: ease;
47
+	-moz-animation-fill-mode: both;
48
+	-ms-animation-duration: .8s;
49
+	-ms-animation-delay: .4s;
50
+	-ms-animation-timing-function: ease;
51
+	-ms-animation-fill-mode: both;
52
+	animation-duration: .8s;
53
+	animation-delay: .4s;
54
+	animation-timing-function: ease;
55
+	animation-fill-mode: both;	          
56
+} 
57
+
58
+.animate3{
59
+   	-webkit-animation-duration: .8s;
60
+	-webkit-animation-delay: .6s;
61
+	-webkit-animation-timing-function: ease;
62
+	-webkit-animation-fill-mode: both;
63
+	-moz-animation-duration: .8s;
64
+	-moz-animation-delay: .6s;
65
+	-moz-animation-timing-function: ease;
66
+	-moz-animation-fill-mode: both;
67
+	-ms-animation-duration: .8s;
68
+	-ms-animation-delay: .6s;
69
+	-ms-animation-timing-function: ease;
70
+	-ms-animation-fill-mode: both;
71
+	animation-duration: .8s;
72
+	animation-delay: .6s;
73
+	animation-timing-function: ease;
74
+	animation-fill-mode: both;	          
75
+}   
76
+
77
+.animate4{
78
+   	-webkit-animation-duration: .8s;
79
+	-webkit-animation-delay: .8s;
80
+	-webkit-animation-timing-function: ease;
81
+	-webkit-animation-fill-mode: both;
82
+	-moz-animation-duration: .8s;
83
+	-moz-animation-delay: .8s;
84
+	-moz-animation-timing-function: ease;
85
+	-moz-animation-fill-mode: both;
86
+	-ms-animation-duration: .8s;
87
+	-ms-animation-delay: .8s;
88
+	-ms-animation-timing-function: ease;
89
+	-ms-animation-fill-mode: both;
90
+	animation-duration: .8s;
91
+	animation-delay: .8s;
92
+	animation-timing-function: ease;
93
+	animation-fill-mode: both;	          
94
+}  
95
+
96
+.animate5{
97
+   	-webkit-animation-duration: .8s;
98
+	-webkit-animation-delay: 1s;
99
+	-webkit-animation-timing-function: ease;
100
+	-webkit-animation-fill-mode: both;
101
+	-moz-animation-duration: .8s;
102
+	-moz-animation-delay: 1s;
103
+	-moz-animation-timing-function: ease;
104
+	-moz-animation-fill-mode: both;
105
+	-ms-animation-duration: .8s;
106
+	-ms-animation-delay: 1s;
107
+	-ms-animation-timing-function: ease;
108
+	-ms-animation-fill-mode: both;
109
+	animation-duration: .8s;
110
+	animation-delay: 1s;
111
+	animation-timing-function: ease;
112
+	animation-fill-mode: both;	          
113
+}    
114
+.animate6{
115
+   	-webkit-animation-duration: .8s;
116
+	-webkit-animation-delay: 1.2s;
117
+	-webkit-animation-timing-function: ease;
118
+	-webkit-animation-fill-mode: both;
119
+	-moz-animation-duration: .8s;
120
+	-moz-animation-delay: 1.2s;
121
+	-moz-animation-timing-function: ease;
122
+	-moz-animation-fill-mode: both;
123
+	-ms-animation-duration: .8s;
124
+	-ms-animation-delay: 1.2s;
125
+	-ms-animation-timing-function: ease;
126
+	-ms-animation-fill-mode: both;
127
+	animation-duration: .8s;
128
+	animation-delay: 1.2s;
129
+	animation-timing-function: ease;
130
+	animation-fill-mode: both;	          
131
+}    
132
+.animate7{
133
+   	-webkit-animation-duration: .8s;
134
+	-webkit-animation-delay: 1.4s;
135
+	-webkit-animation-timing-function: ease;
136
+	-webkit-animation-fill-mode: both;
137
+	-moz-animation-duration: .8s;
138
+	-moz-animation-delay: 1.4s;
139
+	-moz-animation-timing-function: ease;
140
+	-moz-animation-fill-mode: both;
141
+	-ms-animation-duration: .8s;
142
+	-ms-animation-delay: 1.4s;
143
+	-ms-animation-timing-function: ease;
144
+	-ms-animation-fill-mode: both;
145
+	animation-duration: .8s;
146
+	animation-delay: 1.4s;
147
+	animation-timing-function: ease;
148
+	animation-fill-mode: both;	          
149
+}
150
+
151
+.animate8{
152
+   	-webkit-animation-duration: .8s;
153
+	-webkit-animation-delay: 1.8s;
154
+	-webkit-animation-timing-function: ease;
155
+	-webkit-animation-fill-mode: both;
156
+	-moz-animation-duration: .8s;
157
+	-moz-animation-delay: 1.8s;
158
+	-moz-animation-timing-function: ease;
159
+	-moz-animation-fill-mode: both;
160
+	-ms-animation-duration: .8s;
161
+	-ms-animation-delay: 1.8s;
162
+	-ms-animation-timing-function: ease;
163
+	-ms-animation-fill-mode: both;
164
+	animation-duration: .8s;
165
+	animation-delay: 1.8s;
166
+	animation-timing-function: ease;
167
+	animation-fill-mode: both;	          
168
+}
169
+
170
+.animate9{
171
+   	-webkit-animation-duration: .8s;
172
+	-webkit-animation-delay: 1.8s;
173
+	-webkit-animation-timing-function: ease;
174
+	-webkit-animation-fill-mode: both;
175
+	-moz-animation-duration: .8s;
176
+	-moz-animation-delay: 1.8s;
177
+	-moz-animation-timing-function: ease;
178
+	-moz-animation-fill-mode: both;
179
+	-ms-animation-duration: .8s;
180
+	-ms-animation-delay: 1.8s;
181
+	-ms-animation-timing-function: ease;
182
+	-ms-animation-fill-mode: both;
183
+	animation-duration: .8s;
184
+	animation-delay: 1.8s;
185
+	animation-timing-function: ease;
186
+	animation-fill-mode: both;	          
187
+}
188
+
189
+.animate10{
190
+   	-webkit-animation-duration: .8s;
191
+	-webkit-animation-delay: 2.0s;
192
+	-webkit-animation-timing-function: ease;
193
+	-webkit-animation-fill-mode: both;
194
+	-moz-animation-duration: .8s;
195
+	-moz-animation-delay: 2.0s;
196
+	-moz-animation-timing-function: ease;
197
+	-moz-animation-fill-mode: both;
198
+	-ms-animation-duration: .8s;
199
+	-ms-animation-delay: 2.0s;
200
+	-ms-animation-timing-function: ease;
201
+	-ms-animation-fill-mode: both;
202
+	animation-duration: .8s;
203
+	animation-delay: 2.0s;
204
+	animation-timing-function: ease;
205
+	animation-fill-mode: both;	          
206
+}   
207
+
208
+.animate11{
209
+   	-webkit-animation-duration: .8s;
210
+	-webkit-animation-delay: 2.2s;
211
+	-webkit-animation-timing-function: ease;
212
+	-webkit-animation-fill-mode: both;
213
+	-moz-animation-duration: .8s;
214
+	-moz-animation-delay: 2.2s;
215
+	-moz-animation-timing-function: ease;
216
+	-moz-animation-fill-mode: both;
217
+	-ms-animation-duration: .8s;
218
+	-ms-animation-delay: 2.2s;
219
+	-ms-animation-timing-function: ease;
220
+	-ms-animation-fill-mode: both;
221
+	animation-duration: .8s;
222
+	animation-delay: 2.2s;
223
+	animation-timing-function: ease;
224
+	animation-fill-mode: both;	          
225
+}
226
+
227
+.animate12{
228
+   	-webkit-animation-duration: .8s;
229
+	-webkit-animation-delay: 2.4s;
230
+	-webkit-animation-timing-function: ease;
231
+	-webkit-animation-fill-mode: both;
232
+	-moz-animation-duration: .8s;
233
+	-moz-animation-delay: 2.4s;
234
+	-moz-animation-timing-function: ease;
235
+	-moz-animation-fill-mode: both;
236
+	-ms-animation-duration: .8s;
237
+	-ms-animation-delay: 2.4s;
238
+	-ms-animation-timing-function: ease;
239
+	-ms-animation-fill-mode: both;
240
+	animation-duration: .8s;
241
+	animation-delay: 2.4s;
242
+	animation-timing-function: ease;
243
+	animation-fill-mode: both;	          
244
+} 
245
+
246
+.animate13{
247
+   	-webkit-animation-duration: .8s;
248
+	-webkit-animation-delay: 2.8s;
249
+	-webkit-animation-timing-function: ease;
250
+	-webkit-animation-fill-mode: both;
251
+	-moz-animation-duration: .8s;
252
+	-moz-animation-delay: 2.8s;
253
+	-moz-animation-timing-function: ease;
254
+	-moz-animation-fill-mode: both;
255
+	-ms-animation-duration: .8s;
256
+	-ms-animation-delay: 2.8s;
257
+	-ms-animation-timing-function: ease;
258
+	-ms-animation-fill-mode: both;
259
+	animation-duration: .8s;
260
+	animation-delay: 2.8s;
261
+	animation-timing-function: ease;
262
+	animation-fill-mode: both;	          
263
+}
264
+
265
+.animate14{
266
+   	-webkit-animation-duration: .8s;
267
+	-webkit-animation-delay: 2.8s;
268
+	-webkit-animation-timing-function: ease;
269
+	-webkit-animation-fill-mode: both;
270
+	-moz-animation-duration: .8s;
271
+	-moz-animation-delay: 2.8s;
272
+	-moz-animation-timing-function: ease;
273
+	-moz-animation-fill-mode: both;
274
+	-ms-animation-duration: .8s;
275
+	-ms-animation-delay: 2.8s;
276
+	-ms-animation-timing-function: ease;
277
+	-ms-animation-fill-mode: both;
278
+	animation-duration: .8s;
279
+	animation-delay: 2.8s;
280
+	animation-timing-function: ease;
281
+	animation-fill-mode: both;	          
282
+}  
283
+
284
+.animate15{
285
+   	-webkit-animation-duration: .8s;
286
+	-webkit-animation-delay: 3.0s;
287
+	-webkit-animation-timing-function: ease;
288
+	-webkit-animation-fill-mode: both;
289
+	-moz-animation-duration: .8s;
290
+	-moz-animation-delay: 3.0s;
291
+	-moz-animation-timing-function: ease;
292
+	-moz-animation-fill-mode: both;
293
+	-ms-animation-duration: .8s;
294
+	-ms-animation-delay: 3.0s;
295
+	-ms-animation-timing-function: ease;
296
+	-ms-animation-fill-mode: both;
297
+	animation-duration: .8s;
298
+	animation-delay: 3.0s;
299
+	animation-timing-function: ease;
300
+	animation-fill-mode: both;	          
301
+}
302
+
303
+.animate16{
304
+   	-webkit-animation-duration: .8s;
305
+	-webkit-animation-delay: 3.2s;
306
+	-webkit-animation-timing-function: ease;
307
+	-webkit-animation-fill-mode: both;
308
+	-moz-animation-duration: .8s;
309
+	-moz-animation-delay: 3.2s;
310
+	-moz-animation-timing-function: ease;
311
+	-moz-animation-fill-mode: both;
312
+	-ms-animation-duration: .8s;
313
+	-ms-animation-delay: 3.2s;
314
+	-ms-animation-timing-function: ease;
315
+	-ms-animation-fill-mode: both;
316
+	animation-duration: .8s;
317
+	animation-delay: 3.2s;
318
+	animation-timing-function: ease;
319
+	animation-fill-mode: both;	          
320
+}
321
+
322
+.animate17{
323
+   	-webkit-animation-duration: .8s;
324
+	-webkit-animation-delay: 3.4s;
325
+	-webkit-animation-timing-function: ease;
326
+	-webkit-animation-fill-mode: both;
327
+	-moz-animation-duration: .8s;
328
+	-moz-animation-delay: 3.4s;
329
+	-moz-animation-timing-function: ease;
330
+	-moz-animation-fill-mode: both;
331
+	-ms-animation-duration: .8s;
332
+	-ms-animation-delay: 3.4s;
333
+	-ms-animation-timing-function: ease;
334
+	-ms-animation-fill-mode: both;
335
+	animation-duration: .8s;
336
+	animation-delay: 3.4s;
337
+	animation-timing-function: ease;
338
+	animation-fill-mode: both;	          
339
+}
340
+.animate18{
341
+   	-webkit-animation-duration: .8s;
342
+	-webkit-animation-delay: 3.6s;
343
+	-webkit-animation-timing-function: ease;
344
+	-webkit-animation-fill-mode: both;
345
+	-moz-animation-duration: .8s;
346
+	-moz-animation-delay: 3.6s;
347
+	-moz-animation-timing-function: ease;
348
+	-moz-animation-fill-mode: both;
349
+	-ms-animation-duration: .8s;
350
+	-ms-animation-delay: 3.6s;
351
+	-ms-animation-timing-function: ease;
352
+	-ms-animation-fill-mode: both;
353
+	animation-duration: .8s;
354
+	animation-delay: 3.6s;
355
+	animation-timing-function: ease;
356
+	animation-fill-mode: both;	          
357
+}
358
+.animate19{
359
+   	-webkit-animation-duration: .8s;
360
+	-webkit-animation-delay: 3.8s;
361
+	-webkit-animation-timing-function: ease;
362
+	-webkit-animation-fill-mode: both;
363
+	-moz-animation-duration: .8s;
364
+	-moz-animation-delay: 3.8s;
365
+	-moz-animation-timing-function: ease;
366
+	-moz-animation-fill-mode: both;
367
+	-ms-animation-duration: .8s;
368
+	-ms-animation-delay: 3.8s;
369
+	-ms-animation-timing-function: ease;
370
+	-ms-animation-fill-mode: both;
371
+	animation-duration: .8s;
372
+	animation-delay: 3.8s;
373
+	animation-timing-function: ease;
374
+	animation-fill-mode: both;	          
375
+}
376
+
377
+.animate20{
378
+   	-webkit-animation-duration: .8s;
379
+	-webkit-animation-delay: 4.0s;
380
+	-webkit-animation-timing-function: ease;
381
+	-webkit-animation-fill-mode: both;
382
+	-moz-animation-duration: .8s;
383
+	-moz-animation-delay: 4.0s;
384
+	-moz-animation-timing-function: ease;
385
+	-moz-animation-fill-mode: both;
386
+	-ms-animation-duration: .8s;
387
+	-ms-animation-delay: 4.0s;
388
+	-ms-animation-timing-function: ease;
389
+	-ms-animation-fill-mode: both;
390
+	animation-duration: .8s;
391
+	animation-delay: 4.0s;
392
+	animation-timing-function: ease;
393
+	animation-fill-mode: both;	          
394
+}

+ 1
- 0
sampleProject/public/assets/css/animate.min.css
File diff suppressed because it is too large
View File


+ 5
- 0
sampleProject/public/assets/css/bootstrap-clockpicker.min.css View File

@@ -0,0 +1,5 @@
1
+/*!
2
+ * ClockPicker v0.0.7 for Bootstrap (http://weareoutman.github.io/clockpicker/)
3
+ * Copyright 2014 Wang Shenwei.
4
+ * Licensed under MIT (https://github.com/weareoutman/clockpicker/blob/master/LICENSE)
5
+ */.clockpicker .input-group-addon{cursor:pointer}.clockpicker-moving{cursor:move}.clockpicker-align-left.popover>.arrow{left:25px}.clockpicker-align-top.popover>.arrow{top:17px}.clockpicker-align-right.popover>.arrow{left:auto;right:25px}.clockpicker-align-bottom.popover>.arrow{top:auto;bottom:6px}.clockpicker-popover .popover-title{background-color:#fff;color:#999;font-size:24px;font-weight:700;line-height:30px;text-align:center}.clockpicker-popover .popover-title span{cursor:pointer}.clockpicker-popover .popover-content{background-color:#f8f8f8;padding:12px}.popover-content:last-child{border-bottom-left-radius:5px;border-bottom-right-radius:5px}.clockpicker-plate{background-color:#fff;border:1px solid #ccc;border-radius:50%;width:200px;height:200px;overflow:visible;position:relative;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.clockpicker-canvas,.clockpicker-dial{width:200px;height:200px;position:absolute;left:-1px;top:-1px}.clockpicker-minutes{visibility:hidden}.clockpicker-tick{border-radius:50%;color:#666;line-height:26px;text-align:center;width:26px;height:26px;position:absolute;cursor:pointer}.clockpicker-tick.active,.clockpicker-tick:hover{background-color:#c0e5f7;background-color:rgba(0,149,221,.25)}.clockpicker-button{background-image:none;background-color:#fff;border-width:1px 0 0;border-top-left-radius:0;border-top-right-radius:0;margin:0;padding:10px 0}.clockpicker-button:hover{background-image:none;background-color:#ebebeb}.clockpicker-button:focus{outline:0!important}.clockpicker-dial{-webkit-transition:-webkit-transform 350ms,opacity 350ms;-moz-transition:-moz-transform 350ms,opacity 350ms;-ms-transition:-ms-transform 350ms,opacity 350ms;-o-transition:-o-transform 350ms,opacity 350ms;transition:transform 350ms,opacity 350ms}.clockpicker-dial-out{opacity:0}.clockpicker-hours.clockpicker-dial-out{-webkit-transform:scale(1.2,1.2);-moz-transform:scale(1.2,1.2);-ms-transform:scale(1.2,1.2);-o-transform:scale(1.2,1.2);transform:scale(1.2,1.2)}.clockpicker-minutes.clockpicker-dial-out{-webkit-transform:scale(.8,.8);-moz-transform:scale(.8,.8);-ms-transform:scale(.8,.8);-o-transform:scale(.8,.8);transform:scale(.8,.8)}.clockpicker-canvas{-webkit-transition:opacity 175ms;-moz-transition:opacity 175ms;-ms-transition:opacity 175ms;-o-transition:opacity 175ms;transition:opacity 175ms}.clockpicker-canvas-out{opacity:.25}.clockpicker-canvas-bearing,.clockpicker-canvas-fg{stroke:none;fill:#0095dd}.clockpicker-canvas-bg{stroke:none;fill:#c0e5f7}.clockpicker-canvas-bg-trans{fill:rgba(0,149,221,.25)}.clockpicker-canvas line{stroke:#0095dd;stroke-width:1;stroke-linecap:round}.clockpicker-button.am-button{margin:1px;padding:5px;border:1px solid rgba(0,0,0,.2);border-radius:4px}.clockpicker-button.pm-button{margin:1px 1px 1px 136px;padding:5px;border:1px solid rgba(0,0,0,.2);border-radius:4px}

+ 337
- 0
sampleProject/public/assets/css/bootstrap-datetimepicker.css View File

@@ -0,0 +1,337 @@
1
+.bootstrap-datetimepicker-widget.dropdown-menu {
2
+  margin: 2px 0;
3
+  padding: 4px;
4
+  width: 19em;
5
+}
6
+@media (min-width: 768px) {
7
+  .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {
8
+    width: 38em;
9
+  }
10
+}
11
+@media (min-width: 992px) {
12
+  .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {
13
+    width: 38em;
14
+  }
15
+}
16
+@media (min-width: 1200px) {
17
+  .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {
18
+    width: 38em;
19
+  }
20
+}
21
+.bootstrap-datetimepicker-widget.dropdown-menu:before,
22
+.bootstrap-datetimepicker-widget.dropdown-menu:after {
23
+  content: '';
24
+  display: inline-block;
25
+  position: absolute;
26
+}
27
+.bootstrap-datetimepicker-widget.dropdown-menu.bottom:before {
28
+  border-left: 7px solid transparent;
29
+  border-right: 7px solid transparent;
30
+  border-bottom: 7px solid #ccc;
31
+  border-bottom-color: rgba(0, 0, 0, 0.2);
32
+  top: -7px;
33
+  left: 7px;
34
+}
35
+.bootstrap-datetimepicker-widget.dropdown-menu.bottom:after {
36
+  border-left: 6px solid transparent;
37
+  border-right: 6px solid transparent;
38
+  border-bottom: 6px solid white;
39
+  top: -6px;
40
+  left: 8px;
41
+}
42
+.bootstrap-datetimepicker-widget.dropdown-menu.top:before {
43
+  border-left: 7px solid transparent;
44
+  border-right: 7px solid transparent;
45
+  border-top: 7px solid #ccc;
46
+  border-top-color: rgba(0, 0, 0, 0.2);
47
+  bottom: -7px;
48
+  left: 6px;
49
+}
50
+.bootstrap-datetimepicker-widget.dropdown-menu.top:after {
51
+  border-left: 6px solid transparent;
52
+  border-right: 6px solid transparent;
53
+  border-top: 6px solid white;
54
+  bottom: -6px;
55
+  left: 7px;
56
+}
57
+.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:before {
58
+  left: auto;
59
+  right: 6px;
60
+}
61
+.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:after {
62
+  left: auto;
63
+  right: 7px;
64
+}
65
+.bootstrap-datetimepicker-widget .list-unstyled {
66
+  margin: 0;
67
+}
68
+.bootstrap-datetimepicker-widget a[data-action] {
69
+  padding: 6px 0;
70
+}
71
+.bootstrap-datetimepicker-widget a[data-action]:active {
72
+  box-shadow: none;
73
+}
74
+.bootstrap-datetimepicker-widget .timepicker-hour,
75
+.bootstrap-datetimepicker-widget .timepicker-minute,
76
+.bootstrap-datetimepicker-widget .timepicker-second {
77
+  width: 54px;
78
+  font-weight: bold;
79
+  font-size: 1.2em;
80
+  margin: 0;
81
+}
82
+.bootstrap-datetimepicker-widget button[data-action] {
83
+  padding: 6px;
84
+}
85
+.bootstrap-datetimepicker-widget .btn[data-action="incrementHours"]::after {
86
+  position: absolute;
87
+  width: 1px;
88
+  height: 1px;
89
+  margin: -1px;
90
+  padding: 0;
91
+  overflow: hidden;
92
+  clip: rect(0, 0, 0, 0);
93
+  border: 0;
94
+  content: "Increment Hours";
95
+}
96
+.bootstrap-datetimepicker-widget .btn[data-action="incrementMinutes"]::after {
97
+  position: absolute;
98
+  width: 1px;
99
+  height: 1px;
100
+  margin: -1px;
101
+  padding: 0;
102
+  overflow: hidden;
103
+  clip: rect(0, 0, 0, 0);
104
+  border: 0;
105
+  content: "Increment Minutes";
106
+}
107
+.bootstrap-datetimepicker-widget .btn[data-action="decrementHours"]::after {
108
+  position: absolute;
109
+  width: 1px;
110
+  height: 1px;
111
+  margin: -1px;
112
+  padding: 0;
113
+  overflow: hidden;
114
+  clip: rect(0, 0, 0, 0);
115
+  border: 0;
116
+  content: "Decrement Hours";
117
+}
118
+.bootstrap-datetimepicker-widget .btn[data-action="decrementMinutes"]::after {
119
+  position: absolute;
120
+  width: 1px;
121
+  height: 1px;
122
+  margin: -1px;
123
+  padding: 0;
124
+  overflow: hidden;
125
+  clip: rect(0, 0, 0, 0);
126
+  border: 0;
127
+  content: "Decrement Minutes";
128
+}
129
+.bootstrap-datetimepicker-widget .btn[data-action="showHours"]::after {
130
+  position: absolute;
131
+  width: 1px;
132
+  height: 1px;
133
+  margin: -1px;
134
+  padding: 0;
135
+  overflow: hidden;
136
+  clip: rect(0, 0, 0, 0);
137
+  border: 0;
138
+  content: "Show Hours";
139
+}
140
+.bootstrap-datetimepicker-widget .btn[data-action="showMinutes"]::after {
141
+  position: absolute;
142
+  width: 1px;
143
+  height: 1px;
144
+  margin: -1px;
145
+  padding: 0;
146
+  overflow: hidden;
147
+  clip: rect(0, 0, 0, 0);
148
+  border: 0;
149
+  content: "Show Minutes";
150
+}
151
+.bootstrap-datetimepicker-widget .btn[data-action="togglePeriod"]::after {
152
+  position: absolute;
153
+  width: 1px;
154
+  height: 1px;
155
+  margin: -1px;
156
+  padding: 0;
157
+  overflow: hidden;
158
+  clip: rect(0, 0, 0, 0);
159
+  border: 0;
160
+  content: "Toggle AM/PM";
161
+}
162
+.bootstrap-datetimepicker-widget .picker-switch {
163
+  text-align: center;
164
+}
165
+.bootstrap-datetimepicker-widget .picker-switch::after {
166
+  position: absolute;
167
+  width: 1px;
168
+  height: 1px;
169
+  margin: -1px;
170
+  padding: 0;
171
+  overflow: hidden;
172
+  clip: rect(0, 0, 0, 0);
173
+  border: 0;
174
+  content: "Toggle Date and Time Screens";
175
+}
176
+.bootstrap-datetimepicker-widget .picker-switch td {
177
+  padding: 0;
178
+  margin: 0;
179
+  height: auto;
180
+  width: auto;
181
+  line-height: inherit;
182
+}
183
+.bootstrap-datetimepicker-widget .picker-switch td span {
184
+  line-height: 2.5;
185
+  height: 2.5em;
186
+  width: 100%;
187
+}
188
+.bootstrap-datetimepicker-widget table {
189
+  width: 100%;
190
+  margin: 0;
191
+}
192
+.bootstrap-datetimepicker-widget td,
193
+.bootstrap-datetimepicker-widget th {
194
+  text-align: center;
195
+  border-radius: 4px;
196
+}
197
+.bootstrap-datetimepicker-widget th {
198
+  height: 20px;
199
+  line-height: 20px;
200
+  width: 20px;
201
+}
202
+.bootstrap-datetimepicker-widget th.picker-switch {
203
+  width: 145px;
204
+}
205
+.bootstrap-datetimepicker-widget th.disabled,
206
+.bootstrap-datetimepicker-widget th.disabled:hover {
207
+  background: none;
208
+  color: #777777;
209
+  cursor: not-allowed;
210
+}
211
+.bootstrap-datetimepicker-widget th.prev::after {
212
+  position: absolute;
213
+  width: 1px;
214
+  height: 1px;
215
+  margin: -1px;
216
+  padding: 0;
217
+  overflow: hidden;
218
+  clip: rect(0, 0, 0, 0);
219
+  border: 0;
220
+  background:
221
+  content: "Previous Month";
222
+}
223
+.bootstrap-datetimepicker-widget th.next::after {
224
+  position: absolute;
225
+  width: 1px;
226
+  height: 1px;
227
+  margin: -1px;
228
+  padding: 0;
229
+  overflow: hidden;
230
+  clip: rect(0, 0, 0, 0);
231
+  border: 0;
232
+  content: "Next Month";
233
+}
234
+.bootstrap-datetimepicker-widget thead tr:first-child th {
235
+  cursor: pointer;
236
+}
237
+.bootstrap-datetimepicker-widget thead tr:first-child th:hover {
238
+  background: #eeeeee;
239
+}
240
+.bootstrap-datetimepicker-widget td {
241
+  height: 54px;
242
+  line-height: 54px;
243
+  width: 54px;
244
+}
245
+.bootstrap-datetimepicker-widget td.cw {
246
+  font-size: .8em;
247
+  height: 20px;
248
+  line-height: 20px;
249
+  color: #777777;
250
+}
251
+.bootstrap-datetimepicker-widget td.day {
252
+  height: 20px;
253
+  line-height: 20px;
254
+  width: 20px;
255
+}
256
+.bootstrap-datetimepicker-widget td.day:hover,
257
+.bootstrap-datetimepicker-widget td.hour:hover,
258
+.bootstrap-datetimepicker-widget td.minute:hover,
259
+.bootstrap-datetimepicker-widget td.second:hover {
260
+  background: #eeeeee;
261
+  cursor: pointer;
262
+}
263
+.bootstrap-datetimepicker-widget td.old,
264
+.bootstrap-datetimepicker-widget td.new {
265
+  color: #777777;
266
+}
267
+.bootstrap-datetimepicker-widget td.today {
268
+  position: relative;
269
+}
270
+.bootstrap-datetimepicker-widget td.today:before {
271
+  content: '';
272
+  display: inline-block;
273
+  border-left: 7px solid transparent;
274
+  border-bottom: 7px solid #428bca;
275
+  border-top-color: rgba(0, 0, 0, 0.2);
276
+  position: absolute;
277
+  bottom: 4px;
278
+  right: 4px;
279
+}
280
+.bootstrap-datetimepicker-widget td.active,
281
+.bootstrap-datetimepicker-widget td.active:hover {
282
+  background-color: #428bca;
283
+  color: #ffffff;
284
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
285
+}
286
+.bootstrap-datetimepicker-widget td.active.today:before {
287
+  border-bottom-color: #fff;
288
+}
289
+.bootstrap-datetimepicker-widget td.disabled,
290
+.bootstrap-datetimepicker-widget td.disabled:hover {
291
+  background: none;
292
+  color: #777777;
293
+  cursor: not-allowed;
294
+}
295
+.bootstrap-datetimepicker-widget td span {
296
+  display: inline-block;
297
+  width: 54px;
298
+  height: 54px;
299
+  line-height: 54px;
300
+  margin: 2px 1.5px;
301
+  cursor: pointer;
302
+  border-radius: 4px;
303
+}
304
+.bootstrap-datetimepicker-widget td span:hover {
305
+  background: #eeeeee;
306
+}
307
+.bootstrap-datetimepicker-widget td span.active {
308
+  background-color: #428bca;
309
+  color: #ffffff;
310
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
311
+}
312
+.bootstrap-datetimepicker-widget td span.old {
313
+  color: #777777;
314
+}
315
+.bootstrap-datetimepicker-widget td span.disabled,
316
+.bootstrap-datetimepicker-widget td span.disabled:hover {
317
+  background: none;
318
+  color: #777777;
319
+  cursor: not-allowed;
320
+}
321
+.bootstrap-datetimepicker-widget.usetwentyfour td.hour {
322
+  height: 27px;
323
+  line-height: 27px;
324
+}
325
+.input-group.date .input-group-addon {
326
+  cursor: pointer;
327
+}
328
+.sr-only {
329
+  position: absolute;
330
+  width: 1px;
331
+  height: 1px;
332
+  margin: -1px;
333
+  padding: 0;
334
+  overflow: hidden;
335
+  clip: rect(0, 0, 0, 0);
336
+  border: 0;
337
+}

+ 663
- 0
sampleProject/public/assets/css/bootstrap-editable.css View File

@@ -0,0 +1,663 @@
1
+/*! X-editable - v1.5.1 
2
+* In-place editing with Twitter Bootstrap, jQuery UI or pure jQuery
3
+* http://github.com/vitalets/x-editable
4
+* Copyright (c) 2013 Vitaliy Potapov; Licensed MIT */
5
+.editableform {
6
+    margin-bottom: 0; /* overwrites bootstrap margin */
7
+}
8
+
9
+.editableform .control-group {
10
+    margin-bottom: 0; /* overwrites bootstrap margin */
11
+    white-space: nowrap; /* prevent wrapping buttons on new line */
12
+    line-height: 20px; /* overwriting bootstrap line-height. See #133 */
13
+}
14
+
15
+/* 
16
+  BS3 width:1005 for inputs breaks editable form in popup 
17
+  See: https://github.com/vitalets/x-editable/issues/393
18
+*/
19
+.editableform .form-control {
20
+    width: auto;
21
+}
22
+
23
+.editable-buttons {
24
+   display: inline-block; /* should be inline to take effect of parent's white-space: nowrap */
25
+   vertical-align: top;
26
+   margin-left: 7px;
27
+   /* inline-block emulation for IE7*/
28
+   zoom: 1; 
29
+   *display: inline;
30
+}
31
+
32
+.editable-buttons.editable-buttons-bottom {
33
+   display: block; 
34
+   margin-top: 7px;
35
+   margin-left: 0;
36
+}
37
+
38
+.editable-input {
39
+    vertical-align: top; 
40
+    display: inline-block; /* should be inline to take effect of parent's white-space: nowrap */
41
+    width: auto; /* bootstrap-responsive has width: 100% that breakes layout */
42
+    white-space: normal; /* reset white-space decalred in parent*/
43
+   /* display-inline emulation for IE7*/
44
+   zoom: 1; 
45
+   *display: inline;   
46
+}
47
+
48
+.editable-buttons .editable-cancel {
49
+   margin-left: 7px; 
50
+}
51
+
52
+/*for jquery-ui buttons need set height to look more pretty*/
53
+.editable-buttons button.ui-button-icon-only {
54
+   height: 24px; 
55
+   width: 30px;
56
+}
57
+
58
+.editableform-loading {
59
+    background: url('../images/loading.gif') center center no-repeat;  
60
+    height: 25px;
61
+    width: auto; 
62
+    min-width: 25px; 
63
+}
64
+
65
+.editable-inline .editableform-loading {
66
+    background-position: left 5px;      
67
+}
68
+
69
+ .editable-error-block {
70
+    max-width: 300px;
71
+    margin: 5px 0 0 0;
72
+    width: auto;
73
+    white-space: normal;
74
+}
75
+
76
+/*add padding for jquery ui*/
77
+.editable-error-block.ui-state-error {
78
+    padding: 3px;  
79
+}  
80
+
81
+.editable-error {
82
+   color: red;  
83
+}
84
+
85
+/* ---- For specific types ---- */
86
+
87
+.editableform .editable-date {
88
+    padding: 0; 
89
+    margin: 0;
90
+    float: left;
91
+}
92
+
93
+/* move datepicker icon to center of add-on button. See https://github.com/vitalets/x-editable/issues/183 */
94
+.editable-inline .add-on .icon-th {
95
+   margin-top: 3px;
96
+   margin-left: 1px; 
97
+}
98
+
99
+
100
+/* checklist vertical alignment */
101
+.editable-checklist label input[type="checkbox"], 
102
+.editable-checklist label span {
103
+    vertical-align: middle;
104
+    margin: 0;
105
+}
106
+
107
+.editable-checklist label {
108
+    white-space: nowrap; 
109
+}
110
+
111
+/* set exact width of textarea to fit buttons toolbar */
112
+.editable-wysihtml5 {
113
+    width: 566px; 
114
+    height: 250px; 
115
+}
116
+
117
+/* clear button shown as link in date inputs */
118
+.editable-clear {
119
+   clear: both;
120
+   font-size: 0.9em;
121
+   text-decoration: none;
122
+   text-align: right;
123
+}
124
+
125
+/* IOS-style clear button for text inputs */
126
+.editable-clear-x {
127
+   background: url('../images/clear.png') center center no-repeat;
128
+   display: block;
129
+   width: 13px;    
130
+   height: 13px;
131
+   position: absolute;
132
+   opacity: 0.6;
133
+   z-index: 100;
134
+   
135
+   top: 50%;
136
+   right: 6px;
137
+   margin-top: -6px;
138
+   
139
+}
140
+
141
+.editable-clear-x:hover {
142
+   opacity: 1;
143
+}
144
+
145
+.editable-pre-wrapped {
146
+   white-space: pre-wrap;
147
+}
148
+.editable-container.editable-popup {
149
+    max-width: none !important; /* without this rule poshytip/tooltip does not stretch */
150
+}  
151
+
152
+.editable-container.popover {
153
+    width: auto; /* without this rule popover does not stretch */
154
+}
155
+
156
+.editable-container.editable-inline {
157
+    display: inline-block; 
158
+    vertical-align: middle;
159
+    width: auto;
160
+    /* inline-block emulation for IE7*/
161
+    zoom: 1; 
162
+    *display: inline;    
163
+}
164
+
165
+.editable-container.ui-widget {
166
+   font-size: inherit;  /* jqueryui widget font 1.1em too big, overwrite it */
167
+   z-index: 9990; /* should be less than select2 dropdown z-index to close dropdown first when click */
168
+}
169
+.editable-click, 
170
+a.editable-click, 
171
+a.editable-click:hover {
172
+    text-decoration: none;
173
+    border-bottom: dashed 1px #0088cc;
174
+}
175
+
176
+.editable-click.editable-disabled, 
177
+a.editable-click.editable-disabled, 
178
+a.editable-click.editable-disabled:hover {
179
+   color: #585858;  
180
+   cursor: default;
181
+   border-bottom: none;
182
+}
183
+
184
+.editable-empty, .editable-empty:hover, .editable-empty:focus{
185
+  font-style: italic; 
186
+  color: #DD1144;  
187
+  /* border-bottom: none; */
188
+  text-decoration: none;
189
+}
190
+
191
+.editable-unsaved {
192
+  font-weight: bold; 
193
+}
194
+
195
+.editable-unsaved:after {
196
+/*    content: '*'*/
197
+}
198
+
199
+.editable-bg-transition {
200
+  -webkit-transition: background-color 1400ms ease-out;
201
+  -moz-transition: background-color 1400ms ease-out;
202
+  -o-transition: background-color 1400ms ease-out;
203
+  -ms-transition: background-color 1400ms ease-out;
204
+  transition: background-color 1400ms ease-out;  
205
+}
206
+
207
+/*see https://github.com/vitalets/x-editable/issues/139 */
208
+.form-horizontal .editable
209
+{ 
210
+    padding-top: 5px;
211
+    display:inline-block;
212
+}
213
+
214
+
215
+/*!
216
+ * Datepicker for Bootstrap
217
+ *
218
+ * Copyright 2012 Stefan Petre
219
+ * Improvements by Andrew Rowls
220
+ * Licensed under the Apache License v2.0
221
+ * http://www.apache.org/licenses/LICENSE-2.0
222
+ *
223
+ */
224
+.datepicker {
225
+  padding: 4px;
226
+  -webkit-border-radius: 4px;
227
+  -moz-border-radius: 4px;
228
+  border-radius: 4px;
229
+  direction: ltr;
230
+  /*.dow {
231
+		border-top: 1px solid #ddd !important;
232
+	}*/
233
+
234
+}
235
+.datepicker-inline {
236
+  width: 220px;
237
+}
238
+.datepicker.datepicker-rtl {
239
+  direction: rtl;
240
+}
241
+.datepicker.datepicker-rtl table tr td span {
242
+  float: right;
243
+}
244
+.datepicker-dropdown {
245
+  top: 0;
246
+  left: 0;
247
+}
248
+.datepicker-dropdown:before {
249
+  content: '';
250
+  display: inline-block;
251
+  border-left: 7px solid transparent;
252
+  border-right: 7px solid transparent;
253
+  border-bottom: 7px solid #ccc;
254
+  border-bottom-color: rgba(0, 0, 0, 0.2);
255
+  position: absolute;
256
+  top: -7px;
257
+  left: 6px;
258
+}
259
+.datepicker-dropdown:after {
260
+  content: '';
261
+  display: inline-block;
262
+  border-left: 6px solid transparent;
263
+  border-right: 6px solid transparent;
264
+  border-bottom: 6px solid #ffffff;
265
+  position: absolute;
266
+  top: -6px;
267
+  left: 7px;
268
+}
269
+.datepicker > div {
270
+  display: none;
271
+}
272
+.datepicker.days div.datepicker-days {
273
+  display: block;
274
+}
275
+.datepicker.months div.datepicker-months {
276
+  display: block;
277
+}
278
+.datepicker.years div.datepicker-years {
279
+  display: block;
280
+}
281
+.datepicker table {
282
+  margin: 0;
283
+}
284
+.datepicker td,
285
+.datepicker th {
286
+  text-align: center;
287
+  width: 20px;
288
+  height: 20px;
289
+  -webkit-border-radius: 4px;
290
+  -moz-border-radius: 4px;
291
+  border-radius: 4px;
292
+  border: none;
293
+}
294
+.table-striped .datepicker table tr td,
295
+.table-striped .datepicker table tr th {
296
+  background-color: transparent;
297
+}
298
+.datepicker table tr td.day:hover {
299
+  background: #eeeeee;
300
+  cursor: pointer;
301
+}
302
+.datepicker table tr td.old,
303
+.datepicker table tr td.new {
304
+  color: #999999;
305
+}
306
+.datepicker table tr td.disabled,
307
+.datepicker table tr td.disabled:hover {
308
+  background: none;
309
+  color: #999999;
310
+  cursor: default;
311
+}
312
+.datepicker table tr td.today,
313
+.datepicker table tr td.today:hover,
314
+.datepicker table tr td.today.disabled,
315
+.datepicker table tr td.today.disabled:hover {
316
+  background-color: #fde19a;
317
+  background-image: -moz-linear-gradient(top, #fdd49a, #fdf59a);
318
+  background-image: -ms-linear-gradient(top, #fdd49a, #fdf59a);
319
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a));
320
+  background-image: -webkit-linear-gradient(top, #fdd49a, #fdf59a);
321
+  background-image: -o-linear-gradient(top, #fdd49a, #fdf59a);
322
+  background-image: linear-gradient(top, #fdd49a, #fdf59a);
323
+  background-repeat: repeat-x;
324
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0);
325
+  border-color: #fdf59a #fdf59a #fbed50;
326
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
327
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
328
+  color: #000;
329
+}
330
+.datepicker table tr td.today:hover,
331
+.datepicker table tr td.today:hover:hover,
332
+.datepicker table tr td.today.disabled:hover,
333
+.datepicker table tr td.today.disabled:hover:hover,
334
+.datepicker table tr td.today:active,
335
+.datepicker table tr td.today:hover:active,
336
+.datepicker table tr td.today.disabled:active,
337
+.datepicker table tr td.today.disabled:hover:active,
338
+.datepicker table tr td.today.active,
339
+.datepicker table tr td.today:hover.active,
340
+.datepicker table tr td.today.disabled.active,
341
+.datepicker table tr td.today.disabled:hover.active,
342
+.datepicker table tr td.today.disabled,
343
+.datepicker table tr td.today:hover.disabled,
344
+.datepicker table tr td.today.disabled.disabled,
345
+.datepicker table tr td.today.disabled:hover.disabled,
346
+.datepicker table tr td.today[disabled],
347
+.datepicker table tr td.today:hover[disabled],
348
+.datepicker table tr td.today.disabled[disabled],
349
+.datepicker table tr td.today.disabled:hover[disabled] {
350
+  background-color: #fdf59a;
351
+}
352
+.datepicker table tr td.today:active,
353
+.datepicker table tr td.today:hover:active,
354
+.datepicker table tr td.today.disabled:active,
355
+.datepicker table tr td.today.disabled:hover:active,
356
+.datepicker table tr td.today.active,
357
+.datepicker table tr td.today:hover.active,
358
+.datepicker table tr td.today.disabled.active,
359
+.datepicker table tr td.today.disabled:hover.active {
360
+  background-color: #fbf069 \9;
361
+}
362
+.datepicker table tr td.today:hover:hover {
363
+  color: #000;
364
+}
365
+.datepicker table tr td.today.active:hover {
366
+  color: #fff;
367
+}
368
+.datepicker table tr td.range,
369
+.datepicker table tr td.range:hover,
370
+.datepicker table tr td.range.disabled,
371
+.datepicker table tr td.range.disabled:hover {
372
+  background: #eeeeee;
373
+  -webkit-border-radius: 0;
374
+  -moz-border-radius: 0;
375
+  border-radius: 0;
376
+}
377
+.datepicker table tr td.range.today,
378
+.datepicker table tr td.range.today:hover,
379
+.datepicker table tr td.range.today.disabled,
380
+.datepicker table tr td.range.today.disabled:hover {
381
+  background-color: #f3d17a;
382
+  background-image: -moz-linear-gradient(top, #f3c17a, #f3e97a);
383
+  background-image: -ms-linear-gradient(top, #f3c17a, #f3e97a);
384
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f3c17a), to(#f3e97a));
385
+  background-image: -webkit-linear-gradient(top, #f3c17a, #f3e97a);
386
+  background-image: -o-linear-gradient(top, #f3c17a, #f3e97a);
387
+  background-image: linear-gradient(top, #f3c17a, #f3e97a);
388
+  background-repeat: repeat-x;
389
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3c17a', endColorstr='#f3e97a', GradientType=0);
390
+  border-color: #f3e97a #f3e97a #edde34;
391
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
392
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
393
+  -webkit-border-radius: 0;
394
+  -moz-border-radius: 0;
395
+  border-radius: 0;
396
+}
397
+.datepicker table tr td.range.today:hover,
398
+.datepicker table tr td.range.today:hover:hover,
399
+.datepicker table tr td.range.today.disabled:hover,
400
+.datepicker table tr td.range.today.disabled:hover:hover,
401
+.datepicker table tr td.range.today:active,
402
+.datepicker table tr td.range.today:hover:active,
403
+.datepicker table tr td.range.today.disabled:active,
404
+.datepicker table tr td.range.today.disabled:hover:active,
405
+.datepicker table tr td.range.today.active,
406
+.datepicker table tr td.range.today:hover.active,
407
+.datepicker table tr td.range.today.disabled.active,
408
+.datepicker table tr td.range.today.disabled:hover.active,
409
+.datepicker table tr td.range.today.disabled,
410
+.datepicker table tr td.range.today:hover.disabled,
411
+.datepicker table tr td.range.today.disabled.disabled,
412
+.datepicker table tr td.range.today.disabled:hover.disabled,
413
+.datepicker table tr td.range.today[disabled],
414
+.datepicker table tr td.range.today:hover[disabled],
415
+.datepicker table tr td.range.today.disabled[disabled],
416
+.datepicker table tr td.range.today.disabled:hover[disabled] {
417
+  background-color: #f3e97a;
418
+}
419
+.datepicker table tr td.range.today:active,
420
+.datepicker table tr td.range.today:hover:active,
421
+.datepicker table tr td.range.today.disabled:active,
422
+.datepicker table tr td.range.today.disabled:hover:active,
423
+.datepicker table tr td.range.today.active,
424
+.datepicker table tr td.range.today:hover.active,
425
+.datepicker table tr td.range.today.disabled.active,
426
+.datepicker table tr td.range.today.disabled:hover.active {
427
+  background-color: #efe24b \9;
428
+}
429
+.datepicker table tr td.selected,
430
+.datepicker table tr td.selected:hover,
431
+.datepicker table tr td.selected.disabled,
432
+.datepicker table tr td.selected.disabled:hover {
433
+  background-color: #9e9e9e;
434
+  background-image: -moz-linear-gradient(top, #b3b3b3, #808080);
435
+  background-image: -ms-linear-gradient(top, #b3b3b3, #808080);
436
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#b3b3b3), to(#808080));
437
+  background-image: -webkit-linear-gradient(top, #b3b3b3, #808080);
438
+  background-image: -o-linear-gradient(top, #b3b3b3, #808080);
439
+  background-image: linear-gradient(top, #b3b3b3, #808080);
440
+  background-repeat: repeat-x;
441
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#b3b3b3', endColorstr='#808080', GradientType=0);
442
+  border-color: #808080 #808080 #595959;
443
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
444
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
445
+  color: #fff;
446
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
447
+}
448
+.datepicker table tr td.selected:hover,
449
+.datepicker table tr td.selected:hover:hover,
450
+.datepicker table tr td.selected.disabled:hover,
451
+.datepicker table tr td.selected.disabled:hover:hover,
452
+.datepicker table tr td.selected:active,
453
+.datepicker table tr td.selected:hover:active,
454
+.datepicker table tr td.selected.disabled:active,
455
+.datepicker table tr td.selected.disabled:hover:active,
456
+.datepicker table tr td.selected.active,
457
+.datepicker table tr td.selected:hover.active,
458
+.datepicker table tr td.selected.disabled.active,
459
+.datepicker table tr td.selected.disabled:hover.active,
460
+.datepicker table tr td.selected.disabled,
461
+.datepicker table tr td.selected:hover.disabled,
462
+.datepicker table tr td.selected.disabled.disabled,
463
+.datepicker table tr td.selected.disabled:hover.disabled,
464
+.datepicker table tr td.selected[disabled],
465
+.datepicker table tr td.selected:hover[disabled],
466
+.datepicker table tr td.selected.disabled[disabled],
467
+.datepicker table tr td.selected.disabled:hover[disabled] {
468
+  background-color: #808080;
469
+}
470
+.datepicker table tr td.selected:active,
471
+.datepicker table tr td.selected:hover:active,
472
+.datepicker table tr td.selected.disabled:active,
473
+.datepicker table tr td.selected.disabled:hover:active,
474
+.datepicker table tr td.selected.active,
475
+.datepicker table tr td.selected:hover.active,
476
+.datepicker table tr td.selected.disabled.active,
477
+.datepicker table tr td.selected.disabled:hover.active {
478
+  background-color: #666666 \9;
479
+}
480
+.datepicker table tr td.active,
481
+.datepicker table tr td.active:hover,
482
+.datepicker table tr td.active.disabled,
483
+.datepicker table tr td.active.disabled:hover {
484
+  background-color: #006dcc;
485
+  background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
486
+  background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
487
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
488
+  background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
489
+  background-image: -o-linear-gradient(top, #0088cc, #0044cc);
490
+  background-image: linear-gradient(top, #0088cc, #0044cc);
491
+  background-repeat: repeat-x;
492
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
493
+  border-color: #0044cc #0044cc #002a80;
494
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
495
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
496
+  color: #fff;
497
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
498
+}
499
+.datepicker table tr td.active:hover,
500
+.datepicker table tr td.active:hover:hover,
501
+.datepicker table tr td.active.disabled:hover,
502
+.datepicker table tr td.active.disabled:hover:hover,
503
+.datepicker table tr td.active:active,
504
+.datepicker table tr td.active:hover:active,
505
+.datepicker table tr td.active.disabled:active,
506
+.datepicker table tr td.active.disabled:hover:active,
507
+.datepicker table tr td.active.active,
508
+.datepicker table tr td.active:hover.active,
509
+.datepicker table tr td.active.disabled.active,
510
+.datepicker table tr td.active.disabled:hover.active,
511
+.datepicker table tr td.active.disabled,
512
+.datepicker table tr td.active:hover.disabled,
513
+.datepicker table tr td.active.disabled.disabled,
514
+.datepicker table tr td.active.disabled:hover.disabled,
515
+.datepicker table tr td.active[disabled],
516
+.datepicker table tr td.active:hover[disabled],
517
+.datepicker table tr td.active.disabled[disabled],
518
+.datepicker table tr td.active.disabled:hover[disabled] {
519
+  background-color: #0044cc;
520
+}
521
+.datepicker table tr td.active:active,
522
+.datepicker table tr td.active:hover:active,
523
+.datepicker table tr td.active.disabled:active,
524
+.datepicker table tr td.active.disabled:hover:active,
525
+.datepicker table tr td.active.active,
526
+.datepicker table tr td.active:hover.active,
527
+.datepicker table tr td.active.disabled.active,
528
+.datepicker table tr td.active.disabled:hover.active {
529
+  background-color: #003399 \9;
530
+}
531
+.datepicker table tr td span {
532
+  display: block;
533
+  width: 23%;
534
+  height: 54px;
535
+  line-height: 54px;
536
+  float: left;
537
+  margin: 1%;
538
+  cursor: pointer;
539
+  -webkit-border-radius: 4px;
540
+  -moz-border-radius: 4px;
541
+  border-radius: 4px;
542
+}
543
+.datepicker table tr td span:hover {
544
+  background: #eeeeee;
545
+}
546
+.datepicker table tr td span.disabled,
547
+.datepicker table tr td span.disabled:hover {
548
+  background: none;
549
+  color: #999999;
550
+  cursor: default;
551
+}
552
+.datepicker table tr td span.active,
553
+.datepicker table tr td span.active:hover,
554
+.datepicker table tr td span.active.disabled,
555
+.datepicker table tr td span.active.disabled:hover {
556
+  background-color: #006dcc;
557
+  background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
558
+  background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
559
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
560
+  background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
561
+  background-image: -o-linear-gradient(top, #0088cc, #0044cc);
562
+  background-image: linear-gradient(top, #0088cc, #0044cc);
563
+  background-repeat: repeat-x;
564
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
565
+  border-color: #0044cc #0044cc #002a80;
566
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
567
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
568
+  color: #fff;
569
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
570
+}
571
+.datepicker table tr td span.active:hover,
572
+.datepicker table tr td span.active:hover:hover,
573
+.datepicker table tr td span.active.disabled:hover,
574
+.datepicker table tr td span.active.disabled:hover:hover,
575
+.datepicker table tr td span.active:active,
576
+.datepicker table tr td span.active:hover:active,
577
+.datepicker table tr td span.active.disabled:active,
578
+.datepicker table tr td span.active.disabled:hover:active,
579
+.datepicker table tr td span.active.active,
580
+.datepicker table tr td span.active:hover.active,
581
+.datepicker table tr td span.active.disabled.active,
582
+.datepicker table tr td span.active.disabled:hover.active,
583
+.datepicker table tr td span.active.disabled,
584
+.datepicker table tr td span.active:hover.disabled,
585
+.datepicker table tr td span.active.disabled.disabled,
586
+.datepicker table tr td span.active.disabled:hover.disabled,
587
+.datepicker table tr td span.active[disabled],
588
+.datepicker table tr td span.active:hover[disabled],
589
+.datepicker table tr td span.active.disabled[disabled],
590
+.datepicker table tr td span.active.disabled:hover[disabled] {
591
+  background-color: #0044cc;
592
+}
593
+.datepicker table tr td span.active:active,
594
+.datepicker table tr td span.active:hover:active,
595
+.datepicker table tr td span.active.disabled:active,
596
+.datepicker table tr td span.active.disabled:hover:active,
597
+.datepicker table tr td span.active.active,
598
+.datepicker table tr td span.active:hover.active,
599
+.datepicker table tr td span.active.disabled.active,
600
+.datepicker table tr td span.active.disabled:hover.active {
601
+  background-color: #003399 \9;
602
+}
603
+.datepicker table tr td span.old,
604
+.datepicker table tr td span.new {
605
+  color: #999999;
606
+}
607
+.datepicker th.datepicker-switch {
608
+  width: 145px;
609
+}
610
+.datepicker thead tr:first-child th,
611
+.datepicker tfoot tr th {
612
+  cursor: pointer;
613
+}
614
+.datepicker thead tr:first-child th:hover,
615
+.datepicker tfoot tr th:hover {
616
+  background: #eeeeee;
617
+}
618
+.datepicker .cw {
619
+  font-size: 10px;
620
+  width: 12px;
621
+  padding: 0 2px 0 5px;
622
+  vertical-align: middle;
623
+}
624
+.datepicker thead tr:first-child th.cw {
625
+  cursor: default;
626
+  background-color: transparent;
627
+}
628
+.input-append.date .add-on i,
629
+.input-prepend.date .add-on i {
630
+  display: block;
631
+  cursor: pointer;
632
+  width: 16px;
633
+  height: 16px;
634
+}
635
+.input-daterange input {
636
+  text-align: center;
637
+}
638
+.input-daterange input:first-child {
639
+  -webkit-border-radius: 3px 0 0 3px;
640
+  -moz-border-radius: 3px 0 0 3px;
641
+  border-radius: 3px 0 0 3px;
642
+}
643
+.input-daterange input:last-child {
644
+  -webkit-border-radius: 0 3px 3px 0;
645
+  -moz-border-radius: 0 3px 3px 0;
646
+  border-radius: 0 3px 3px 0;
647
+}
648
+.input-daterange .add-on {
649
+  display: inline-block;
650
+  width: auto;
651
+  min-width: 16px;
652
+  height: 18px;
653
+  padding: 4px 5px;
654
+  font-weight: normal;
655
+  line-height: 18px;
656
+  text-align: center;
657
+  text-shadow: 0 1px 0 #ffffff;
658
+  vertical-align: middle;
659
+  background-color: #eeeeee;
660
+  border: 1px solid #ccc;
661
+  margin-left: -5px;
662
+  margin-right: -5px;
663
+}

+ 1310
- 0
sampleProject/public/assets/css/bootstrap-override.css
File diff suppressed because it is too large
View File


+ 476
- 0
sampleProject/public/assets/css/bootstrap-theme.css View File

@@ -0,0 +1,476 @@
1
+/*!
2
+ * Bootstrap v3.3.4 (http://getbootstrap.com)
3
+ * Copyright 2011-2015 Twitter, Inc.
4
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
+ */
6
+
7
+.btn-default,
8
+.btn-primary,
9
+.btn-success,
10
+.btn-info,
11
+.btn-warning,
12
+.btn-danger {
13
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
14
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
15
+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
16
+}
17
+.btn-default:active,
18
+.btn-primary:active,
19
+.btn-success:active,
20
+.btn-info:active,
21
+.btn-warning:active,
22
+.btn-danger:active,
23
+.btn-default.active,
24
+.btn-primary.active,
25
+.btn-success.active,
26
+.btn-info.active,
27
+.btn-warning.active,
28
+.btn-danger.active {
29
+  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
30
+          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
31
+}
32
+.btn-default .badge,
33
+.btn-primary .badge,
34
+.btn-success .badge,
35
+.btn-info .badge,
36
+.btn-warning .badge,
37
+.btn-danger .badge {
38
+  text-shadow: none;
39
+}
40
+.btn:active,
41
+.btn.active {
42
+  background-image: none;
43
+}
44
+.btn-default {
45
+  text-shadow: 0 1px 0 #fff;
46
+  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
47
+  background-image:      -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
48
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
49
+  background-image:         linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
50
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
51
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
52
+  background-repeat: repeat-x;
53
+  border-color: #dbdbdb;
54
+  border-color: #ccc;
55
+}
56
+.btn-default:hover,
57
+.btn-default:focus {
58
+  background-color: #e0e0e0;
59
+  background-position: 0 -15px;
60
+}
61
+.btn-default:active,
62
+.btn-default.active {
63
+  background-color: #e0e0e0;
64
+  border-color: #dbdbdb;
65
+}
66
+.btn-default.disabled,
67
+.btn-default:disabled,
68
+.btn-default[disabled] {
69
+  background-color: #e0e0e0;
70
+  background-image: none;
71
+}
72
+.btn-primary {
73
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
74
+  background-image:      -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
75
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
76
+  background-image:         linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
77
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
78
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
79
+  background-repeat: repeat-x;
80
+  border-color: #245580;
81
+}
82
+.btn-primary:hover,
83
+.btn-primary:focus {
84
+  background-color: #265a88;
85
+  background-position: 0 -15px;
86
+}
87
+.btn-primary:active,
88
+.btn-primary.active {
89
+  background-color: #265a88;
90
+  border-color: #245580;
91
+}
92
+.btn-primary.disabled,
93
+.btn-primary:disabled,
94
+.btn-primary[disabled] {
95
+  background-color: #265a88;
96
+  background-image: none;
97
+}
98
+.btn-success {
99
+  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
100
+  background-image:      -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
101
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
102
+  background-image:         linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
103
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
104
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
105
+  background-repeat: repeat-x;
106
+  border-color: #3e8f3e;
107
+}
108
+.btn-success:hover,
109
+.btn-success:focus {
110
+  background-color: #419641;
111
+  background-position: 0 -15px;
112
+}
113
+.btn-success:active,
114
+.btn-success.active {
115
+  background-color: #419641;
116
+  border-color: #3e8f3e;
117
+}
118
+.btn-success.disabled,
119
+.btn-success:disabled,
120
+.btn-success[disabled] {
121
+  background-color: #419641;
122
+  background-image: none;
123
+}
124
+.btn-info {
125
+  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
126
+  background-image:      -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
127
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
128
+  background-image:         linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
129
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
130
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
131
+  background-repeat: repeat-x;
132
+  border-color: #28a4c9;
133
+}
134
+.btn-info:hover,
135
+.btn-info:focus {
136
+  background-color: #2aabd2;
137
+  background-position: 0 -15px;
138
+}
139
+.btn-info:active,
140
+.btn-info.active {
141
+  background-color: #2aabd2;
142
+  border-color: #28a4c9;
143
+}
144
+.btn-info.disabled,
145
+.btn-info:disabled,
146
+.btn-info[disabled] {
147
+  background-color: #2aabd2;
148
+  background-image: none;
149
+}
150
+.btn-warning {
151
+  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
152
+  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
153
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
154
+  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
155
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
156
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
157
+  background-repeat: repeat-x;
158
+  border-color: #e38d13;
159
+}
160
+.btn-warning:hover,
161
+.btn-warning:focus {
162
+  background-color: #eb9316;
163
+  background-position: 0 -15px;
164
+}
165
+.btn-warning:active,
166
+.btn-warning.active {
167
+  background-color: #eb9316;
168
+  border-color: #e38d13;
169
+}
170
+.btn-warning.disabled,
171
+.btn-warning:disabled,
172
+.btn-warning[disabled] {
173
+  background-color: #eb9316;
174
+  background-image: none;
175
+}
176
+.btn-danger {
177
+  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
178
+  background-image:      -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
179
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
180
+  background-image:         linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
181
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
182
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
183
+  background-repeat: repeat-x;
184
+  border-color: #b92c28;
185
+}
186
+.btn-danger:hover,
187
+.btn-danger:focus {
188
+  background-color: #c12e2a;
189
+  background-position: 0 -15px;
190
+}
191
+.btn-danger:active,
192
+.btn-danger.active {
193
+  background-color: #c12e2a;
194
+  border-color: #b92c28;
195
+}
196
+.btn-danger.disabled,
197
+.btn-danger:disabled,
198
+.btn-danger[disabled] {
199
+  background-color: #c12e2a;
200
+  background-image: none;
201
+}
202
+.thumbnail,
203
+.img-thumbnail {
204
+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
205
+          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
206
+}
207
+.dropdown-menu > li > a:hover,
208
+.dropdown-menu > li > a:focus {
209
+  background-color: #e8e8e8;
210
+  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
211
+  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
212
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
213
+  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
214
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
215
+  background-repeat: repeat-x;
216
+}
217
+.dropdown-menu > .active > a,
218
+.dropdown-menu > .active > a:hover,
219
+.dropdown-menu > .active > a:focus {
220
+  background-color: #2e6da4;
221
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
222
+  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
223
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
224
+  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
225
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
226
+  background-repeat: repeat-x;
227
+}
228
+.navbar-default {
229
+  background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
230
+  background-image:      -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
231
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
232
+  background-image:         linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
233
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
234
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
235
+  background-repeat: repeat-x;
236
+  border-radius: 4px;
237
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
238
+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
239
+}
240
+.navbar-default .navbar-nav > .open > a,
241
+.navbar-default .navbar-nav > .active > a {
242
+  background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
243
+  background-image:      -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
244
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
245
+  background-image:         linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
246
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
247
+  background-repeat: repeat-x;
248
+  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
249
+          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
250
+}
251
+.navbar-brand,
252
+.navbar-nav > li > a {
253
+  text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
254
+}
255
+.navbar-inverse {
256
+  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
257
+  background-image:      -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
258
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
259
+  background-image:         linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
260
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
261
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
262
+  background-repeat: repeat-x;
263
+}
264
+.navbar-inverse .navbar-nav > .open > a,
265
+.navbar-inverse .navbar-nav > .active > a {
266
+  background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
267
+  background-image:      -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
268
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
269
+  background-image:         linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
270
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
271
+  background-repeat: repeat-x;
272
+  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
273
+          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
274
+}
275
+.navbar-inverse .navbar-brand,
276
+.navbar-inverse .navbar-nav > li > a {
277
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
278
+}
279
+.navbar-static-top,
280
+.navbar-fixed-top,
281
+.navbar-fixed-bottom {
282
+  border-radius: 0;
283
+}
284
+@media (max-width: 767px) {
285
+  .navbar .navbar-nav .open .dropdown-menu > .active > a,
286
+  .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
287
+  .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
288
+    color: #fff;
289
+    background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
290
+    background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
291
+    background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
292
+    background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
293
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
294
+    background-repeat: repeat-x;
295
+  }
296
+}
297
+.alert {
298
+  text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
299
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
300
+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
301
+}
302
+.alert-success {
303
+  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
304
+  background-image:      -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
305
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
306
+  background-image:         linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
307
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
308
+  background-repeat: repeat-x;
309
+  border-color: #b2dba1;
310
+}
311
+.alert-info {
312
+  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
313
+  background-image:      -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
314
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
315
+  background-image:         linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
316
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
317
+  background-repeat: repeat-x;
318
+  border-color: #9acfea;
319
+}
320
+.alert-warning {
321
+  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
322
+  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
323
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
324
+  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
325
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
326
+  background-repeat: repeat-x;
327
+  border-color: #f5e79e;
328
+}
329
+.alert-danger {
330
+  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
331
+  background-image:      -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
332
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
333
+  background-image:         linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
334
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
335
+  background-repeat: repeat-x;
336
+  border-color: #dca7a7;
337
+}
338
+.progress {
339
+  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
340
+  background-image:      -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
341
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
342
+  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
343
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
344
+  background-repeat: repeat-x;
345
+}
346
+.progress-bar {
347
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
348
+  background-image:      -o-linear-gradient(top, #337ab7 0%, #286090 100%);
349
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
350
+  background-image:         linear-gradient(to bottom, #337ab7 0%, #286090 100%);
351
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
352
+  background-repeat: repeat-x;
353
+}
354
+.progress-bar-success {
355
+  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
356
+  background-image:      -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
357
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
358
+  background-image:         linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
359
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
360
+  background-repeat: repeat-x;
361
+}
362
+.progress-bar-info {
363
+  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
364
+  background-image:      -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
365
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
366
+  background-image:         linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
367
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
368
+  background-repeat: repeat-x;
369
+}
370
+.progress-bar-warning {
371
+  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
372
+  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
373
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
374
+  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
375
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
376
+  background-repeat: repeat-x;
377
+}
378
+.progress-bar-danger {
379
+  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
380
+  background-image:      -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
381
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
382
+  background-image:         linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
383
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
384
+  background-repeat: repeat-x;
385
+}
386
+.progress-bar-striped {
387
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
388
+  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
389
+  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
390
+}
391
+.list-group {
392
+  border-radius: 4px;
393
+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
394
+          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
395
+}
396
+.list-group-item.active,
397
+.list-group-item.active:hover,
398
+.list-group-item.active:focus {
399
+  text-shadow: 0 -1px 0 #286090;
400
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
401
+  background-image:      -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
402
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
403
+  background-image:         linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
404
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
405
+  background-repeat: repeat-x;
406
+  border-color: #2b669a;
407
+}
408
+.list-group-item.active .badge,
409
+.list-group-item.active:hover .badge,
410
+.list-group-item.active:focus .badge {
411
+  text-shadow: none;
412
+}
413
+.panel {
414
+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
415
+          box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
416
+}
417
+.panel-default > .panel-heading {
418
+  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
419
+  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
420
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
421
+  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
422
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
423
+  background-repeat: repeat-x;
424
+}
425
+.panel-primary > .panel-heading {
426
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
427
+  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
428
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
429
+  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
430
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
431
+  background-repeat: repeat-x;
432
+}
433
+.panel-success > .panel-heading {
434
+  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
435
+  background-image:      -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
436
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
437
+  background-image:         linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
438
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
439
+  background-repeat: repeat-x;
440
+}
441
+.panel-info > .panel-heading {
442
+  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
443
+  background-image:      -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
444
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
445
+  background-image:         linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
446
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
447
+  background-repeat: repeat-x;
448
+}
449
+.panel-warning > .panel-heading {
450
+  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
451
+  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
452
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
453
+  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
454
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
455
+  background-repeat: repeat-x;
456
+}
457
+.panel-danger > .panel-heading {
458
+  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
459
+  background-image:      -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
460
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
461
+  background-image:         linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
462
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
463
+  background-repeat: repeat-x;
464
+}
465
+.well {
466
+  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
467
+  background-image:      -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
468
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
469
+  background-image:         linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
470
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
471
+  background-repeat: repeat-x;
472
+  border-color: #dcdcdc;
473
+  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
474
+          box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
475
+}
476
+/*# sourceMappingURL=bootstrap-theme.css.map */

+ 1
- 0
sampleProject/public/assets/css/bootstrap-theme.css.map
File diff suppressed because it is too large
View File


+ 5
- 0
sampleProject/public/assets/css/bootstrap-theme.min.css
File diff suppressed because it is too large
View File


+ 10
- 0
sampleProject/public/assets/css/bootstrap-timepicker.min.css View File

@@ -0,0 +1,10 @@
1
+/*!
2
+ * Timepicker Component for Twitter Bootstrap
3
+ *
4
+ * Copyright 2013 Joris de Wit
5
+ *
6
+ * Contributors https://github.com/jdewit/bootstrap-timepicker/graphs/contributors
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */.bootstrap-timepicker{position:relative}.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu{left:auto;right:0}.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:before{left:auto;right:12px}.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:after{left:auto;right:13px}.bootstrap-timepicker .add-on{cursor:pointer}.bootstrap-timepicker .add-on i{display:inline-block;width:16px;height:16px}.bootstrap-timepicker-widget.dropdown-menu{padding:2px 3px 2px 2px}.bootstrap-timepicker-widget.dropdown-menu.open{display:inline-block}.bootstrap-timepicker-widget.dropdown-menu:before{border-bottom:7px solid rgba(0,0,0,0.2);border-left:7px solid transparent;border-right:7px solid transparent;content:"";display:inline-block;left:9px;position:absolute;top:-7px}.bootstrap-timepicker-widget.dropdown-menu:after{border-bottom:6px solid #fff;border-left:6px solid transparent;border-right:6px solid transparent;content:"";display:inline-block;left:10px;position:absolute;top:-6px}.bootstrap-timepicker-widget a.btn,.bootstrap-timepicker-widget input{border-radius:4px}.bootstrap-timepicker-widget table{width:100%;margin:0}.bootstrap-timepicker-widget table td{text-align:center;height:30px;margin:0;padding:2px}.bootstrap-timepicker-widget table td:not(.separator){min-width:30px}.bootstrap-timepicker-widget table td span{width:100%}.bootstrap-timepicker-widget table td a{border:1px transparent solid;width:100%;display:inline-block;margin:0;padding:8px 0;outline:0;color:#333}.bootstrap-timepicker-widget table td a:hover{text-decoration:none;background-color:#eee;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border-color:#ddd}.bootstrap-timepicker-widget table td a i{margin-top:2px}.bootstrap-timepicker-widget table td input{width:25px;margin:0;text-align:center}.bootstrap-timepicker-widget .modal-content{padding:4px}@media(min-width:767px){.bootstrap-timepicker-widget.modal{width:200px;margin-left:-100px}}@media(max-width:767px){.bootstrap-timepicker{width:100%}.bootstrap-timepicker .dropdown-menu{width:100%}}

+ 98
- 0
sampleProject/public/assets/css/bootstrap-wysihtml5.css View File

@@ -0,0 +1,98 @@
1
+ul.wysihtml5-toolbar {
2
+	margin: 0;
3
+	padding: 0;
4
+	display: block;
5
+}
6
+
7
+ul.wysihtml5-toolbar::after {
8
+	clear: both;
9
+	display: table;
10
+	content: "";
11
+}
12
+
13
+ul.wysihtml5-toolbar > li {
14
+	float: left;
15
+	display: list-item;
16
+	list-style: none;
17
+	margin: 0 5px 10px 0;
18
+}
19
+
20
+ul.wysihtml5-toolbar a[data-wysihtml5-command=bold] {
21
+	font-weight: bold;
22
+}
23
+
24
+ul.wysihtml5-toolbar a[data-wysihtml5-command=italic] {
25
+	font-style: italic;
26
+}
27
+
28
+ul.wysihtml5-toolbar a[data-wysihtml5-command=underline] {
29
+	text-decoration: underline;
30
+}
31
+
32
+ul.wysihtml5-toolbar a.btn.wysihtml5-command-active {
33
+	background-image: none;
34
+	background-color: #fff;
35
+	outline: 0;
36
+}
37
+
38
+ul.wysihtml5-commands-disabled .dropdown-menu {
39
+	display: none !important;
40
+}
41
+
42
+ul.wysihtml5-toolbar div.wysihtml5-colors {
43
+  display:block;
44
+  width: 50px;
45
+  height: 20px;
46
+  margin-top: 2px;
47
+  margin-left: 5px;
48
+  position: absolute;
49
+  pointer-events: none;
50
+}
51
+
52
+ul.wysihtml5-toolbar a.wysihtml5-colors-title {
53
+  padding-left: 70px;
54
+}
55
+
56
+ul.wysihtml5-toolbar div[data-wysihtml5-command-value="black"] {
57
+  background: black !important;
58
+}
59
+
60
+ul.wysihtml5-toolbar div[data-wysihtml5-command-value="silver"] {
61
+  background: silver !important;
62
+}
63
+
64
+ul.wysihtml5-toolbar div[data-wysihtml5-command-value="gray"] {
65
+  background: gray !important;
66
+}
67
+
68
+ul.wysihtml5-toolbar div[data-wysihtml5-command-value="maroon"] {
69
+  background: maroon !important;
70
+}
71
+
72
+ul.wysihtml5-toolbar div[data-wysihtml5-command-value="red"] {
73
+  background: red !important;
74
+}
75
+
76
+ul.wysihtml5-toolbar div[data-wysihtml5-command-value="purple"] {
77
+  background: purple !important;
78
+}
79
+
80
+ul.wysihtml5-toolbar div[data-wysihtml5-command-value="green"] {
81
+  background: green !important;
82
+}
83
+
84
+ul.wysihtml5-toolbar div[data-wysihtml5-command-value="olive"] {
85
+  background: olive !important;
86
+}
87
+
88
+ul.wysihtml5-toolbar div[data-wysihtml5-command-value="navy"] {
89
+  background: navy !important;
90
+}
91
+
92
+ul.wysihtml5-toolbar div[data-wysihtml5-command-value="blue"] {
93
+  background: blue !important;
94
+}
95
+
96
+ul.wysihtml5-toolbar div[data-wysihtml5-command-value="orange"] {
97
+  background: orange !important;
98
+}

+ 6585
- 0
sampleProject/public/assets/css/bootstrap.css
File diff suppressed because it is too large
View File


+ 1
- 0
sampleProject/public/assets/css/bootstrap.css.map
File diff suppressed because it is too large
View File


+ 5
- 0
sampleProject/public/assets/css/bootstrap.min.css
File diff suppressed because it is too large
View File


+ 264
- 0
sampleProject/public/assets/css/codemirror/codemirror.css View File

@@ -0,0 +1,264 @@
1
+/* BASICS */
2
+
3
+.CodeMirror {
4
+  /* Set height, width, borders, and global font properties here */
5
+  font-family: monospace;
6
+  height: 300px;
7
+}
8
+.CodeMirror-scroll {
9
+  /* Set scrolling behaviour here */
10
+  overflow: auto;
11
+}
12
+
13
+/* PADDING */
14
+
15
+.CodeMirror-lines {
16
+  padding: 4px 0; /* Vertical padding around content */
17
+}
18
+.CodeMirror pre {
19
+  padding: 0 4px; /* Horizontal padding of content */
20
+}
21
+
22
+.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
23
+  background-color: white; /* The little square between H and V scrollbars */
24
+}
25
+
26
+/* GUTTER */
27
+
28
+.CodeMirror-gutters {
29
+  border-right: 1px solid #ddd;
30
+  background-color: #f7f7f7;
31
+  white-space: nowrap;
32
+}
33
+.CodeMirror-linenumbers {}
34
+.CodeMirror-linenumber {
35
+  padding: 0 3px 0 5px;
36
+  min-width: 20px;
37
+  text-align: right;
38
+  color: #999;
39
+  -moz-box-sizing: content-box;
40
+  box-sizing: content-box;
41
+}
42
+
43
+/* CURSOR */
44
+
45
+.CodeMirror div.CodeMirror-cursor {
46
+  border-left: 1px solid black;
47
+  z-index: 3;
48
+}
49
+/* Shown when moving in bi-directional text */
50
+.CodeMirror div.CodeMirror-secondarycursor {
51
+  border-left: 1px solid silver;
52
+}
53
+.CodeMirror.cm-keymap-fat-cursor div.CodeMirror-cursor {
54
+  width: auto;
55
+  border: 0;
56
+  background: #7e7;
57
+  z-index: 1;
58
+}
59
+/* Can style cursor different in overwrite (non-insert) mode */
60
+.CodeMirror div.CodeMirror-cursor.CodeMirror-overwrite {}
61
+
62
+.cm-tab { display: inline-block; }
63
+
64
+.CodeMirror-ruler {
65
+  border-left: 1px solid #ccc;
66
+  position: absolute;
67
+}
68
+
69
+/* DEFAULT THEME */
70
+
71
+.cm-s-default .cm-keyword {color: #708;}
72
+.cm-s-default .cm-atom {color: #219;}
73
+.cm-s-default .cm-number {color: #164;}
74
+.cm-s-default .cm-def {color: #00f;}
75
+.cm-s-default .cm-variable {color: black;}
76
+.cm-s-default .cm-variable-2 {color: #05a;}
77
+.cm-s-default .cm-variable-3 {color: #085;}
78
+.cm-s-default .cm-property {color: black;}
79
+.cm-s-default .cm-operator {color: black;}
80
+.cm-s-default .cm-comment {color: #a50;}
81
+.cm-s-default .cm-string {color: #a11;}
82
+.cm-s-default .cm-string-2 {color: #f50;}
83
+.cm-s-default .cm-meta {color: #555;}
84
+.cm-s-default .cm-qualifier {color: #555;}
85
+.cm-s-default .cm-builtin {color: #30a;}
86
+.cm-s-default .cm-bracket {color: #997;}
87
+.cm-s-default .cm-tag {color: #170;}
88
+.cm-s-default .cm-attribute {color: #00c;}
89
+.cm-s-default .cm-header {color: blue;}
90
+.cm-s-default .cm-quote {color: #090;}
91
+.cm-s-default .cm-hr {color: #999;}
92
+.cm-s-default .cm-link {color: #00c;}
93
+
94
+.cm-negative {color: #d44;}
95
+.cm-positive {color: #292;}
96
+.cm-header, .cm-strong {font-weight: bold;}
97
+.cm-em {font-style: italic;}
98
+.cm-link {text-decoration: underline;}
99
+
100
+.cm-s-default .cm-error {color: #f00;}
101
+.cm-invalidchar {color: #f00;}
102
+
103
+div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}
104
+div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
105
+.CodeMirror-activeline-background {background: #e8f2ff;}
106
+
107
+/* STOP */
108
+
109
+/* The rest of this file contains styles related to the mechanics of
110
+   the editor. You probably shouldn't touch them. */
111
+
112
+.CodeMirror {
113
+  line-height: 1;
114
+  position: relative;
115
+  overflow: hidden;
116
+  background: white;
117
+  color: black;
118
+}
119
+
120
+.CodeMirror-scroll {
121
+  /* 30px is the magic margin used to hide the element's real scrollbars */
122
+  /* See overflow: hidden in .CodeMirror */
123
+  margin-bottom: -30px; margin-right: -30px;
124
+  padding-bottom: 30px;
125
+  height: 100%;
126
+  outline: none; /* Prevent dragging from highlighting the element */
127
+  position: relative;
128
+  -moz-box-sizing: content-box;
129
+  box-sizing: content-box;
130
+}
131
+.CodeMirror-sizer {
132
+  position: relative;
133
+  border-right: 30px solid transparent;
134
+  -moz-box-sizing: content-box;
135
+  box-sizing: content-box;
136
+}
137
+
138
+/* The fake, visible scrollbars. Used to force redraw during scrolling
139
+   before actuall scrolling happens, thus preventing shaking and
140
+   flickering artifacts. */
141
+.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
142
+  position: absolute;
143
+  z-index: 6;
144
+  display: none;
145
+}
146
+.CodeMirror-vscrollbar {
147
+  right: 0; top: 0;
148
+  overflow-x: hidden;
149
+  overflow-y: scroll;
150
+}
151
+.CodeMirror-hscrollbar {
152
+  bottom: 0; left: 0;
153
+  overflow-y: hidden;
154
+  overflow-x: scroll;
155
+}
156
+.CodeMirror-scrollbar-filler {
157
+  right: 0; bottom: 0;
158
+}
159
+.CodeMirror-gutter-filler {
160
+  left: 0; bottom: 0;
161
+}
162
+
163
+.CodeMirror-gutters {
164
+  position: absolute; left: 0; top: 0;
165
+  padding-bottom: 30px;
166
+  z-index: 3;
167
+}
168
+.CodeMirror-gutter {
169
+  white-space: normal;
170
+  height: 100%;
171
+  -moz-box-sizing: content-box;
172
+  box-sizing: content-box;
173
+  padding-bottom: 30px;
174
+  margin-bottom: -32px;
175
+  display: inline-block;
176
+  /* Hack to make IE7 behave */
177
+  *zoom:1;
178
+  *display:inline;
179
+}
180
+.CodeMirror-gutter-elt {
181
+  position: absolute;
182
+  cursor: default;
183
+  z-index: 4;
184
+}
185
+
186
+.CodeMirror-lines {
187
+  cursor: text;
188
+}
189
+.CodeMirror pre {
190
+  /* Reset some styles that the rest of the page might have set */
191
+  -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;
192
+  border-width: 0;
193
+  background: transparent;
194
+  font-family: inherit;
195
+  font-size: inherit;
196
+  margin: 0;
197
+  white-space: pre;
198
+  word-wrap: normal;
199
+  line-height: inherit;
200
+  color: inherit;
201
+  z-index: 2;
202
+  position: relative;
203
+  overflow: visible;
204
+}
205
+.CodeMirror-wrap pre {
206
+  word-wrap: break-word;
207
+  white-space: pre-wrap;
208
+  word-break: normal;
209
+}
210
+
211
+.CodeMirror-linebackground {
212
+  position: absolute;
213
+  left: 0; right: 0; top: 0; bottom: 0;
214
+  z-index: 0;
215
+}
216
+
217
+.CodeMirror-linewidget {
218
+  position: relative;
219
+  z-index: 2;
220
+  overflow: auto;
221
+}
222
+
223
+.CodeMirror-widget {}
224
+
225
+.CodeMirror-wrap .CodeMirror-scroll {
226
+  overflow-x: hidden;
227
+}
228
+
229
+.CodeMirror-measure {
230
+  position: absolute;
231
+  width: 100%;
232
+  height: 0;
233
+  overflow: hidden;
234
+  visibility: hidden;
235
+}
236
+.CodeMirror-measure pre { position: static; }
237
+
238
+.CodeMirror div.CodeMirror-cursor {
239
+  position: absolute;
240
+  visibility: hidden;
241
+  border-right: none;
242
+  width: 0;
243
+}
244
+.CodeMirror-focused div.CodeMirror-cursor {
245
+  visibility: visible;
246
+}
247
+
248
+.CodeMirror-selected { background: #d9d9d9; }
249
+.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }
250
+
251
+.cm-searching {
252
+  background: #ffa;
253
+  background: rgba(255, 255, 0, .4);
254
+}
255
+
256
+/* IE7 hack to prevent it from returning funny offsetTops on the spans */
257
+.CodeMirror span { *vertical-align: text-bottom; }
258
+
259
+@media print {
260
+  /* Hide the cursor when printing */
261
+  .CodeMirror div.CodeMirror-cursor {
262
+    visibility: hidden;
263
+  }
264
+}

+ 13
- 0
sampleProject/public/assets/css/codemirror/index.html View File

@@ -0,0 +1,13 @@
1
+<!DOCTYPE html>
2
+
3
+<html>
4
+<head>
5
+    <title>Forbidden</title>
6
+</head>
7
+
8
+<body>
9
+
10
+<h2>Forbidden</h2>
11
+
12
+</body>
13
+</html>

+ 75
- 0
sampleProject/public/assets/css/codemirror/theme/ambiance.css View File

@@ -0,0 +1,75 @@
1
+/* ambiance theme for codemirror */
2
+
3
+/* Color scheme */
4
+
5
+.cm-s-ambiance .cm-keyword { color: #cda869; }
6
+.cm-s-ambiance .cm-atom { color: #CF7EA9; }
7
+.cm-s-ambiance .cm-number { color: #78CF8A; }
8
+.cm-s-ambiance .cm-def { color: #aac6e3; }
9
+.cm-s-ambiance .cm-variable { color: #ffb795; }
10
+.cm-s-ambiance .cm-variable-2 { color: #eed1b3; }
11
+.cm-s-ambiance .cm-variable-3 { color: #faded3; }
12
+.cm-s-ambiance .cm-property { color: #eed1b3; }
13
+.cm-s-ambiance .cm-operator {color: #fa8d6a;}
14
+.cm-s-ambiance .cm-comment { color: #555; font-style:italic; }
15
+.cm-s-ambiance .cm-string { color: #8f9d6a; }
16
+.cm-s-ambiance .cm-string-2 { color: #9d937c; }
17
+.cm-s-ambiance .cm-meta { color: #D2A8A1; }
18
+.cm-s-ambiance .cm-qualifier { color: yellow; }
19
+.cm-s-ambiance .cm-builtin { color: #9999cc; }
20
+.cm-s-ambiance .cm-bracket { color: #24C2C7; }
21
+.cm-s-ambiance .cm-tag { color: #fee4ff }
22
+.cm-s-ambiance .cm-attribute {  color: #9B859D; }
23
+.cm-s-ambiance .cm-header {color: blue;}
24
+.cm-s-ambiance .cm-quote { color: #24C2C7; }
25
+.cm-s-ambiance .cm-hr { color: pink; }
26
+.cm-s-ambiance .cm-link { color: #F4C20B; }
27
+.cm-s-ambiance .cm-special { color: #FF9D00; }
28
+.cm-s-ambiance .cm-error { color: #AF2018; }
29
+
30
+.cm-s-ambiance .CodeMirror-matchingbracket { color: #0f0; }
31
+.cm-s-ambiance .CodeMirror-nonmatchingbracket { color: #f22; }
32
+
33
+.cm-s-ambiance .CodeMirror-selected {
34
+  background: rgba(255, 255, 255, 0.15);
35
+}
36
+.cm-s-ambiance.CodeMirror-focused .CodeMirror-selected {
37
+  background: rgba(255, 255, 255, 0.10);
38
+}
39
+
40
+/* Editor styling */
41
+
42
+.cm-s-ambiance.CodeMirror {
43
+  line-height: 1.40em;
44
+  font-family: Monaco, Menlo,"Andale Mono","lucida console","Courier New",monospace !important;
45
+  color: #E6E1DC;
46
+  background-color: #202020;
47
+  -webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.5);
48
+  -moz-box-shadow: inset 0 0 5px rgba(0,0,0,0.5);
49
+  box-shadow: inset 0 0 5px rgba(0,0,0,0.5);
50
+}
51
+
52
+.cm-s-ambiance .CodeMirror-gutters {
53
+  background: #3D3D3D;
54
+  border-right: 1px solid #4D4D4D;
55
+  box-shadow: 0 10px 5px rgba(0,0,0,0.5);
56
+}
57
+
58
+.cm-s-ambiance .CodeMirror-linenumber {
59
+  text-shadow: 0px 1px 1px #4d4d4d;
60
+  color: #222;
61
+  padding: 0 5px;
62
+}
63
+
64
+.cm-s-ambiance .CodeMirror-lines .CodeMirror-cursor {
65
+  border-left: 1px solid #7991E8;
66
+}
67
+
68
+.cm-s-ambiance .CodeMirror-activeline-background {
69
+  background: none repeat scroll 0% 0% rgba(255, 255, 255, 0.031);
70
+}
71
+
72
+.cm-s-ambiance.CodeMirror,
73
+.cm-s-ambiance .CodeMirror-gutters {
74
+  background: #333;
75
+}

+ 13
- 0
sampleProject/public/assets/css/codemirror/theme/index.html View File

@@ -0,0 +1,13 @@
1
+<!DOCTYPE html>
2
+
3
+<html>
4
+<head>
5
+    <title>Forbidden</title>
6
+</head>
7
+
8
+<body>
9
+
10
+<h2>Forbidden</h2>
11
+
12
+</body>
13
+</html>

+ 174
- 0
sampleProject/public/assets/css/colorpicker.css View File

@@ -0,0 +1,174 @@
1
+.colorpicker {
2
+	width: 356px;
3
+	height: 176px;
4
+	overflow: hidden;
5
+	position: absolute;
6
+	background: url(../images/colorpicker/colorpicker_background.png);
7
+	font-family: Arial, Helvetica, sans-serif;
8
+	display: none;
9
+}
10
+.colorpicker_color {
11
+	width: 150px;
12
+	height: 150px;
13
+	left: 14px;
14
+	top: 13px;
15
+	position: absolute;
16
+	background: #f00;
17
+	overflow: hidden;
18
+	cursor: crosshair;
19
+}
20
+.colorpicker_color div {
21
+	position: absolute;
22
+	top: 0;
23
+	left: 0;
24
+	width: 150px;
25
+	height: 150px;
26
+	background: url(../images/colorpicker/colorpicker_overlay.png);
27
+}
28
+.colorpicker_color div div {
29
+	position: absolute;
30
+	top: 0;
31
+	left: 0;
32
+	width: 11px;
33
+	height: 11px;
34
+	overflow: hidden;
35
+	background: url(../images/colorpicker/colorpicker_select.gif);
36
+	margin: -5px 0 0 -5px;
37
+}
38
+.colorpicker_hue {
39
+	position: absolute;
40
+	top: 13px;
41
+	left: 171px;
42
+	width: 35px;
43
+	height: 150px;
44
+	cursor: n-resize;
45
+}
46
+.colorpicker_hue div {
47
+	position: absolute;
48
+	width: 35px;
49
+	height: 9px;
50
+	overflow: hidden;
51
+	background: url(../images/colorpicker/colorpicker_indic.gif) left top;
52
+	margin: -4px 0 0 0;
53
+	left: 0px;
54
+}
55
+.colorpicker_new_color {
56
+	position: absolute;
57
+	width: 60px;
58
+	height: 30px;
59
+	left: 213px;
60
+	top: 13px;
61
+	background: #f00;
62
+}
63
+.colorpicker_current_color {
64
+	position: absolute;
65
+	width: 60px;
66
+	height: 30px;
67
+	left: 283px;
68
+	top: 13px;
69
+	background: #f00;
70
+}
71
+.colorpicker input {
72
+	background-color: transparent !important;
73
+	border: 1px solid transparent !important;
74
+	position: absolute !important;
75
+	font-size: 10px !important;
76
+	font-family: Arial, Helvetica, sans-serif !important;
77
+	color: #898989 !important;
78
+	top: 4px !important;
79
+	right: 11px !important;
80
+	text-align: right !important;
81
+	margin: 0 !important;
82
+	padding: 0 !important;
83
+	height: 11px !important;
84
+	-moz-box-shadow: none !important;
85
+	-webkit-box-shadow: none !important;
86
+	box-shadow: none !important;
87
+}
88
+.colorpicker_hex {
89
+	position: absolute;
90
+	width: 72px;
91
+	height: 22px;
92
+	background: url(../images/colorpicker/colorpicker_hex.png) top;
93
+	left: 212px;
94
+	top: 142px;
95
+}
96
+.colorpicker_hex input {
97
+	right: 6px;
98
+}
99
+.colorpicker_field {
100
+	height: 22px;
101
+	width: 62px;
102
+	background-position: top;
103
+	position: absolute;
104
+}
105
+.colorpicker_field span {
106
+	position: absolute;
107
+	width: 12px;
108
+	height: 22px;
109
+	overflow: hidden;
110
+	top: 0;
111
+	right: 0;
112
+	cursor: n-resize;
113
+}
114
+.colorpicker_rgb_r {
115
+	background-image: url(../images/colorpicker/colorpicker_rgb_r.png);
116
+	top: 52px;
117
+	left: 212px;
118
+}
119
+.colorpicker_rgb_g {
120
+	background-image: url(../images/colorpicker/colorpicker_rgb_g.png);
121
+	top: 82px;
122
+	left: 212px;
123
+}
124
+.colorpicker_rgb_b {
125
+	background-image: url(../images/colorpicker/colorpicker_rgb_b.png);
126
+	top: 112px;
127
+	left: 212px;
128
+}
129
+.colorpicker_hsb_h {
130
+	background-image: url(../images/colorpicker/colorpicker_hsb_h.png);
131
+	top: 52px;
132
+	left: 282px;
133
+}
134
+.colorpicker_hsb_s {
135
+	background-image: url(../images/colorpicker/colorpicker_hsb_s.png);
136
+	top: 82px;
137
+	left: 282px;
138
+}
139
+.colorpicker_hsb_b {
140
+	background-image: url(../images/colorpicker/colorpicker_hsb_b.png);
141
+	top: 112px;
142
+	left: 282px;
143
+}
144
+.colorpicker_submit {
145
+	position: absolute;
146
+	width: 22px;
147
+	height: 22px;
148
+	background: url(../images/colorpicker/colorpicker_submit.png) top;
149
+	left: 322px;
150
+	top: 142px;
151
+	overflow: hidden;
152
+}
153
+.colorpicker_focus {
154
+	background-position: center;
155
+}
156
+.colorpicker_hex.colorpicker_focus {
157
+	background-position: bottom;
158
+}
159
+.colorpicker_submit.colorpicker_focus {
160
+	background-position: bottom;
161
+}
162
+.colorpicker_slider {
163
+	background-position: bottom;
164
+}
165
+
166
+.colorselector { 
167
+	display: inline-block; height: 28px; width: 28x; vertical-align: middle; 
168
+	position: relative; vertical-align: middle; margin-left: 5px; 
169
+}
170
+.colorselector span { 
171
+	display: block; height: 28px; width: 28px; position: absolute; left: 0; top: 0; cursor: pointer;
172
+	background: #000 url(../images/colorpicker/select2.png) no-repeat -4px -4px; 
173
+}
174
+

+ 2418
- 0
sampleProject/public/assets/css/custom.css
File diff suppressed because it is too large
View File


+ 400
- 0
sampleProject/public/assets/css/dropzone.css View File

@@ -0,0 +1,400 @@
1
+/* The MIT License */
2
+.dropzone,
3
+.dropzone *,
4
+.dropzone-previews,
5
+.dropzone-previews * {
6
+  -webkit-box-sizing: border-box;
7
+  -moz-box-sizing: border-box;
8
+  box-sizing: border-box;
9
+}
10
+.dropzone {
11
+  position: relative;
12
+  border: 1px #ccc;
13
+  background: #E4E7EA;
14
+  padding: 1em;
15
+}
16
+.dropzone.dz-clickable {
17
+  cursor: pointer;
18
+}
19
+.dropzone.dz-clickable .dz-message,
20
+.dropzone.dz-clickable .dz-message span {
21
+  cursor: pointer;
22
+}
23
+.dropzone.dz-clickable * {
24
+  cursor: default;
25
+}
26
+.dropzone .dz-message {
27
+  opacity: 1;
28
+  -ms-filter: none;
29
+  filter: none;
30
+}
31
+.dropzone.dz-drag-hover {
32
+  border: 2px dashed #ccc;
33
+  background-color: #e9ecef;
34
+}
35
+.dropzone.dz-started .dz-message {
36
+  display: none;
37
+}
38
+.dropzone .dz-preview,
39
+.dropzone-previews .dz-preview {
40
+  background: rgba(255,255,255,0.8);
41
+  position: relative;
42
+  display: inline-block;
43
+  margin: 17px;
44
+  vertical-align: top;
45
+  border: 1px solid #ccc;
46
+  padding: 6px 6px 6px 6px;
47
+}
48
+.dropzone .dz-preview.dz-file-preview [data-dz-thumbnail],
49
+.dropzone-previews .dz-preview.dz-file-preview [data-dz-thumbnail] {
50
+  display: none;
51
+}
52
+.dropzone .dz-preview .dz-details,
53
+.dropzone-previews .dz-preview .dz-details {
54
+  width: 100px;
55
+  height: 100px;
56
+  position: relative;
57
+  background: #ebebeb;
58
+  padding: 5px;
59
+  margin-bottom: 22px;
60
+}
61
+.dropzone .dz-preview .dz-details .dz-filename,
62
+.dropzone-previews .dz-preview .dz-details .dz-filename {
63
+  overflow: hidden;
64
+  height: 100%;
65
+}
66
+.dropzone .dz-preview .dz-details img,
67
+.dropzone-previews .dz-preview .dz-details img {
68
+  position: absolute;
69
+  top: 0;
70
+  left: 0;
71
+  width: 100px;
72
+  height: 100px;
73
+}
74
+.dropzone .dz-preview .dz-details .dz-size,
75
+.dropzone-previews .dz-preview .dz-details .dz-size {
76
+  position: absolute;
77
+  bottom: -28px;
78
+  left: 3px;
79
+  height: 28px;
80
+  line-height: 28px;
81
+}
82
+.dropzone .dz-preview.dz-error .dz-error-mark,
83
+.dropzone-previews .dz-preview.dz-error .dz-error-mark {
84
+  display: block;
85
+}
86
+.dropzone .dz-preview.dz-success .dz-success-mark,
87
+.dropzone-previews .dz-preview.dz-success .dz-success-mark {
88
+  display: block;
89
+}
90
+.dropzone .dz-preview:hover .dz-details img,
91
+.dropzone-previews .dz-preview:hover .dz-details img {
92
+  display: none;
93
+}
94
+.dropzone .dz-preview .dz-success-mark,
95
+.dropzone-previews .dz-preview .dz-success-mark,
96
+.dropzone .dz-preview .dz-error-mark,
97
+.dropzone-previews .dz-preview .dz-error-mark {
98
+  display: none;
99
+  position: absolute;
100
+  width: 40px;
101
+  height: 40px;
102
+  font-size: 30px;
103
+  text-align: center;
104
+  right: -10px;
105
+  top: -10px;
106
+}
107
+.dropzone .dz-preview .dz-success-mark,
108
+.dropzone-previews .dz-preview .dz-success-mark {
109
+  color: #8cc657;
110
+}
111
+.dropzone .dz-preview .dz-error-mark,
112
+.dropzone-previews .dz-preview .dz-error-mark {
113
+  color: #ee162d;
114
+}
115
+.dropzone .dz-preview .dz-progress,
116
+.dropzone-previews .dz-preview .dz-progress {
117
+  position: absolute;
118
+  top: 100px;
119
+  left: 6px;
120
+  right: 6px;
121
+  height: 6px;
122
+  background: #d7d7d7;
123
+  display: none;
124
+}
125
+.dropzone .dz-preview .dz-progress .dz-upload,
126
+.dropzone-previews .dz-preview .dz-progress .dz-upload {
127
+  position: absolute;
128
+  top: 0;
129
+  bottom: 0;
130
+  left: 0;
131
+  width: 0%;
132
+  background-color: #8cc657;
133
+}
134
+.dropzone .dz-preview.dz-processing .dz-progress,
135
+.dropzone-previews .dz-preview.dz-processing .dz-progress {
136
+  display: block;
137
+}
138
+.dropzone .dz-preview .dz-error-message,
139
+.dropzone-previews .dz-preview .dz-error-message {
140
+  display: none;
141
+  position: absolute;
142
+  top: -5px;
143
+  left: -20px;
144
+  background: rgba(245,245,245,0.8);
145
+  padding: 8px 10px;
146
+  color: #800;
147
+  min-width: 140px;
148
+  max-width: 500px;
149
+  z-index: 500;
150
+}
151
+.dropzone .dz-preview:hover.dz-error .dz-error-message,
152
+.dropzone-previews .dz-preview:hover.dz-error .dz-error-message {
153
+  display: block;
154
+}
155
+.dropzone {
156
+  border: 1px solid #ccc;
157
+  min-height: 360px;
158
+  -moz-border-radius: 2px;
159
+  -webkit-border-radius: 2px;
160
+  border-radius: 2px;
161
+  background: #E4E7EA;
162
+  padding: 23px;
163
+}
164
+.dropzone .dz-default.dz-message {
165
+  opacity: 1;
166
+  -ms-filter: none;
167
+  filter: none;
168
+  -webkit-transition: opacity 0.3s ease-in-out;
169
+  -moz-transition: opacity 0.3s ease-in-out;
170
+  -o-transition: opacity 0.3s ease-in-out;
171
+  -ms-transition: opacity 0.3s ease-in-out;
172
+  transition: opacity 0.3s ease-in-out;
173
+  background-image: url("../images/uploadfile.png");
174
+  background-repeat: no-repeat;
175
+  background-position: 0 0;
176
+  position: absolute;
177
+  width: 256px;
178
+  height: 256px;
179
+  margin-left: -128px;
180
+  margin-top: -128px;
181
+  top: 50%;
182
+  left: 50%;
183
+}
184
+.dropzone .dz-default.dz-message span {
185
+  display: none;
186
+}
187
+.dropzone.dz-square .dz-default.dz-message {
188
+  background-position: 0 -123px;
189
+  width: 268px;
190
+  margin-left: -134px;
191
+  height: 174px;
192
+  margin-top: -87px;
193
+}
194
+.dropzone.dz-drag-hover .dz-message {
195
+  opacity: 0.15;
196
+  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=15)";
197
+  filter: alpha(opacity=15);
198
+}
199
+.dropzone.dz-started .dz-message {
200
+  display: block;
201
+  opacity: 0;
202
+  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
203
+  filter: alpha(opacity=0);
204
+}
205
+.dropzone .dz-preview,
206
+.dropzone-previews .dz-preview {
207
+  font-size: 14px;
208
+}
209
+.dropzone .dz-preview.dz-image-preview:hover .dz-details img,
210
+.dropzone-previews .dz-preview.dz-image-preview:hover .dz-details img {
211
+  display: block;
212
+  opacity: 0.1;
213
+  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=10)";
214
+  filter: alpha(opacity=10);
215
+}
216
+.dropzone .dz-preview.dz-success .dz-success-mark,
217
+.dropzone-previews .dz-preview.dz-success .dz-success-mark {
218
+  opacity: 1;
219
+  -ms-filter: none;
220
+  filter: none;
221
+}
222
+.dropzone .dz-preview.dz-error .dz-error-mark,
223
+.dropzone-previews .dz-preview.dz-error .dz-error-mark {
224
+  opacity: 1;
225
+  -ms-filter: none;
226
+  filter: none;
227
+}
228
+.dropzone .dz-preview.dz-error .dz-progress .dz-upload,
229
+.dropzone-previews .dz-preview.dz-error .dz-progress .dz-upload {
230
+  background: #ee1e2d;
231
+}
232
+.dropzone .dz-preview .dz-error-mark,
233
+.dropzone-previews .dz-preview .dz-error-mark,
234
+.dropzone .dz-preview .dz-success-mark,
235
+.dropzone-previews .dz-preview .dz-success-mark {
236
+  display: block;
237
+  opacity: 0;
238
+  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
239
+  filter: alpha(opacity=0);
240
+  -webkit-transition: opacity 0.4s ease-in-out;
241
+  -moz-transition: opacity 0.4s ease-in-out;
242
+  -o-transition: opacity 0.4s ease-in-out;
243
+  -ms-transition: opacity 0.4s ease-in-out;
244
+  transition: opacity 0.4s ease-in-out;
245
+  background-image: url("../images/spritemap.png");
246
+  background-repeat: no-repeat;
247
+}
248
+@media all and (-webkit-min-device-pixel-ratio:1.5),(min--moz-device-pixel-ratio:1.5),(-o-min-device-pixel-ratio:1.5/1),(min-device-pixel-ratio:1.5),(min-resolution:138dpi),(min-resolution:1.5dppx) {
249
+  .dropzone .dz-preview .dz-error-mark,
250
+  .dropzone-previews .dz-preview .dz-error-mark,
251
+  .dropzone .dz-preview .dz-success-mark,
252
+  .dropzone-previews .dz-preview .dz-success-mark {
253
+    background-image: url("../images/spritemap@2x.png");
254
+    -webkit-background-size: 428px 406px;
255
+    -moz-background-size: 428px 406px;
256
+    background-size: 428px 406px;
257
+  }
258
+}
259
+.dropzone .dz-preview .dz-error-mark span,
260
+.dropzone-previews .dz-preview .dz-error-mark span,
261
+.dropzone .dz-preview .dz-success-mark span,
262
+.dropzone-previews .dz-preview .dz-success-mark span {
263
+  display: none;
264
+}
265
+.dropzone .dz-preview .dz-error-mark,
266
+.dropzone-previews .dz-preview .dz-error-mark {
267
+  background-position: -268px -123px;
268
+}
269
+.dropzone .dz-preview .dz-success-mark,
270
+.dropzone-previews .dz-preview .dz-success-mark {
271
+  background-position: -268px -163px;
272
+}
273
+.dropzone .dz-preview .dz-progress .dz-upload,
274
+.dropzone-previews .dz-preview .dz-progress .dz-upload {
275
+  -webkit-animation: loading 0.4s linear infinite;
276
+  -moz-animation: loading 0.4s linear infinite;
277
+  -o-animation: loading 0.4s linear infinite;
278
+  -ms-animation: loading 0.4s linear infinite;
279
+  animation: loading 0.4s linear infinite;
280
+  -webkit-transition: width 0.3s ease-in-out;
281
+  -moz-transition: width 0.3s ease-in-out;
282
+  -o-transition: width 0.3s ease-in-out;
283
+  -ms-transition: width 0.3s ease-in-out;
284
+  transition: width 0.3s ease-in-out;
285
+  -webkit-border-radius: 2px;
286
+  border-radius: 2px;
287
+  position: absolute;
288
+  top: 0;
289
+  left: 0;
290
+  width: 0%;
291
+  height: 100%;
292
+  background-image: url("../images/spritemap.png");
293
+  background-repeat: repeat-x;
294
+  background-position: 0px -400px;
295
+}
296
+@media all and (-webkit-min-device-pixel-ratio:1.5),(min--moz-device-pixel-ratio:1.5),(-o-min-device-pixel-ratio:1.5/1),(min-device-pixel-ratio:1.5),(min-resolution:138dpi),(min-resolution:1.5dppx) {
297
+  .dropzone .dz-preview .dz-progress .dz-upload,
298
+  .dropzone-previews .dz-preview .dz-progress .dz-upload {
299
+    background-image: url("../images/spritemap@2x.png");
300
+    -webkit-background-size: 428px 406px;
301
+    -moz-background-size: 428px 406px;
302
+    background-size: 428px 406px;
303
+  }
304
+}
305
+.dropzone .dz-preview.dz-success .dz-progress,
306
+.dropzone-previews .dz-preview.dz-success .dz-progress {
307
+  display: block;
308
+  opacity: 0;
309
+  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
310
+  filter: alpha(opacity=0);
311
+  -webkit-transition: opacity 0.4s ease-in-out;
312
+  -moz-transition: opacity 0.4s ease-in-out;
313
+  -o-transition: opacity 0.4s ease-in-out;
314
+  -ms-transition: opacity 0.4s ease-in-out;
315
+  transition: opacity 0.4s ease-in-out;
316
+}
317
+.dropzone .dz-preview .dz-error-message,
318
+.dropzone-previews .dz-preview .dz-error-message {
319
+  display: block;
320
+  opacity: 0;
321
+  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
322
+  filter: alpha(opacity=0);
323
+  -webkit-transition: opacity 0.3s ease-in-out;
324
+  -moz-transition: opacity 0.3s ease-in-out;
325
+  -o-transition: opacity 0.3s ease-in-out;
326
+  -ms-transition: opacity 0.3s ease-in-out;
327
+  transition: opacity 0.3s ease-in-out;
328
+}
329
+.dropzone .dz-preview:hover.dz-error .dz-error-message,
330
+.dropzone-previews .dz-preview:hover.dz-error .dz-error-message {
331
+  opacity: 1;
332
+  -ms-filter: none;
333
+  filter: none;
334
+}
335
+.dropzone a.dz-remove,
336
+.dropzone-previews a.dz-remove {
337
+  background-image: -webkit-linear-gradient(top, #fafafa, #eee);
338
+  background-image: -moz-linear-gradient(top, #fafafa, #eee);
339
+  background-image: -o-linear-gradient(top, #fafafa, #eee);
340
+  background-image: -ms-linear-gradient(top, #fafafa, #eee);
341
+  background-image: linear-gradient(to bottom, #fafafa, #eee);
342
+  -webkit-border-radius: 2px;
343
+  border-radius: 2px;
344
+  border: 1px solid #eee;
345
+  text-decoration: none;
346
+  display: block;
347
+  padding: 4px 5px;
348
+  text-align: center;
349
+  color: #aaa;
350
+  margin-top: 26px;
351
+}
352
+.dropzone a.dz-remove:hover,
353
+.dropzone-previews a.dz-remove:hover {
354
+  color: #666;
355
+}
356
+@-moz-keyframes loading {
357
+  0% {
358
+    background-position: 0 -400px;
359
+  }
360
+
361
+  100% {
362
+    background-position: -7px -400px;
363
+  }
364
+}
365
+@-webkit-keyframes loading {
366
+  0% {
367
+    background-position: 0 -400px;
368
+  }
369
+
370
+  100% {
371
+    background-position: -7px -400px;
372
+  }
373
+}
374
+@-o-keyframes loading {
375
+  0% {
376
+    background-position: 0 -400px;
377
+  }
378
+
379
+  100% {
380
+    background-position: -7px -400px;
381
+  }
382
+}
383
+@-ms-keyframes loading {
384
+  0% {
385
+    background-position: 0 -400px;
386
+  }
387
+
388
+  100% {
389
+    background-position: -7px -400px;
390
+  }
391
+}
392
+@keyframes loading {
393
+  0% {
394
+    background-position: 0 -400px;
395
+  }
396
+
397
+  100% {
398
+    background-position: -7px -400px;
399
+  }
400
+}

+ 1566
- 0
sampleProject/public/assets/css/font-awesome.css
File diff suppressed because it is too large
View File


+ 4
- 0
sampleProject/public/assets/css/font-awesome.min.css
File diff suppressed because it is too large
View File


+ 13
- 0
sampleProject/public/assets/css/font.helvetica-neue.css View File

@@ -0,0 +1,13 @@
1
+body, h1, h2, h3, h4, h5, .subtitle, .gen-list li .name, .table th, strong,
2
+input, select, textarea {
3
+  font-family: 'Helvetica Neue', 'HelveticaNeue', Helvetica, sans-serif !important;
4
+}
5
+
6
+.subtitle, .gen-list li .name, .table th, .panel-alt .panel-title, strong
7
+.widget-messaging .sender, strong, .blog-title {
8
+  font-weight: bold;
9
+}
10
+
11
+.form-control {
12
+  padding: 9px 10px 8.5px;
13
+}

+ 10
- 0
sampleProject/public/assets/css/font.roboto.css View File

@@ -0,0 +1,10 @@
1
+body, h1, h2, h3, h4, h5, .subtitle, .gen-list li .name, .table th, strong,
2
+input, select, textarea {
3
+  font-family: 'RobotoRegular', Helvetica, sans-serif !important;
4
+}
5
+
6
+.subtitle, .gen-list li .name, .table th, .panel-alt .panel-title, strong
7
+.widget-messaging .sender, strong {
8
+  font-weight: normal !important;
9
+  font-family: 'RobotoBold', Helvetica, sans-serif !important;
10
+}

+ 612
- 0
sampleProject/public/assets/css/fullcalendar.css View File

@@ -0,0 +1,612 @@
1
+/*!
2
+ * FullCalendar v1.6.4 Stylesheet
3
+ * Docs & License: http://arshaw.com/fullcalendar/
4
+ * (c) 2013 Adam Shaw
5
+ */
6
+
7
+
8
+.fc {
9
+	direction: ltr;
10
+	text-align: left;
11
+	background: #fff;
12
+	padding: 20px;
13
+	-moz-border-radius: 3px;
14
+	-webkit-border-radius: 3px;
15
+	border-radius: 3px;
16
+	-moz-box-shadow: 0 3px 0 rgba(12,12,12,0.03);
17
+   -webkit-box-shadow: 0 3px 0 rgba(12,12,12,0.03);
18
+   box-shadow: 0 3px 0 rgba(12,12,12,0.03);
19
+}
20
+	
21
+.fc table {
22
+	border-collapse: collapse;
23
+	border-spacing: 0;
24
+	}
25
+	
26
+html .fc,
27
+.fc table {
28
+	font-size: 1em;
29
+	}
30
+	
31
+.fc td,
32
+.fc th {
33
+	padding: 0;
34
+	vertical-align: top;
35
+	}
36
+
37
+
38
+
39
+/* Header */
40
+
41
+.fc-header td {
42
+	white-space: nowrap;
43
+	}
44
+
45
+.fc-header-left {
46
+	width: 25%;
47
+	text-align: left;
48
+	}
49
+	
50
+.fc-header-center {
51
+	text-align: center;
52
+	}
53
+	
54
+.fc-header-right {
55
+	width: 25%;
56
+	text-align: right;
57
+	}
58
+	
59
+.fc-header-title {
60
+	display: inline-block;
61
+	vertical-align: top;
62
+	}
63
+	
64
+.fc-header-title h2 {
65
+	margin-top: 7px;
66
+	white-space: nowrap;
67
+	font-size: 18px;
68
+	text-transform: uppercase;
69
+	color: #333;
70
+	font-family: 'LatoBold';
71
+}
72
+	
73
+.fc .fc-header-space {
74
+	padding-left: 10px;
75
+	}
76
+	
77
+.fc-header .fc-button {
78
+	margin-bottom: 1em;
79
+	vertical-align: top;
80
+	}
81
+	
82
+/* buttons edges butting together */
83
+
84
+.fc-header .fc-button {
85
+	margin-right: -1px;
86
+	}
87
+	
88
+.fc-header .fc-corner-right,  /* non-theme */
89
+.fc-header .ui-corner-right { /* theme */
90
+	margin-right: 0; /* back to normal */
91
+	}
92
+	
93
+/* button layering (for border precedence) */
94
+	
95
+.fc-header .fc-state-hover,
96
+.fc-header .ui-state-hover {
97
+	z-index: 2;
98
+	}
99
+	
100
+.fc-header .fc-state-down {
101
+	z-index: 3;
102
+	}
103
+
104
+.fc-header .fc-state-active,
105
+.fc-header .ui-state-active {
106
+	z-index: 4;
107
+	}
108
+	
109
+	
110
+	
111
+/* Content */
112
+	
113
+.fc-content {
114
+	clear: both;
115
+	zoom: 1;
116
+	margin-top: 10px;
117
+}
118
+	
119
+.fc-view {
120
+	width: 100%;
121
+	overflow: hidden;
122
+	}
123
+	
124
+	
125
+
126
+/* Cell Styles */
127
+
128
+.fc-widget-header {
129
+	text-transform: uppercase;
130
+	font-weight: normal;
131
+	font-family: 'LatoBold';
132
+	font-size: 13px;
133
+	height: 40px;
134
+}
135
+
136
+.fc-widget-content { 
137
+	border: 1px solid #eee;
138
+}
139
+
140
+.fc-widget-content > div {
141
+	margin: 2px;
142
+	padding: 3px;
143
+}
144
+	
145
+.fc-state-highlight {
146
+	background: #f7f7f7;
147
+}
148
+	
149
+.fc-cell-overlay { /* semi-transparent rectangle while dragging */
150
+	background: #bce8f1;
151
+	opacity: .3;
152
+	filter: alpha(opacity=30); /* for IE */
153
+	}
154
+	
155
+
156
+
157
+/* Buttons
158
+------------------------------------------------------------------------*/
159
+
160
+.fc-button {
161
+	position: relative;
162
+	display: inline-block;
163
+	padding: 6px 10px;
164
+	overflow: hidden;
165
+	line-height: 1.9em;
166
+	white-space: nowrap;
167
+	cursor: pointer;
168
+	}
169
+
170
+.fc-state-default.fc-corner-left { /* non-theme */
171
+	border-top-left-radius: 3px;
172
+	border-bottom-left-radius: 3px;
173
+	}
174
+
175
+.fc-state-default.fc-corner-right { /* non-theme */
176
+	border-top-right-radius: 3px;
177
+	border-bottom-right-radius: 3px;
178
+	}
179
+
180
+/*
181
+	Our default prev/next buttons use HTML entities like &lsaquo; &rsaquo; &laquo; &raquo;
182
+	and we'll try to make them look good cross-browser.
183
+*/
184
+
185
+.fc-text-arrow {
186
+	margin: 0 .1em;
187
+	font-size: 2em;
188
+	font-family: "Courier New", Courier, monospace;
189
+	vertical-align: baseline; /* for IE7 */
190
+	}
191
+
192
+.fc-button-prev .fc-text-arrow,
193
+.fc-button-next .fc-text-arrow { /* for &lsaquo; &rsaquo; */
194
+	font-weight: bold;
195
+	}
196
+	
197
+/* icon (for jquery ui) */
198
+	
199
+.fc-button .fc-icon-wrap {
200
+	position: relative;
201
+	float: left;
202
+	top: 50%;
203
+	}
204
+	
205
+.fc-button .ui-icon {
206
+	position: relative;
207
+	float: left;
208
+	margin-top: -50%;
209
+	*margin-top: 0;
210
+	*top: -50%;
211
+	}
212
+	
213
+/*
214
+  button states
215
+  borrowed from twitter bootstrap (http://twitter.github.com/bootstrap/)
216
+*/
217
+
218
+.fc-state-default {
219
+	border: 1px solid #ddd;
220
+	font-size: 12px;
221
+	text-transform: uppercase;
222
+}
223
+
224
+.fc-state-hover,
225
+.fc-state-down,
226
+.fc-state-active,
227
+.fc-state-disabled {
228
+	color: #333333;
229
+	background-color: #e6e6e6;
230
+	}
231
+
232
+.fc-state-hover {
233
+	color: #333333;
234
+	text-decoration: none;
235
+	background-position: 0 -15px;
236
+	-webkit-transition: background-position 0.1s linear;
237
+	   -moz-transition: background-position 0.1s linear;
238
+	     -o-transition: background-position 0.1s linear;
239
+	        transition: background-position 0.1s linear;
240
+	}
241
+
242
+.fc-state-down,
243
+.fc-state-active {
244
+	background-color: #eee;
245
+	background-image: none;
246
+	outline: 0;
247
+}
248
+
249
+.fc-state-disabled {
250
+	cursor: default;
251
+	opacity: 0.65;
252
+	filter: alpha(opacity=65);
253
+	box-shadow: none;
254
+	background: none;
255
+	color: #ccc;
256
+	}
257
+
258
+.fc-button-next,
259
+.fc-button-prev {
260
+	line-height: 20px;
261
+}
262
+
263
+/* Global Event Styles
264
+------------------------------------------------------------------------*/
265
+
266
+.fc-event-container > * {
267
+	z-index: 8;
268
+	}
269
+
270
+.fc-event-container > .ui-draggable-dragging,
271
+.fc-event-container > .ui-resizable-resizing {
272
+	z-index: 9;
273
+	}
274
+	 
275
+.fc-event {
276
+	border: 1px solid #428BCA; /* default BORDER color */
277
+	background-color: #428BCA; /* default BACKGROUND color */
278
+	color: #fff;               /* default TEXT color */
279
+	font-size: .85em;
280
+	cursor: default;
281
+	}
282
+
283
+a.fc-event {
284
+	text-decoration: none;
285
+	}
286
+	
287
+a.fc-event,
288
+.fc-event-draggable {
289
+	cursor: pointer;
290
+	}
291
+	
292
+.fc-rtl .fc-event {
293
+	text-align: right;
294
+	}
295
+
296
+.fc-event-inner {
297
+	width: 100%;
298
+	height: 100%;
299
+	overflow: hidden;
300
+	}
301
+	
302
+.fc-event-time,
303
+.fc-event-title {
304
+	padding: 0 1px;
305
+	padding-left: 5px;
306
+	}
307
+	
308
+.fc .ui-resizable-handle {
309
+	display: block;
310
+	position: absolute;
311
+	z-index: 99999;
312
+	overflow: hidden; /* hacky spaces (IE6/7) */
313
+	font-size: 300%;  /* */
314
+	line-height: 50%; /* */
315
+	}
316
+	
317
+	
318
+	
319
+/* Horizontal Events
320
+------------------------------------------------------------------------*/
321
+
322
+.fc-event-hori {
323
+	border-width: 1px 0;
324
+	margin-bottom: 1px;
325
+	}
326
+
327
+.fc-ltr .fc-event-hori.fc-event-start,
328
+.fc-rtl .fc-event-hori.fc-event-end {
329
+	border-left-width: 1px;
330
+	border-top-left-radius: 3px;
331
+	border-bottom-left-radius: 3px;
332
+	}
333
+
334
+.fc-ltr .fc-event-hori.fc-event-end,
335
+.fc-rtl .fc-event-hori.fc-event-start {
336
+	border-right-width: 1px;
337
+	border-top-right-radius: 3px;
338
+	border-bottom-right-radius: 3px;
339
+	}
340
+	
341
+/* resizable */
342
+	
343
+.fc-event-hori .ui-resizable-e {
344
+	top: 0           !important; /* importants override pre jquery ui 1.7 styles */
345
+	right: -3px      !important;
346
+	width: 7px       !important;
347
+	height: 100%     !important;
348
+	cursor: e-resize;
349
+	}
350
+	
351
+.fc-event-hori .ui-resizable-w {
352
+	top: 0           !important;
353
+	left: -3px       !important;
354
+	width: 7px       !important;
355
+	height: 100%     !important;
356
+	cursor: w-resize;
357
+	}
358
+	
359
+.fc-event-hori .ui-resizable-handle {
360
+	_padding-bottom: 14px; /* IE6 had 0 height */
361
+	}
362
+	
363
+	
364
+	
365
+/* Reusable Separate-border Table
366
+------------------------------------------------------------*/
367
+
368
+table.fc-border-separate {
369
+	border-collapse: separate;
370
+	}
371
+	
372
+.fc-border-separate th,
373
+.fc-border-separate td {
374
+	border-width: 1px 0 0 1px;
375
+	}
376
+	
377
+.fc-border-separate th.fc-last,
378
+.fc-border-separate td.fc-last {
379
+	border-right-width: 1px;
380
+	}
381
+	
382
+.fc-border-separate tr.fc-last th,
383
+.fc-border-separate tr.fc-last td {
384
+	border-bottom-width: 1px;
385
+	}
386
+	
387
+.fc-border-separate tbody tr.fc-first td,
388
+.fc-border-separate tbody tr.fc-first th {
389
+	border-top-width: 0;
390
+	}
391
+	
392
+	
393
+
394
+/* Month View, Basic Week View, Basic Day View */
395
+
396
+.fc-week td:first-child {
397
+	border-left: 0;
398
+}
399
+
400
+.fc-week td:last-child {
401
+	border-right: 0;
402
+}
403
+
404
+.fc-week:last-child td {
405
+	border-bottom: 0;
406
+}
407
+
408
+.fc-grid th {
409
+	text-align: center;
410
+	}
411
+
412
+.fc .fc-week-number {
413
+	width: 22px;
414
+	text-align: center;
415
+	}
416
+
417
+.fc .fc-week-number div {
418
+	padding: 0 2px;
419
+	}
420
+	
421
+.fc-grid .fc-day-number {
422
+	float: right;
423
+	padding: 0 2px;
424
+	}
425
+	
426
+.fc-grid .fc-other-month .fc-day-number {
427
+	opacity: 0.3;
428
+	filter: alpha(opacity=30); /* for IE */
429
+	/* opacity with small font can sometimes look too faded
430
+	   might want to set the 'color' property instead
431
+	   making day-numbers bold also fixes the problem */
432
+	}
433
+	
434
+.fc-grid .fc-day-content {
435
+	clear: both;
436
+	padding: 2px 2px 1px; /* distance between events and day edges */
437
+	}
438
+	
439
+/* event styles */
440
+	
441
+.fc-grid .fc-event-time {
442
+	font-weight: bold;
443
+	}
444
+	
445
+/* right-to-left */
446
+	
447
+.fc-rtl .fc-grid .fc-day-number {
448
+	float: left;
449
+	}
450
+	
451
+.fc-rtl .fc-grid .fc-event-time {
452
+	float: right;
453
+	}
454
+	
455
+	
456
+
457
+/* Agenda Week View, Agenda Day View
458
+------------------------------------------------------------------------*/
459
+
460
+.fc-agenda table {
461
+	border-collapse: separate;
462
+	}
463
+	
464
+.fc-agenda-days th {
465
+	text-align: center;
466
+	}
467
+	
468
+.fc-agenda .fc-agenda-axis {
469
+	width: 50px;
470
+	padding: 0 4px;
471
+	vertical-align: middle;
472
+	text-align: right;
473
+	white-space: nowrap;
474
+	font-weight: normal;
475
+	}
476
+
477
+.fc-agenda .fc-week-number {
478
+	font-weight: bold;
479
+	}
480
+	
481
+.fc-agenda .fc-day-content {
482
+	padding: 2px 2px 1px;
483
+	}
484
+	
485
+/* make axis border take precedence */
486
+	
487
+.fc-agenda-days .fc-agenda-axis {
488
+	border-right-width: 1px;
489
+	}
490
+	
491
+.fc-agenda-days .fc-col0 {
492
+	border-left-width: 0;
493
+	}
494
+	
495
+/* all-day area */
496
+	
497
+.fc-agenda-allday th {
498
+	border-width: 0 1px;
499
+	}
500
+	
501
+.fc-agenda-allday .fc-day-content {
502
+	min-height: 34px; /* TODO: doesnt work well in quirksmode */
503
+	_height: 34px;
504
+	}
505
+	
506
+/* divider (between all-day and slots) */
507
+	
508
+.fc-agenda-divider-inner {
509
+	height: 2px;
510
+	overflow: hidden;
511
+	}
512
+	
513
+.fc-widget-header .fc-agenda-divider-inner {
514
+	background: #eee;
515
+	}
516
+	
517
+/* slot rows */
518
+	
519
+.fc-agenda-slots th {
520
+	border-width: 1px 1px 0;
521
+	}
522
+	
523
+.fc-agenda-slots td {
524
+	border-width: 1px 0 0;
525
+	background: none;
526
+	}
527
+	
528
+.fc-agenda-slots td div {
529
+	height: 20px;
530
+	}
531
+	
532
+.fc-agenda-slots tr.fc-slot0 th,
533
+.fc-agenda-slots tr.fc-slot0 td {
534
+	border-top-width: 0;
535
+	}
536
+
537
+.fc-agenda-slots tr.fc-minor th,
538
+.fc-agenda-slots tr.fc-minor td {
539
+	border-top-style: dotted;
540
+	}
541
+	
542
+.fc-agenda-slots tr.fc-minor th.ui-widget-header {
543
+	*border-top-style: solid; /* doesn't work with background in IE6/7 */
544
+	}
545
+	
546
+
547
+
548
+/* Vertical Events
549
+------------------------------------------------------------------------*/
550
+
551
+.fc-event-vert {
552
+	border-width: 0 1px;
553
+	}
554
+
555
+.fc-event-vert.fc-event-start {
556
+	border-top-width: 1px;
557
+	border-top-left-radius: 3px;
558
+	border-top-right-radius: 3px;
559
+	}
560
+
561
+.fc-event-vert.fc-event-end {
562
+	border-bottom-width: 1px;
563
+	border-bottom-left-radius: 3px;
564
+	border-bottom-right-radius: 3px;
565
+	}
566
+	
567
+.fc-event-vert .fc-event-time {
568
+	white-space: nowrap;
569
+	font-size: 10px;
570
+	}
571
+
572
+.fc-event-vert .fc-event-inner {
573
+	position: relative;
574
+	z-index: 2;
575
+	}
576
+	
577
+.fc-event-vert .fc-event-bg { /* makes the event lighter w/ a semi-transparent overlay  */
578
+	position: absolute;
579
+	z-index: 1;
580
+	top: 0;
581
+	left: 0;
582
+	width: 100%;
583
+	height: 100%;
584
+	background: #fff;
585
+	opacity: .25;
586
+	filter: alpha(opacity=25);
587
+	}
588
+	
589
+.fc .ui-draggable-dragging .fc-event-bg, /* TODO: something nicer like .fc-opacity */
590
+.fc-select-helper .fc-event-bg {
591
+	display: none\9; /* for IE6/7/8. nested opacity filters while dragging don't work */
592
+	}
593
+	
594
+/* resizable */
595
+	
596
+.fc-event-vert .ui-resizable-s {
597
+	bottom: 0        !important; /* importants override pre jquery ui 1.7 styles */
598
+	width: 100%      !important;
599
+	height: 8px      !important;
600
+	overflow: hidden !important;
601
+	line-height: 8px !important;
602
+	font-size: 11px  !important;
603
+	font-family: monospace;
604
+	text-align: center;
605
+	cursor: s-resize;
606
+	}
607
+	
608
+.fc-agenda .ui-resizable-resizing { /* TODO: better selector */
609
+	_overflow: hidden;
610
+	}
611
+	
612
+	

+ 13
- 0
sampleProject/public/assets/css/index.html View File

@@ -0,0 +1,13 @@
1
+<!DOCTYPE html>
2
+
3
+<html>
4
+<head>
5
+    <title>Forbidden</title>
6
+</head>
7
+
8
+<body>
9
+
10
+<h2>Forbidden</h2>
11
+
12
+</body>
13
+</html>

+ 37
- 0
sampleProject/public/assets/css/jquery-jvectormap-1.2.2.css View File

@@ -0,0 +1,37 @@
1
+.jvectormap-label {
2
+    position: absolute;
3
+    display: none;
4
+    border: solid 1px #CDCDCD;
5
+    -webkit-border-radius: 3px;
6
+    -moz-border-radius: 3px;
7
+    border-radius: 3px;
8
+    background: #292929;
9
+    color: white;
10
+    font-family: sans-serif, Verdana;
11
+    font-size: smaller;
12
+    padding: 3px;
13
+}
14
+
15
+.jvectormap-zoomin, .jvectormap-zoomout {
16
+    position: absolute;
17
+    left: 10px;
18
+    -webkit-border-radius: 2px;
19
+    -moz-border-radius: 2px;
20
+    border-radius: 2px;
21
+    background: #292929;
22
+    padding: 2px;
23
+    color: white;
24
+    width: 15px;
25
+    height: 15px;
26
+    cursor: pointer;
27
+    line-height: 10px;
28
+    text-align: center;
29
+}
30
+
31
+.jvectormap-zoomin {
32
+    top: 10px;
33
+}
34
+
35
+.jvectormap-zoomout {
36
+    top: 30px;
37
+}

+ 986
- 0
sampleProject/public/assets/css/jquery-ui-1.10.3.css View File

@@ -0,0 +1,986 @@
1
+/*! jQuery UI - v1.10.3 - 2013-11-20
2
+* http://jqueryui.com
3
+* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css
4
+* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
5
+
6
+/* Layout helpers
7
+----------------------------------*/
8
+.ui-helper-hidden {
9
+	display: none;
10
+}
11
+.ui-helper-hidden-accessible {
12
+	border: 0;
13
+	clip: rect(0 0 0 0);
14
+	height: 1px;
15
+	margin: -1px;
16
+	overflow: hidden;
17
+	padding: 0;
18
+	position: absolute;
19
+	width: 1px;
20
+}
21
+.ui-helper-reset {
22
+	margin: 0;
23
+	padding: 0;
24
+	border: 0;
25
+	outline: 0;
26
+	line-height: 1.3;
27
+	text-decoration: none;
28
+	font-size: 100%;
29
+	list-style: none;
30
+}
31
+.ui-helper-clearfix:before,
32
+.ui-helper-clearfix:after {
33
+	content: "";
34
+	display: table;
35
+	border-collapse: collapse;
36
+}
37
+.ui-helper-clearfix:after {
38
+	clear: both;
39
+}
40
+.ui-helper-clearfix {
41
+	min-height: 0; /* support: IE7 */
42
+}
43
+.ui-helper-zfix {
44
+	width: 100%;
45
+	height: 100%;
46
+	top: 0;
47
+	left: 0;
48
+	position: absolute;
49
+	opacity: 0;
50
+	filter:Alpha(Opacity=0);
51
+}
52
+
53
+.ui-front {
54
+	z-index: 100;
55
+}
56
+
57
+
58
+/* Interaction Cues
59
+----------------------------------*/
60
+.ui-state-disabled {
61
+	cursor: default !important;
62
+}
63
+
64
+
65
+/* Icons
66
+----------------------------------*/
67
+
68
+/* states and images */
69
+.ui-icon {
70
+	display: block;
71
+	text-indent: -99999px;
72
+	overflow: hidden;
73
+	background-repeat: no-repeat;
74
+}
75
+
76
+
77
+/* Misc visuals
78
+----------------------------------*/
79
+
80
+/* Overlays */
81
+.ui-widget-overlay {
82
+	position: fixed;
83
+	top: 0;
84
+	left: 0;
85
+	width: 100%;
86
+	height: 100%;
87
+}
88
+.ui-resizable {
89
+	position: relative;
90
+}
91
+.ui-resizable-handle {
92
+	position: absolute;
93
+	font-size: 0.1px;
94
+	display: block;
95
+}
96
+.ui-resizable-disabled .ui-resizable-handle,
97
+.ui-resizable-autohide .ui-resizable-handle {
98
+	display: none;
99
+}
100
+.ui-resizable-n {
101
+	cursor: n-resize;
102
+	height: 7px;
103
+	width: 100%;
104
+	top: -5px;
105
+	left: 0;
106
+}
107
+.ui-resizable-s {
108
+	cursor: s-resize;
109
+	height: 7px;
110
+	width: 100%;
111
+	bottom: -5px;
112
+	left: 0;
113
+}
114
+.ui-resizable-e {
115
+	cursor: e-resize;
116
+	width: 7px;
117
+	right: -5px;
118
+	top: 0;
119
+	height: 100%;
120
+}
121
+.ui-resizable-w {
122
+	cursor: w-resize;
123
+	width: 7px;
124
+	left: -5px;
125
+	top: 0;
126
+	height: 100%;
127
+}
128
+.ui-resizable-se {
129
+	cursor: se-resize;
130
+	width: 12px;
131
+	height: 12px;
132
+	right: 1px;
133
+	bottom: 1px;
134
+}
135
+.ui-resizable-sw {
136
+	cursor: sw-resize;
137
+	width: 9px;
138
+	height: 9px;
139
+	left: -5px;
140
+	bottom: -5px;
141
+}
142
+.ui-resizable-nw {
143
+	cursor: nw-resize;
144
+	width: 9px;
145
+	height: 9px;
146
+	left: -5px;
147
+	top: -5px;
148
+}
149
+.ui-resizable-ne {
150
+	cursor: ne-resize;
151
+	width: 9px;
152
+	height: 9px;
153
+	right: -5px;
154
+	top: -5px;
155
+}
156
+.ui-selectable-helper {
157
+	position: absolute;
158
+	z-index: 100;
159
+	border: 1px dotted black;
160
+}
161
+.ui-accordion .ui-accordion-header {
162
+	display: block;
163
+	cursor: pointer;
164
+	position: relative;
165
+	margin-top: 2px;
166
+	padding: .5em .5em .5em .7em;
167
+	min-height: 0; /* support: IE7 */
168
+}
169
+.ui-accordion .ui-accordion-icons {
170
+	padding-left: 2.2em;
171
+}
172
+.ui-accordion .ui-accordion-noicons {
173
+	padding-left: .7em;
174
+}
175
+.ui-accordion .ui-accordion-icons .ui-accordion-icons {
176
+	padding-left: 2.2em;
177
+}
178
+.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
179
+	position: absolute;
180
+	left: .5em;
181
+	top: 50%;
182
+	margin-top: -8px;
183
+}
184
+.ui-accordion .ui-accordion-content {
185
+	padding: 1em 2.2em;
186
+	border-top: 0;
187
+	overflow: auto;
188
+}
189
+.ui-autocomplete {
190
+	position: absolute;
191
+	top: 0;
192
+	left: 0;
193
+	cursor: default;
194
+}
195
+.ui-button {
196
+	display: inline-block;
197
+	position: relative;
198
+	padding: 0;
199
+	line-height: normal;
200
+	margin-right: .1em;
201
+	cursor: pointer;
202
+	vertical-align: middle;
203
+	text-align: center;
204
+	overflow: visible; /* removes extra width in IE */
205
+}
206
+.ui-button,
207
+.ui-button:link,
208
+.ui-button:visited,
209
+.ui-button:hover,
210
+.ui-button:active {
211
+	text-decoration: none;
212
+}
213
+/* to make room for the icon, a width needs to be set here */
214
+.ui-button-icon-only {
215
+	width: 2.2em;
216
+}
217
+/* button elements seem to need a little more width */
218
+button.ui-button-icon-only {
219
+	width: 2.4em;
220
+}
221
+.ui-button-icons-only {
222
+	width: 3.4em;
223
+}
224
+button.ui-button-icons-only {
225
+	width: 3.7em;
226
+}
227
+
228
+/* button text element */
229
+.ui-button .ui-button-text {
230
+	display: block;
231
+	line-height: normal;
232
+}
233
+.ui-button-text-only .ui-button-text {
234
+	padding: .4em 1em;
235
+}
236
+.ui-button-icon-only .ui-button-text,
237
+.ui-button-icons-only .ui-button-text {
238
+	padding: .4em;
239
+	text-indent: -9999999px;
240
+}
241
+.ui-button-text-icon-primary .ui-button-text,
242
+.ui-button-text-icons .ui-button-text {
243
+	padding: .4em 1em .4em 2.1em;
244
+}
245
+.ui-button-text-icon-secondary .ui-button-text,
246
+.ui-button-text-icons .ui-button-text {
247
+	padding: .4em 2.1em .4em 1em;
248
+}
249
+.ui-button-text-icons .ui-button-text {
250
+	padding-left: 2.1em;
251
+	padding-right: 2.1em;
252
+}
253
+/* no icon support for input elements, provide padding by default */
254
+input.ui-button {
255
+	padding: .4em 1em;
256
+}
257
+
258
+/* button icon element(s) */
259
+.ui-button-icon-only .ui-icon,
260
+.ui-button-text-icon-primary .ui-icon,
261
+.ui-button-text-icon-secondary .ui-icon,
262
+.ui-button-text-icons .ui-icon,
263
+.ui-button-icons-only .ui-icon {
264
+	position: absolute;
265
+	top: 50%;
266
+	margin-top: -8px;
267
+}
268
+.ui-button-icon-only .ui-icon {
269
+	left: 50%;
270
+	margin-left: -8px;
271
+}
272
+.ui-button-text-icon-primary .ui-button-icon-primary,
273
+.ui-button-text-icons .ui-button-icon-primary,
274
+.ui-button-icons-only .ui-button-icon-primary {
275
+	left: .5em;
276
+}
277
+.ui-button-text-icon-secondary .ui-button-icon-secondary,
278
+.ui-button-text-icons .ui-button-icon-secondary,
279
+.ui-button-icons-only .ui-button-icon-secondary {
280
+	right: .5em;
281
+}
282
+
283
+/* button sets */
284
+.ui-buttonset {
285
+	margin-right: 7px;
286
+}
287
+.ui-buttonset .ui-button {
288
+	margin-left: 0;
289
+	margin-right: -.3em;
290
+}
291
+
292
+/* workarounds */
293
+/* reset extra padding in Firefox, see h5bp.com/l */
294
+input.ui-button::-moz-focus-inner,
295
+button.ui-button::-moz-focus-inner {
296
+	border: 0;
297
+	padding: 0;
298
+}
299
+.ui-datepicker {
300
+	width: 17em;
301
+	padding: .2em .2em 0;
302
+	display: none;
303
+}
304
+.ui-datepicker .ui-datepicker-header {
305
+	position: relative;
306
+	padding: .2em 0;
307
+}
308
+.ui-datepicker .ui-datepicker-prev,
309
+.ui-datepicker .ui-datepicker-next {
310
+	position: absolute;
311
+	top: 2px;
312
+	width: 1.8em;
313
+	height: 1.8em;
314
+}
315
+.ui-datepicker .ui-datepicker-prev-hover,
316
+.ui-datepicker .ui-datepicker-next-hover {
317
+	top: 1px;
318
+}
319
+.ui-datepicker .ui-datepicker-prev {
320
+	left: 2px;
321
+}
322
+.ui-datepicker .ui-datepicker-next {
323
+	right: 2px;
324
+}
325
+.ui-datepicker .ui-datepicker-prev-hover {
326
+	left: 1px;
327
+}
328
+.ui-datepicker .ui-datepicker-next-hover {
329
+	right: 1px;
330
+}
331
+.ui-datepicker .ui-datepicker-prev span,
332
+.ui-datepicker .ui-datepicker-next span {
333
+	display: block;
334
+	position: absolute;
335
+	left: 50%;
336
+	margin-left: -8px;
337
+	top: 50%;
338
+	margin-top: -8px;
339
+}
340
+.ui-datepicker .ui-datepicker-title {
341
+	margin: 0 2.3em;
342
+	line-height: 1.8em;
343
+	text-align: center;
344
+}
345
+.ui-datepicker .ui-datepicker-title select {
346
+	font-size: 1em;
347
+	margin: 1px 0;
348
+}
349
+.ui-datepicker select.ui-datepicker-month-year {
350
+	width: 100%;
351
+}
352
+.ui-datepicker select.ui-datepicker-month,
353
+.ui-datepicker select.ui-datepicker-year {
354
+	width: 49%;
355
+}
356
+.ui-datepicker table {
357
+	width: 100%;
358
+	font-size: .9em;
359
+	border-collapse: collapse;
360
+	margin: 0 0 .4em;
361
+}
362
+.ui-datepicker th {
363
+	padding: .7em .3em;
364
+	text-align: center;
365
+	font-weight: bold;
366
+	border: 0;
367
+}
368
+.ui-datepicker td {
369
+	border: 0;
370
+	padding: 1px;
371
+}
372
+.ui-datepicker td span,
373
+.ui-datepicker td a {
374
+	display: block;
375
+	padding: .2em;
376
+	text-align: right;
377
+	text-decoration: none;
378
+}
379
+.ui-datepicker .ui-datepicker-buttonpane {
380
+	background-image: none;
381
+	margin: .7em 0 0 0;
382
+	padding: 0 .2em;
383
+	border-left: 0;
384
+	border-right: 0;
385
+	border-bottom: 0;
386
+}
387
+.ui-datepicker .ui-datepicker-buttonpane button {
388
+	float: right;
389
+	margin: .5em .2em .4em;
390
+	cursor: pointer;
391
+	padding: .2em .6em .3em .6em;
392
+	width: auto;
393
+	overflow: visible;
394
+}
395
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
396
+	float: left;
397
+}
398
+
399
+/* with multiple calendars */
400
+.ui-datepicker.ui-datepicker-multi {
401
+	width: auto;
402
+}
403
+.ui-datepicker-multi .ui-datepicker-group {
404
+	float: left;
405
+}
406
+.ui-datepicker-multi .ui-datepicker-group table {
407
+	width: 95%;
408
+	margin: 0 auto .4em;
409
+}
410
+.ui-datepicker-multi-2 .ui-datepicker-group {
411
+	width: 50%;
412
+}
413
+.ui-datepicker-multi-3 .ui-datepicker-group {
414
+	width: 33.3%;
415
+}
416
+.ui-datepicker-multi-4 .ui-datepicker-group {
417
+	width: 25%;
418
+}
419
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
420
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
421
+	border-left-width: 0;
422
+}
423
+.ui-datepicker-multi .ui-datepicker-buttonpane {
424
+	clear: left;
425
+}
426
+.ui-datepicker-row-break {
427
+	clear: both;
428
+	width: 100%;
429
+	font-size: 0;
430
+}
431
+
432
+/* RTL support */
433
+.ui-datepicker-rtl {
434
+	direction: rtl;
435
+}
436
+.ui-datepicker-rtl .ui-datepicker-prev {
437
+	right: 2px;
438
+	left: auto;
439
+}
440
+.ui-datepicker-rtl .ui-datepicker-next {
441
+	left: 2px;
442
+	right: auto;
443
+}
444
+.ui-datepicker-rtl .ui-datepicker-prev:hover {
445
+	right: 1px;
446
+	left: auto;
447
+}
448
+.ui-datepicker-rtl .ui-datepicker-next:hover {
449
+	left: 1px;
450
+	right: auto;
451
+}
452
+.ui-datepicker-rtl .ui-datepicker-buttonpane {
453
+	clear: right;
454
+}
455
+.ui-datepicker-rtl .ui-datepicker-buttonpane button {
456
+	float: left;
457
+}
458
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
459
+.ui-datepicker-rtl .ui-datepicker-group {
460
+	float: right;
461
+}
462
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
463
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
464
+	border-right-width: 0;
465
+	border-left-width: 1px;
466
+}
467
+.ui-dialog {
468
+	position: absolute;
469
+	top: 0;
470
+	left: 0;
471
+	padding: .2em;
472
+	outline: 0;
473
+}
474
+.ui-dialog .ui-dialog-titlebar {
475
+	padding: .4em 1em;
476
+	position: relative;
477
+}
478
+.ui-dialog .ui-dialog-title {
479
+	float: left;
480
+	margin: .1em 0;
481
+	white-space: nowrap;
482
+	width: 90%;
483
+	overflow: hidden;
484
+	text-overflow: ellipsis;
485
+}
486
+.ui-dialog .ui-dialog-titlebar-close {
487
+	position: absolute;
488
+	right: .3em;
489
+	top: 50%;
490
+	width: 21px;
491
+	margin: -10px 0 0 0;
492
+	padding: 1px;
493
+	height: 20px;
494
+}
495
+.ui-dialog .ui-dialog-content {
496
+	position: relative;
497
+	border: 0;
498
+	padding: .5em 1em;
499
+	background: none;
500
+	overflow: auto;
501
+}
502
+.ui-dialog .ui-dialog-buttonpane {
503
+	text-align: left;
504
+	border-width: 1px 0 0 0;
505
+	background-image: none;
506
+	margin-top: .5em;
507
+	padding: .3em 1em .5em .4em;
508
+}
509
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
510
+	float: right;
511
+}
512
+.ui-dialog .ui-dialog-buttonpane button {
513
+	margin: .5em .4em .5em 0;
514
+	cursor: pointer;
515
+}
516
+.ui-dialog .ui-resizable-se {
517
+	width: 12px;
518
+	height: 12px;
519
+	right: -5px;
520
+	bottom: -5px;
521
+	background-position: 16px 16px;
522
+}
523
+.ui-draggable .ui-dialog-titlebar {
524
+	cursor: move;
525
+}
526
+.ui-menu {
527
+	list-style: none;
528
+	padding: 2px;
529
+	margin: 0;
530
+	display: block;
531
+	outline: none;
532
+}
533
+.ui-menu .ui-menu {
534
+	margin-top: -3px;
535
+	position: absolute;
536
+}
537
+.ui-menu .ui-menu-item {
538
+	margin: 0;
539
+	padding: 0;
540
+	width: 100%;
541
+	/* support: IE10, see #8844 */
542
+	list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
543
+}
544
+.ui-menu .ui-menu-divider {
545
+	margin: 5px -2px 5px -2px;
546
+	height: 0;
547
+	font-size: 0;
548
+	line-height: 0;
549
+	border-width: 1px 0 0 0;
550
+}
551
+.ui-menu .ui-menu-item a {
552
+	text-decoration: none;
553
+	display: block;
554
+	padding: 2px .4em;
555
+	line-height: 1.5;
556
+	min-height: 0; /* support: IE7 */
557
+	font-weight: normal;
558
+}
559
+.ui-menu .ui-menu-item a.ui-state-focus,
560
+.ui-menu .ui-menu-item a.ui-state-active {
561
+	font-weight: normal;
562
+	margin: -1px;
563
+}
564
+
565
+.ui-menu .ui-state-disabled {
566
+	font-weight: normal;
567
+	margin: .4em 0 .2em;
568
+	line-height: 1.5;
569
+}
570
+.ui-menu .ui-state-disabled a {
571
+	cursor: default;
572
+}
573
+
574
+/* icon support */
575
+.ui-menu-icons {
576
+	position: relative;
577
+}
578
+.ui-menu-icons .ui-menu-item a {
579
+	position: relative;
580
+	padding-left: 2em;
581
+}
582
+
583
+/* left-aligned */
584
+.ui-menu .ui-icon {
585
+	position: absolute;
586
+	top: .2em;
587
+	left: .2em;
588
+}
589
+
590
+/* right-aligned */
591
+.ui-menu .ui-menu-icon {
592
+	position: static;
593
+	float: right;
594
+}
595
+.ui-progressbar {
596
+	height: 2em;
597
+	text-align: left;
598
+	overflow: hidden;
599
+}
600
+.ui-progressbar .ui-progressbar-value {
601
+	margin: -1px;
602
+	height: 100%;
603
+}
604
+.ui-progressbar .ui-progressbar-overlay {
605
+	background: url("images/animated-overlay.gif");
606
+	height: 100%;
607
+	filter: alpha(opacity=25);
608
+	opacity: 0.25;
609
+}
610
+.ui-progressbar-indeterminate .ui-progressbar-value {
611
+	background-image: none;
612
+}
613
+.ui-slider {
614
+	position: relative;
615
+	text-align: left;
616
+}
617
+.ui-slider .ui-slider-handle {
618
+	position: absolute;
619
+	z-index: 2;
620
+	width: 1.2em;
621
+	height: 1.2em;
622
+	cursor: default;
623
+}
624
+.ui-slider .ui-slider-range {
625
+	position: absolute;
626
+	z-index: 1;
627
+	font-size: .7em;
628
+	display: block;
629
+	border: 0;
630
+	background-position: 0 0;
631
+}
632
+
633
+/* For IE8 - See #6727 */
634
+.ui-slider.ui-state-disabled .ui-slider-handle,
635
+.ui-slider.ui-state-disabled .ui-slider-range {
636
+	filter: inherit;
637
+}
638
+
639
+.ui-slider-horizontal {
640
+	height: .8em;
641
+}
642
+.ui-slider-horizontal .ui-slider-handle {
643
+	top: -.3em;
644
+	margin-left: -.6em;
645
+}
646
+.ui-slider-horizontal .ui-slider-range {
647
+	top: 0;
648
+	height: 100%;
649
+}
650
+.ui-slider-horizontal .ui-slider-range-min {
651
+	left: 0;
652
+}
653
+.ui-slider-horizontal .ui-slider-range-max {
654
+	right: 0;
655
+}
656
+
657
+.ui-slider-vertical {
658
+	width: .8em;
659
+	height: 100px;
660
+}
661
+.ui-slider-vertical .ui-slider-handle {
662
+	left: -.3em;
663
+	margin-left: 0;
664
+	margin-bottom: -.6em;
665
+}
666
+.ui-slider-vertical .ui-slider-range {
667
+	left: 0;
668
+	width: 100%;
669
+}
670
+.ui-slider-vertical .ui-slider-range-min {
671
+	bottom: 0;
672
+}
673
+.ui-slider-vertical .ui-slider-range-max {
674
+	top: 0;
675
+}
676
+.ui-spinner {
677
+	position: relative;
678
+	display: inline-block;
679
+	overflow: hidden;
680
+	padding: 0;
681
+	vertical-align: middle;
682
+}
683
+.ui-spinner-input {
684
+	border: none;
685
+	background: none;
686
+	color: inherit;
687
+	padding: 0;
688
+	margin: .2em 0;
689
+	vertical-align: middle;
690
+	margin-left: .4em;
691
+	margin-right: 22px;
692
+}
693
+.ui-spinner-button {
694
+	width: 16px;
695
+	height: 50%;
696
+	font-size: .5em;
697
+	padding: 0;
698
+	margin: 0;
699
+	text-align: center;
700
+	position: absolute;
701
+	cursor: default;
702
+	display: block;
703
+	overflow: hidden;
704
+	right: 0;
705
+}
706
+/* more specificity required here to overide default borders */
707
+.ui-spinner a.ui-spinner-button {
708
+	border-top: none;
709
+	border-bottom: none;
710
+	border-right: none;
711
+}
712
+/* vertical centre icon */
713
+.ui-spinner .ui-icon {
714
+	position: absolute;
715
+	margin-top: -8px;
716
+	top: 50%;
717
+	left: 0;
718
+}
719
+.ui-spinner-up {
720
+	top: 0;
721
+}
722
+.ui-spinner-down {
723
+	bottom: 0;
724
+}
725
+
726
+/* TR overrides */
727
+.ui-spinner .ui-icon-triangle-1-s {
728
+	/* need to fix icons sprite */
729
+	background-position: -65px -16px;
730
+}
731
+.ui-tabs {
732
+	position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
733
+	padding: .2em;
734
+}
735
+.ui-tabs .ui-tabs-nav {
736
+	margin: 0;
737
+	padding: .2em .2em 0;
738
+}
739
+.ui-tabs .ui-tabs-nav li {
740
+	list-style: none;
741
+	float: left;
742
+	position: relative;
743
+	top: 0;
744
+	margin: 1px .2em 0 0;
745
+	border-bottom-width: 0;
746
+	padding: 0;
747
+	white-space: nowrap;
748
+}
749
+.ui-tabs .ui-tabs-nav li a {
750
+	float: left;
751
+	padding: .5em 1em;
752
+	text-decoration: none;
753
+}
754
+.ui-tabs .ui-tabs-nav li.ui-tabs-active {
755
+	margin-bottom: -1px;
756
+	padding-bottom: 1px;
757
+}
758
+.ui-tabs .ui-tabs-nav li.ui-tabs-active a,
759
+.ui-tabs .ui-tabs-nav li.ui-state-disabled a,
760
+.ui-tabs .ui-tabs-nav li.ui-tabs-loading a {
761
+	cursor: text;
762
+}
763
+.ui-tabs .ui-tabs-nav li a, /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
764
+.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a {
765
+	cursor: pointer;
766
+}
767
+.ui-tabs .ui-tabs-panel {
768
+	display: block;
769
+	border-width: 0;
770
+	padding: 1em 1.4em;
771
+	background: none;
772
+}
773
+.ui-tooltip {
774
+	padding: 8px;
775
+	position: absolute;
776
+	z-index: 9999;
777
+	max-width: 300px;
778
+	-webkit-box-shadow: 0 0 5px #aaa;
779
+	box-shadow: 0 0 5px #aaa;
780
+}
781
+body .ui-tooltip {
782
+	border-width: 2px;
783
+}
784
+
785
+
786
+
787
+/* JQUERY UI THEME */
788
+
789
+.ui-datepicker {
790
+	background: #1D2939;
791
+	margin-top: 1px;
792
+	z-index: 100000;
793
+	-moz-border-radius: 2px;
794
+	-webkit-border-radius: 2px;
795
+	border-radius: 2px;
796
+	width: 280px;
797
+}
798
+
799
+.ui-datepicker-title {
800
+	text-transform: uppercase;
801
+	font-family: 'LatoBold';
802
+	color: #1CAF9A;
803
+}
804
+
805
+.ui-datepicker th {
806
+	text-transform: uppercase;
807
+	font-family: 'LatoBold';
808
+	font-weight: normal;
809
+	font-size: 11px;
810
+	color: #fff;
811
+}
812
+
813
+.ui-datepicker td.ui-datepicker-today a {
814
+	background: rgba(255,255,255,0.1);
815
+}
816
+
817
+.ui-datepicker td a {
818
+	color: #636E7B;
819
+	-moz-border-radius: 2px;
820
+	-webkit-border-radius: 2px;
821
+	border-radius: 2px;
822
+	padding: 3px 5px;
823
+	-moz-transition: all 0.2s ease-out 0s;
824
+	-webkit-transition: all 0.2s ease-out 0s;
825
+	transition: all 0.2s ease-out 0s;
826
+}
827
+
828
+.ui-datepicker td a:hover {
829
+	background: #1CAF9A;
830
+	color: #fff;
831
+}
832
+
833
+.ui-datepicker-next,
834
+.ui-datepicker-prev {
835
+	-moz-transition: all 0.2s ease-out 0s;
836
+	-webkit-transition: all 0.2s ease-out 0s;
837
+	transition: all 0.2s ease-out 0s;
838
+	-moz-border-radius: 2px;
839
+	-webkit-border-radius: 2px;
840
+	border-radius: 2px;
841
+}
842
+
843
+.ui-datepicker-next {
844
+	background: url(../images/calendar-arrow.png) no-repeat 10px 5px;
845
+}
846
+
847
+.ui-datepicker-next:hover {
848
+	top: 2px;
849
+	right: 2px;
850
+	background-color: #1CAF9A;
851
+	cursor: pointer;
852
+}
853
+
854
+.ui-datepicker-prev {
855
+	background: url(../images/calendar-arrow.png) no-repeat 8px -80px;
856
+}
857
+
858
+.ui-datepicker-prev:hover {
859
+	top: 2px;
860
+	left: 2px;
861
+	background-color: #1CAF9A;
862
+	cursor: pointer;
863
+}
864
+
865
+.ui-datepicker-buttonpane button {
866
+	border: 0;
867
+	background: #1CAF9A;
868
+	color: #fff;
869
+	-moz-border-radius: 2px;
870
+	-webkit-border-radius: 2px;
871
+	border-radius: 2px;
872
+	padding: 7px 10px;
873
+}
874
+
875
+.ui-spinner {
876
+	border: 1px solid #ccc;
877
+	background: #fff;
878
+	-moz-border-radius: 2px;
879
+	-webkit-border-radius: 2px;
880
+	border-radius: 2px;
881
+	overflow: hidden;
882
+}
883
+
884
+.ui-spinner-input {
885
+	margin: 0 30px 0 0;
886
+	padding: 10px;
887
+}
888
+
889
+.ui-spinner-button {
890
+	background-color: #E4E7EA;
891
+	border-left: 1px solid #ccc;
892
+	width: 32px;
893
+	background-repeat: no-repeat;
894
+	background-image: url(../images/dropdown-arrow.png);
895
+	cursor: pointer;
896
+}
897
+
898
+.ui-spinner-up {
899
+	background-position: 9px -41px;
900
+	border-bottom: 1px solid #ccc !important;
901
+}
902
+
903
+.ui-spinner-down {
904
+	background-position: 9px 6px;
905
+}
906
+
907
+.ui-spinner-button:hover {
908
+	background-color: #f3f3f3;
909
+}
910
+
911
+.ui-slider {
912
+	background: rgba(17,18,18,0.1);
913
+	-moz-border-radius: 3px;
914
+	-webkit-border-radius: 3px;
915
+	border-radius: 3px;
916
+}
917
+
918
+.ui-slider-horizontal {
919
+	height: 6px;
920
+	margin: 15px 0;
921
+}
922
+
923
+.ui-slider .ui-slider-handle {
924
+	background: #999;
925
+	border: 6px solid #fff;
926
+	width: 20px;
927
+	height: 20px;
928
+	-moz-border-radius: 50px;
929
+	-webkit-border-radius: 50px;
930
+	border-radius: 50px;
931
+	top: -0.4em;
932
+	cursor: pointer;
933
+	-moz-box-shadow: 0 0 2px rgba(0,0,0,0.4);
934
+	-webkit-box-shadow: 0 0 2px rgba(0,0,0,0.4);
935
+	box-shadow: 0 0 2px rgba(0,0,0,0.4);
936
+}
937
+
938
+.ui-slider .ui-slider-handle:hover {
939
+	-moz-box-shadow: 0 0 6px rgba(0,0,0,0.5);
940
+	-webkit-box-shadow: 0 0 6px rgba(0,0,0,0.5);
941
+	box-shadow: 0 0 6px rgba(0,0,0,0.5);
942
+}
943
+
944
+.ui-slider .ui-slider-range {
945
+	-moz-border-radius: 3px;
946
+	-webkit-border-radius: 3px;
947
+	border-radius: 3px;
948
+	background: #999;
949
+}
950
+
951
+.slider-primary .ui-slider-range,
952
+.slider-primary .ui-slider-handle {
953
+	background-color: #428BCA;
954
+}
955
+
956
+.slider-success .ui-slider-range,
957
+.slider-success .ui-slider-handle {
958
+	background-color: #1CAF9A;
959
+}
960
+
961
+.slider-warning .ui-slider-range,
962
+.slider-warning .ui-slider-handle {
963
+	background-color: #F0AD4E;
964
+}
965
+
966
+.slider-danger .ui-slider-range,
967
+.slider-danger .ui-slider-handle {
968
+	background-color: #D9534F;
969
+}
970
+
971
+.slider-info .ui-slider-range,
972
+.slider-info .ui-slider-handle {
973
+	background-color: #5BC0DE;
974
+}
975
+
976
+.ui-slider-vertical {
977
+	width: 6px;
978
+	display: inline-block;
979
+}
980
+
981
+.ui-slider-vertical .ui-slider-handle {
982
+	top: auto;
983
+	left: -7px;
984
+}
985
+
986
+

+ 261
- 0
sampleProject/public/assets/css/jquery.datatables.css View File

@@ -0,0 +1,261 @@
1
+
2
+.dataTables_wrapper {
3
+	position: relative;
4
+	clear: both;
5
+	margin-bottom: 15px;
6
+}
7
+
8
+.dataTables_wrapper::after {
9
+	clear: both;
10
+	display: block;
11
+	content: '';
12
+}
13
+
14
+.dataTables_length {
15
+	float: left;
16
+	margin-bottom: 10px;
17
+}
18
+
19
+.dataTables_length::after {
20
+	clear: both;
21
+	display: block;
22
+	content: '';
23
+}
24
+
25
+.dataTables_length label {
26
+	display: inline-block;
27
+}
28
+
29
+.dataTable {
30
+	display: inline-table;
31
+	margin-bottom: 15px;
32
+}
33
+
34
+.dataTable:before {
35
+	display: block;
36
+	clear: both;
37
+	content: '';
38
+}
39
+
40
+.dataTable thead > tr > th {
41
+	background-color: transparent;
42
+	background-repeat: no-repeat;
43
+	background-position: 97% center;
44
+}
45
+
46
+.dataTables_filter {
47
+	float: right;
48
+	text-align: right;
49
+	margin-bottom: 10px;
50
+}
51
+
52
+.dataTables_filter:after {
53
+	display: block;
54
+	clear: both;
55
+	content: '';
56
+}
57
+
58
+.dataTables_filter input {
59
+	border: 1px solid #ddd;
60
+	padding: 10px;
61
+	font-zize: 13px;
62
+	-moz-border-radius: 3px;
63
+	-webkit-border-radius: 3px;
64
+	border-radius: 3px;
65
+	margin-left: 5px;
66
+}
67
+
68
+.dataTables_filter input:focus {
69
+	border-color: #999;
70
+	-moz-box-shadow: 3px 3px 0 rgba(0,0,0,0.05);
71
+	-webkit-box-shadow: 3px 3px 0 rgba(0,0,0,0.05);
72
+	box-shadow: 3px 3px 0 rgba(0,0,0,0.05);
73
+}
74
+
75
+.dataTables_info {
76
+	clear: both;
77
+	float: left;
78
+}
79
+
80
+.dataTables_paginate {
81
+	float: right;
82
+	text-align: right;
83
+}
84
+
85
+.dataTables_paginate a.paginate_button,
86
+.dataTables_paginate a.paginate_active {
87
+	border: 1px solid #ddd;
88
+	padding: 6px 12px;
89
+	margin-right: 5px;
90
+	cursor: pointer;
91
+	color: #636E7B;
92
+	line-height: 21px;
93
+	float: left;
94
+	position: relative;
95
+	background: #fff;
96
+	display: inline-block;
97
+	-moz-border-radius: 3px;
98
+	-webkit-border-radius: 3px;
99
+	border-radius: 3px;
100
+}
101
+
102
+.dataTables_paginate > li:first-child > a,
103
+.dataTables_paginate > li:first-child > span {
104
+	border-bottom-left-radius: 3px;
105
+	border-top-left-radius: 3px;
106
+}
107
+
108
+.dataTables_paginate a.paginate_button:hover {
109
+	text-decoration: none !important;
110
+	background-color: #E4E7EA;
111
+}
112
+
113
+.dataTables_paginate a.current,
114
+.dataTables_paginate a.current:hover {
115
+	background-color: #1CAF9A;
116
+	border-color: #1CAF9A;
117
+	color: #fff;
118
+}
119
+
120
+.dataTables_paginate a:focus {
121
+	text-decoration: none;
122
+}
123
+
124
+.dataTables_paginate a.last {
125
+	margin-right: 0;
126
+}
127
+
128
+/* Two button pagination - previous / next */
129
+.paginate_disabled_previous,
130
+.paginate_enabled_previous,
131
+.paginate_disabled_next,
132
+.paginate_enabled_next {
133
+	float: left;
134
+	cursor: pointer;
135
+	padding: 6px 15px;
136
+	display: inline-block;
137
+	-moz-border-radius: 3px;
138
+	-webkit-border-radius: 3px;
139
+	border-radius: 3px;
140
+	color: #666;
141
+}
142
+
143
+.paginate_enabled_previous,
144
+.paginate_enabled_next {
145
+	color: #fff;
146
+	background: #428BCA;
147
+	border: 1px solid #357EBD;
148
+}
149
+
150
+.paginate_enabled_previous:hover,
151
+.paginate_enabled_next:hover {
152
+	color: #fff;
153
+	background: #3276B1;
154
+	border-color: #285E8E;
155
+	color: #fff;
156
+	text-decoration: none;
157
+}
158
+
159
+.paginate_disabled_previous,
160
+.paginate_disabled_next {
161
+	border: 1px solid #ccc;
162
+	background-color: #ddd;
163
+	color: #999;
164
+}
165
+
166
+.paginate_disabled_previous:hover,
167
+.paginate_disabled_next:hover {
168
+	text-decoration: none;
169
+	color: #999;
170
+	cursor: default;
171
+}
172
+
173
+.paginate_disabled_next,
174
+.paginate_enabled_next {
175
+	margin-left: 5px;
176
+}
177
+
178
+
179
+/* Full number pagination */
180
+.paging_full_numbers {
181
+	line-height: 21px;
182
+	
183
+}
184
+.paging_full_numbers a:active {
185
+	outline: none
186
+}
187
+.paging_full_numbers a:hover {
188
+	text-decoration: none;
189
+}
190
+
191
+.paginate_button_disabled {
192
+	opacity: 0.5;
193
+}
194
+
195
+.paginate_button_disabled:hover {
196
+	cursor: default !important;
197
+	background-color: #fff !important;
198
+}
199
+
200
+
201
+/*
202
+ * Processing indicator
203
+ */
204
+.dataTables_processing {
205
+	position: absolute;
206
+	top: 50%;
207
+	left: 50%;
208
+	width: 250px;
209
+	height: 30px;
210
+	margin-left: -125px;
211
+	margin-top: -15px;
212
+	padding: 14px 0 2px 0;
213
+	border: 1px solid #ddd;
214
+	text-align: center;
215
+	color: #999;
216
+	font-size: 14px;
217
+	background-color: white;
218
+}
219
+
220
+
221
+/*
222
+ * Sorting
223
+ */
224
+.sorting {
225
+	background-image: url('../images/sort_both.png');
226
+}
227
+
228
+.sorting_asc {
229
+	background-image: url('../images/sort_asc.png');
230
+}
231
+
232
+.sorting_desc {
233
+	background-image: url('../images/sort_desc.png');
234
+}
235
+
236
+.sorting_asc_disabled {
237
+	background-image: url('../images/sort_asc_disabled.png');
238
+}
239
+
240
+.sorting_desc_disabled {
241
+	background-image: url('../images/sort_desc_disabled.png');
242
+}
243
+ 
244
+table.dataTable thead th:active,
245
+table.dataTable thead td:active {
246
+	outline: none;
247
+}
248
+
249
+
250
+/*
251
+ * Scrolling
252
+ */
253
+.dataTables_scroll {
254
+	clear: both;
255
+}
256
+
257
+.dataTables_scrollBody {
258
+	*margin-top: -1px;
259
+	-webkit-overflow-scrolling: touch;
260
+}
261
+

+ 99
- 0
sampleProject/public/assets/css/jquery.gritter.css View File

@@ -0,0 +1,99 @@
1
+
2
+#gritter-notice-wrapper {
3
+	position:fixed;
4
+	top:20px;
5
+	right:20px;
6
+	width:301px;
7
+	z-index:9999;
8
+}
9
+
10
+.gritter-item-wrapper {
11
+	position:relative;
12
+	margin:0 0 10px 0;
13
+	background: #000;
14
+	background: rgba(0,0,0,0.75);
15
+	-moz-border-radius: 3px;
16
+	-webkit-border-radius: 3px;
17
+	border-radius: 3px;
18
+}
19
+
20
+.growl-primary {
21
+	background: rgba(66,139,202,0.80);
22
+}
23
+
24
+.growl-success {
25
+	background: rgba(28,175,154,0.80);
26
+}
27
+
28
+.growl-warning {
29
+	background: rgba(240,173,78,0.80);
30
+}
31
+
32
+.growl-danger {
33
+	background: rgba(217,83,79,0.80);
34
+}
35
+
36
+.growl-info {
37
+	background: rgba(91,192,222,0.80);
38
+}
39
+
40
+.gritter-item {
41
+	display:block;
42
+	color:#eee;
43
+	padding: 15px;
44
+	font-size: 11px;
45
+}
46
+
47
+.gritter-item p {
48
+	padding:0;
49
+	margin:0;
50
+	word-wrap:break-word;
51
+	line-height: 18px;
52
+	font-size: 13px;
53
+	opacity: 0.75;
54
+}
55
+
56
+.gritter-close {
57
+	display:none;
58
+	position:absolute;
59
+	top: 10px;
60
+	right: 10px;
61
+	background: url(../images/close-white.png) no-repeat center center;
62
+	cursor:pointer;
63
+	width:10px;
64
+	height:11px;
65
+	text-indent:-9999em;
66
+	opacity: 0.5;
67
+}
68
+
69
+.gritter-title {
70
+	font-size: 14px;
71
+	padding:0 0 7px 0;
72
+	display:block;
73
+	font-family: 'LatoBold';
74
+}
75
+
76
+.gritter-image {
77
+	width:48px;
78
+	height:48px;
79
+	float:left;
80
+}
81
+
82
+.gritter-with-image,
83
+.gritter-without-image {
84
+	padding:0;
85
+}
86
+
87
+.gritter-with-image {
88
+	width:220px;
89
+	float:right;
90
+	padding-left: 10px;
91
+}
92
+
93
+/* for the light (white) version of the gritter notice */
94
+.gritter-light .gritter-item {
95
+	background: #fff;
96
+    background: rgba(255,255,255,0.75);
97
+    color: #666;
98
+}
99
+

+ 67
- 0
sampleProject/public/assets/css/jquery.tagsinput.css View File

@@ -0,0 +1,67 @@
1
+div.tagsinput {
2
+   border:1px solid #ccc;
3
+   background: #FFF;
4
+   padding:5px;
5
+   width:300px;
6
+   height:100px;
7
+   overflow-y: auto;
8
+   -moz-border-radius: 2px;
9
+   -webkit-border-radius: 2px;
10
+   border-radius: 2px;
11
+}
12
+
13
+div.tagsinput span.tag {
14
+   display: block;
15
+   float: left;
16
+   padding: 2px 5px;
17
+   text-decoration:none;
18
+   background: #1caf9a;
19
+   color: #fff;
20
+   margin-right: 5px;
21
+   margin-bottom:5px;
22
+   font-size:13px;
23
+   -moz-border-radius: 2px;
24
+   -webkit-border-radius: 2px;
25
+   border-radius: 2px;
26
+}
27
+
28
+div.tagsinput span.tag a {
29
+   font-weight: bold;
30
+   color: #fff;
31
+   opacity: 0.5;
32
+   text-decoration: none;
33
+   font-size: 11px;
34
+}
35
+
36
+div.tagsinput span.tag a:hover {
37
+   opacity: 1;
38
+}
39
+
40
+div.tagsinput input {
41
+   width: 80px;
42
+   margin: 0px;
43
+   font-size: 13px;
44
+   border: 1px solid transparent;
45
+   padding: 5px;
46
+   background: transparent;
47
+   color: #000;
48
+   outline: 0px;
49
+   margin-right: 5px;
50
+   margin-bottom: 5px;
51
+}
52
+
53
+div.tagsinput div {
54
+   display: block;
55
+   float: left;
56
+} 
57
+
58
+.tags_clear {
59
+   clear: both;
60
+   width: 100%;
61
+   height: 0px;
62
+}
63
+
64
+.not_valid {
65
+   background: #FBD8DB !important;
66
+   color: #90111A !important;
67
+}

+ 0
- 0
sampleProject/public/assets/css/lato.css View File


Some files were not shown because too many files changed in this diff