smart_monkey 0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.rspec +1 -0
- data/Gemfile +17 -0
- data/LICENSE.txt +21 -0
- data/README.md +77 -0
- data/Rakefile +57 -0
- data/Troubleshooting.md +61 -0
- data/VERSION +1 -0
- data/bin/smart_monkey +53 -0
- data/lib/bootstrap/css/bootstrap-responsive.css +1109 -0
- data/lib/bootstrap/css/bootstrap-responsive.min.css +9 -0
- data/lib/bootstrap/css/bootstrap.css +6167 -0
- data/lib/bootstrap/css/bootstrap.min.css +9 -0
- data/lib/bootstrap/img/glyphicons-halflings-white.png +0 -0
- data/lib/bootstrap/img/glyphicons-halflings.png +0 -0
- data/lib/bootstrap/js/bootstrap.js +2280 -0
- data/lib/bootstrap/js/bootstrap.min.js +6 -0
- data/lib/ios_device_log/deviceconsole +0 -0
- data/lib/smart_monkey.rb +2 -0
- data/lib/smart_monkey/command_helper.rb +71 -0
- data/lib/smart_monkey/monkey_runner.rb +549 -0
- data/lib/smart_monkey/templates/automation_result.xsl +61 -0
- data/lib/smart_monkey/templates/index.html.erb +77 -0
- data/lib/smart_monkey/templates/result.html.erb +110 -0
- data/lib/smart_monkey/templates/result_view.coffee +160 -0
- data/lib/smart_monkey/templates/result_view.js +250 -0
- data/lib/ui-auto-monkey/UIAutoMonkey.js +470 -0
- data/lib/ui-auto-monkey/custom.js +73 -0
- data/lib/ui-auto-monkey/handler/buttonHandler.js +111 -0
- data/lib/ui-auto-monkey/handler/wbScrollViewButtonHandler.js +114 -0
- data/lib/ui-auto-monkey/tuneup/LICENSE +20 -0
- data/lib/ui-auto-monkey/tuneup/assertions.js +402 -0
- data/lib/ui-auto-monkey/tuneup/image_asserter +26 -0
- data/lib/ui-auto-monkey/tuneup/image_assertion.js +65 -0
- data/lib/ui-auto-monkey/tuneup/image_assertion.rb +102 -0
- data/lib/ui-auto-monkey/tuneup/lang-ext.js +76 -0
- data/lib/ui-auto-monkey/tuneup/screen.js +11 -0
- data/lib/ui-auto-monkey/tuneup/test.js +71 -0
- data/lib/ui-auto-monkey/tuneup/test_runner/abbreviated_console_output.rb +38 -0
- data/lib/ui-auto-monkey/tuneup/test_runner/colored_console_output.rb +27 -0
- data/lib/ui-auto-monkey/tuneup/test_runner/console_output.rb +17 -0
- data/lib/ui-auto-monkey/tuneup/test_runner/preprocessor.rb +25 -0
- data/lib/ui-auto-monkey/tuneup/test_runner/run +343 -0
- data/lib/ui-auto-monkey/tuneup/test_runner/xunit_output.rb +114 -0
- data/lib/ui-auto-monkey/tuneup/tuneup.js +6 -0
- data/lib/ui-auto-monkey/tuneup/tuneup_js.podspec +52 -0
- data/lib/ui-auto-monkey/tuneup/uiautomation-ext.js +965 -0
- data/smart_monkey.gemspec +112 -0
- data/spec/spec_helper.rb +12 -0
- metadata +192 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8342fc2f55af7b00897b50d1e9c9dc4f02b7bd7e
|
4
|
+
data.tar.gz: 0e9ef1d8c30972e7ad1ea735df8d6f80c44fed85
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b3d572235038dedab530fc696f2025659ae0f3752f65a595b75d354db141f222e1987752436a87821965be2473a9b09c99916328b7c32c083cc815a1caef252d
|
7
|
+
data.tar.gz: 0c1bcb339cf860c76c46aa1d7f0a6a87e80f1a1369db707355f82a02436043d7dc45db8e96e7b9a7a011ac781686dccef1c4ee1c7d3ec6861cf9888d0618e5ee
|
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/Gemfile
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
# Specify your gem's dependencies in smart_monkey.gemspec
|
4
|
+
gem 'erubis', '>= 2.7.0'
|
5
|
+
gem 'json', '>= 1.7.0'
|
6
|
+
|
7
|
+
group :development do
|
8
|
+
gem 'rspec', '~> 2.8.0'
|
9
|
+
gem 'rdoc', '~> 3.12'
|
10
|
+
gem 'bundler', '> 1.0.0'
|
11
|
+
gem 'jeweler', '~> 1.8.4'
|
12
|
+
if RUBY_VERSION > '1.9' then
|
13
|
+
gem 'simplecov', '>= 0.8.2'
|
14
|
+
else
|
15
|
+
gem 'rcov', '>= 0'
|
16
|
+
end
|
17
|
+
end
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2015 vigossjjj
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
# CrashMonkey4IOS
|
2
|
+
iOS Monkey Test Tool.
|
3
|
+
|
4
|
+
###改进点:
|
5
|
+
1. 原先的CrashMonkey只支持iPhone Simulator测试,修改后**支持真机测试**(目前模拟器的兼容没有做)
|
6
|
+
2. 支持真机收集**系统日志(Systemlog)**,利用[deviceconsole][dc]实现
|
7
|
+
3. 支持真机收集**崩溃日志(Crashlog)**,利用[libimobiledevice][lidvc]的**idevicecrashreport**实现
|
8
|
+
4. 解决在iPhone5及以上分辨率的设备上测试报告截图手势坐标绘制错误的问题
|
9
|
+
5. 解决判定crash出现失败的情况。
|
10
|
+
6. 测试报告中添加设备信息及应用信息(Summary下)
|
11
|
+
7. 使用最新版的[UIAutoMonkey][uiatmonkey],加入`UI Holes`与`Application Not Repsonding ("ANR")`的处理,添加[custom.js][custom]作为入口脚本.
|
12
|
+
8. 加入[tuneup][tp]依赖
|
13
|
+
9. 修改**UIAutoMonkey.js**中截图策略,为每个Event Action进行截图
|
14
|
+
10. 修改**CrashMonkey**中测试报告显示截图策略,增加至最近的50张
|
15
|
+
11. 解决大家一直所诟病的iOS App执行Monkey测试过程当中跳出程序后,导致脚本block,App无法自动返回的问题,解决方案:利用一个线程去监听instruments执行过程当中的日志,每隔20s进行前后比对,如果日志没有更新则说明App hanged,利用**idevicedebug**恢复App至前台。
|
16
|
+
[lidvc]:https://github.com/libimobiledevice/libimobiledevice
|
17
|
+
[dc]:https://github.com/rpetrich/deviceconsole
|
18
|
+
[uiatmonkey]: https://github.com/jonathanpenn/ui-auto-monkey/blob/master/UIAutoMonkey.js
|
19
|
+
[custom]:https://github.com/vigossjjj/CrashMonkey4IOS/blob/master/lib/ui-auto-monkey/custom.js
|
20
|
+
[tp]:https://github.com/vigossjjj/CrashMonkey4IOS/tree/master/lib/ui-auto-monkey/tuneup
|
21
|
+
[troubleshooting]:https://github.com/vigossjjj/CrashMonkey4IOS/tree/master/Troubleshooting.md
|
22
|
+
|
23
|
+
###依赖及安装:
|
24
|
+
1. 安装Ruby运行环境,建议不要使用OS X自带版本,可自行使用RVM安装最新版的Ruby。建议使用淘宝镜像安装,速度比较快,`$ sed -i -e 's/ftp\.ruby-lang\.org\/pub\/ruby/ruby\.taobao\.org\/mirrors\/ruby/g' ~/.rvm/config/db`
|
25
|
+
2. 确保gem可用,也建议使用淘宝镜像 `gem sources --remove https://rubygems.org/;gem sources -a http://ruby.taobao.org/;gem sources -l`
|
26
|
+
3. 安装**Homebrew** `ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"`
|
27
|
+
|
28
|
+
###使用说明:
|
29
|
+
1. 运行`sh reset.sh`安装相关依赖
|
30
|
+
2. 执行前需要先配置[custom.js][custom]相关参数
|
31
|
+
3. 执行命令`/CrashMonkey4IOS/bin/smart_monkey -a ${App_BunnelID} -w ${iPhone_UDID} -n 1`
|
32
|
+
|
33
|
+
###参数说明:
|
34
|
+
```
|
35
|
+
Usage: smart_monkey [options]
|
36
|
+
-a app_name Target Application, abs path to simulator-compiled .app file or the bundle_id of the desired target on device(Required)
|
37
|
+
-w device Target Device UDID(Required)
|
38
|
+
-n run_count How many times monkeys run(default: 1)
|
39
|
+
-d result_dir Where to output result(default: ./smart_monkey_result)
|
40
|
+
-t time_limit_sec Time limit of running(default: 100 sec)
|
41
|
+
-s dsym_file Use .dSYM file to symbolicating crash logs
|
42
|
+
-c custom_path Configuration custom.js Path
|
43
|
+
-e extend_javascript_path Extend Uiautomation Javascript for such Login scripts
|
44
|
+
--compress-result compress_rate
|
45
|
+
compress the screenshot images to save disk space!(example: 50%)
|
46
|
+
--detail-count detail_event_count
|
47
|
+
How many events to show in detail result page(default 50)
|
48
|
+
--show-config Show Current Configuration custom.js
|
49
|
+
--drop-useless-img Delete the un-displayed images of detial page.
|
50
|
+
--list-app Show List of Installed Apps in iPhone/iPhone Simulator
|
51
|
+
--list-devices Show List of Devices
|
52
|
+
--reset-iPhone-Simulator Reset iPhone Simulator
|
53
|
+
--version print crash monkey version
|
54
|
+
```
|
55
|
+
|
56
|
+
###TODO List:
|
57
|
+
1. 适配iPhone Simulator
|
58
|
+
2. 修改配置脚本及文档。
|
59
|
+
|
60
|
+
###Troubleshooting:
|
61
|
+
安装和执行测试遇到的问题解决方案请参看:[Troubleshooting.md][troubleshooting]
|
62
|
+
|
63
|
+
###测试报告:
|
64
|
+
***Summary:***
|
65
|
+
<img alt="summary" src="https://github.com/vigossjjj/CrashMonkey4IOS/blob/master/img/summary.jpg">
|
66
|
+
***Detail:***
|
67
|
+
<img alt="detail" src="https://github.com/vigossjjj/CrashMonkey4IOS/blob/master/img/detail.jpg">
|
68
|
+
***SystemLog:***
|
69
|
+
<img alt="systemlog" src="https://github.com/vigossjjj/CrashMonkey4IOS/blob/master/img/systemlog.jpg">
|
70
|
+
***CrashLog:***
|
71
|
+
<img alt="crashlog" src="https://github.com/vigossjjj/CrashMonkey4IOS/blob/master/img/crashlog.jpg">
|
72
|
+
***uiautotrace:***
|
73
|
+
<img alt="uiautotrace" src="https://github.com/vigossjjj/CrashMonkey4IOS/blob/master/img/uiauto_trace.jpg">
|
74
|
+
|
75
|
+
###参考文献:
|
76
|
+
1. https://github.com/mokemokechicken/CrashMonkey
|
77
|
+
2. https://github.com/jonathanpenn/ui-auto-monkey
|
data/Rakefile
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'bundler'
|
5
|
+
begin
|
6
|
+
Bundler.setup(:default, :development)
|
7
|
+
rescue Bundler::BundlerError => e
|
8
|
+
$stderr.puts e.message
|
9
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
10
|
+
exit e.status_code
|
11
|
+
end
|
12
|
+
require 'rake'
|
13
|
+
|
14
|
+
require 'jeweler'
|
15
|
+
Jeweler::Tasks.new do |gem|
|
16
|
+
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
17
|
+
gem.name = 'smart_monkey'
|
18
|
+
gem.homepage = 'https://github.com/vigossjjj/CrashMonkey4IOS'
|
19
|
+
gem.license = 'MIT'
|
20
|
+
gem.summary = 'Monkey Test For iOS Application'
|
21
|
+
gem.description = 'This is a Monkey Test Tool using UIAutomation.'
|
22
|
+
gem.email = 'jiangyunpeng@58.com'
|
23
|
+
gem.authors = ['vigossjjj']
|
24
|
+
# dependencies defined in Gemfile
|
25
|
+
end
|
26
|
+
Jeweler::RubygemsDotOrgTasks.new
|
27
|
+
|
28
|
+
require 'rspec/core'
|
29
|
+
require 'rspec/core/rake_task'
|
30
|
+
RSpec::Core::RakeTask.new(:spec) do |spec|
|
31
|
+
spec.pattern = FileList['spec/**/*_spec.rb']
|
32
|
+
end
|
33
|
+
|
34
|
+
if RUBY_VERSION > '1.9'
|
35
|
+
desc "Code coverage detail"
|
36
|
+
task :simplecov do
|
37
|
+
ENV['COVERAGE'] = "true"
|
38
|
+
Rake::Task['spec'].execute
|
39
|
+
end
|
40
|
+
else
|
41
|
+
RSpec::Core::RakeTask.new(:rcov) do |spec|
|
42
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
43
|
+
spec.rcov = true
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
task :default => :spec
|
48
|
+
|
49
|
+
require 'rdoc/task'
|
50
|
+
Rake::RDocTask.new do |rdoc|
|
51
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ''
|
52
|
+
|
53
|
+
rdoc.rdoc_dir = 'rdoc'
|
54
|
+
rdoc.title = "CrashMonkey #{version}"
|
55
|
+
rdoc.rdoc_files.include('README*')
|
56
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
57
|
+
end
|
data/Troubleshooting.md
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
#Troubleshooting for CrashMonkey4IOS
|
2
|
+
|
3
|
+
CrashMonkey4IOS 安装环节中的问题总结和处理。
|
4
|
+
|
5
|
+
CrashMonkey4IOS 开发环境:OS X Yosemtie 10.10.x
|
6
|
+
|
7
|
+
**特殊强调:**写这个文档的目的是让大家顺利正确的安装CrashMonkey4IOS工具,建议大家根据reset.sh中的命令一步一步的进行工具安装和环境配置,那一步遇到问题都能即使的看见日志反馈的结果,我们开发reset.sh时也是出于提供一个简单便捷的一键安装操作,但现在看来各位的实际环境各有差异,后期也会进一步的优化 reset.sh 。
|
8
|
+
|
9
|
+
注意事项如下:
|
10
|
+
|
11
|
+
1.运行日志中包含: `warning: Insecure world writable dir /some/path in PATH, mode 040777`, 但不影响执行, **解决方案:**`chmod go-w /some/path`
|
12
|
+
|
13
|
+
2.不要使用sudo执行执行 sh reset.sh(具体原因参看下文)
|
14
|
+
|
15
|
+
3.确保被测app被移至后台后进程不会被强制杀死。
|
16
|
+
|
17
|
+
|
18
|
+
####安装过程使用reset.sh时(推荐执行前手动更新本地的ruby和homebrew版本)
|
19
|
+
***问题1: gem install erubis 需要用户本地的管理员权限***
|
20
|
+
|
21
|
+
如果没有安装成功这个erubis模块的话会在/CrashMonkey4IOS/bin下运行 ./smart_monkey 后ruby报错 erubis的错误:
|
22
|
+
|
23
|
+
日志截图:
|
24
|
+
|
25
|
+
a.直接运行 sh reset.sh(很容易被忽略)
|
26
|
+
|
27
|
+
<img alt="summary" src="https://github.com/vigossjjj/CrashMonkey4IOS/blob/master/img/geminstallerror.png">
|
28
|
+
|
29
|
+
b.如果没有安装成功这个erubis模块的话会在/CrashMonkey4IOS/bin下运行 ./smart_monkey 后ruby报错 erubis的错误:
|
30
|
+
|
31
|
+
<img alt="summary" src="https://github.com/vigossjjj/CrashMonkey4IOS/blob/master/img/erubisCannotFound.png">
|
32
|
+
|
33
|
+
解决方案: sudo gem install erubis
|
34
|
+
|
35
|
+
***问题2: brew update 如果本地的homebrew版本已经更新过可以直接忽略该问题***
|
36
|
+
|
37
|
+
当前的homebrew与OS X版本需要相互兼容,多数用户不会在OS X升级后也随之更新(需要手动更新)
|
38
|
+
|
39
|
+
解决方案:先执行 brew upgrade 后再 brew update
|
40
|
+
|
41
|
+
|
42
|
+
日志截图:
|
43
|
+
|
44
|
+
<img alt="summary" src="https://github.com/vigossjjj/CrashMonkey4IOS/blob/master/img/brewupdatesuccess.png">
|
45
|
+
|
46
|
+
***问题3: brew install libimobiledevice 需要用户本地的管理员权限***
|
47
|
+
|
48
|
+
日志截图:
|
49
|
+
|
50
|
+
<img alt="summary" src="https://github.com/vigossjjj/CrashMonkey4IOS/blob/master/img/sudobrewinstallerror.png">
|
51
|
+
|
52
|
+
解决方案:sudo chown -R $USER /usr/local 提取用户权限,而不要直接 sudo brew install libimobiledevice 这样会出现以上错误
|
53
|
+
|
54
|
+
|
55
|
+
***问题4: 出现脚本无法运行在iphone设备上运行***
|
56
|
+
|
57
|
+
日志截图:
|
58
|
+
|
59
|
+
<img alt="summary" src="https://github.com/vigossjjj/CrashMonkey4IOS/blob/master/img/enableUIAutomation.png">
|
60
|
+
|
61
|
+
解决方案: 该问题属于iphone设置问题,首先查看设置中“开发者”中启用“EnableUIAutomation”选项,如果没有“开发者”需要连接iphone和OS X 使用xcode进行设备识别。
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1
|
data/bin/smart_monkey
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# coding: utf-8
|
3
|
+
Encoding.default_external = Encoding::UTF_8
|
4
|
+
Encoding.default_internal = Encoding::UTF_8
|
5
|
+
Version = File.read(File.expand_path('../../VERSION', __FILE__))
|
6
|
+
|
7
|
+
require 'optparse'
|
8
|
+
|
9
|
+
$: << File.dirname(__FILE__) + '/../lib'
|
10
|
+
require 'smart_monkey'
|
11
|
+
|
12
|
+
opts = {}
|
13
|
+
ARGV.options do |o|
|
14
|
+
o.on('-a app_name', 'Target Application, abs path to simulator-compiled .app file or the bundle_id of the desired target on device(Required)') {|b| opts[:app_path] = b}
|
15
|
+
o.on('-w device', 'Target Device UDID(Required)') {|b| opts[:device] = b}
|
16
|
+
o.on('-n run_count', 'How many times monkeys run(default: 1)') {|b| opts[:run_count] = b.to_i}
|
17
|
+
o.on('-d result_dir', 'Where to output result(default: ./smart_monkey_result)') {|b| opts[:result_base_dir] = File.expand_path(b)}
|
18
|
+
o.on('-t time_limit_sec', 'Time limit of running(default: 100 sec)') {|b| opts[:time_limit_sec] = b.to_i}
|
19
|
+
o.on('-s dsym_file', 'Use .dSYM file to symbolicating crash logs') {|b| opts[:dsym_file_path] = File.expand_path(b)}
|
20
|
+
o.on('-c custom_path', 'Configuration custom.js Path') {|b| opts[:custom_path] = File.expand_path(b)}
|
21
|
+
o.on('-e extend_javascript_path', 'Extend Uiautomation Javascript for such Login scripts') {|b| opts[:extend_javascript_path] = File.expand_path(b)}
|
22
|
+
o.on('--compress-result compress_rate', 'compress the screenshot images to save disk space!(example: 50%)'){|b| opts[:compress_rate] = b}
|
23
|
+
o.on('--detail-count detail_event_count', 'How many events to show in detail result page(default 50)'){|b| opts[:detail_event_count] = b.to_i}
|
24
|
+
o.on('--show-config', 'Show Current Configuration custom.js') {|_| opts[:show_config] = true}
|
25
|
+
o.on('--drop-useless-img', 'Delete the un-displayed images of detial page.') {|_| opts[:drop_useless_img] = true}
|
26
|
+
o.on('--list-app', 'Show List of Installed Apps in iPhone/iPhone Simulator') {|_| opts[:list_app] = true}
|
27
|
+
o.on('--list-devices', 'Show List of Devices') {|_| opts[:list_devices] = true}
|
28
|
+
o.on('--reset-iPhone-Simulator', 'Reset iPhone Simulator'){|_| opts[:reset_iphone_simulator] = true}
|
29
|
+
o.on('--version', 'print crash monkey version'){|_| opts[:version] = true}
|
30
|
+
o.parse!
|
31
|
+
end
|
32
|
+
|
33
|
+
if opts[:version]
|
34
|
+
dirname = File.dirname(File.dirname(__FILE__))
|
35
|
+
filepath = File.join(dirname, "VERSION")
|
36
|
+
puts File.open(filepath, 'rb') { |file| file.read }
|
37
|
+
exit(1)
|
38
|
+
end
|
39
|
+
|
40
|
+
unless opts[:app_path] || opts[:show_config] || opts[:list_app] || opts[:reset_iphone_simulator] || opts[:list_devices]
|
41
|
+
puts ARGV.options.help
|
42
|
+
exit(1)
|
43
|
+
end
|
44
|
+
|
45
|
+
opts[:run_count] ||= 1
|
46
|
+
opts[:time_limit_sec] ||= nil
|
47
|
+
opts[:detail_event_count] ||= 50
|
48
|
+
|
49
|
+
result_ok = UIAutoMonkey::MonkeyRunner.new.run(opts)
|
50
|
+
|
51
|
+
puts result_ok ? 'EXIT 0' : 'EXIT 1' unless opts[:show_config] || opts[:list_app] || opts[:list_devices]
|
52
|
+
|
53
|
+
exit(result_ok ? 0 : 1)
|
@@ -0,0 +1,1109 @@
|
|
1
|
+
/*!
|
2
|
+
* Bootstrap Responsive v2.3.2
|
3
|
+
*
|
4
|
+
* Copyright 2012 Twitter, Inc
|
5
|
+
* Licensed under the Apache License v2.0
|
6
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
7
|
+
*
|
8
|
+
* Designed and built with all the love in the world @twitter by @mdo and @fat.
|
9
|
+
*/
|
10
|
+
|
11
|
+
.clearfix {
|
12
|
+
*zoom: 1;
|
13
|
+
}
|
14
|
+
|
15
|
+
.clearfix:before,
|
16
|
+
.clearfix:after {
|
17
|
+
display: table;
|
18
|
+
line-height: 0;
|
19
|
+
content: "";
|
20
|
+
}
|
21
|
+
|
22
|
+
.clearfix:after {
|
23
|
+
clear: both;
|
24
|
+
}
|
25
|
+
|
26
|
+
.hide-text {
|
27
|
+
font: 0/0 a;
|
28
|
+
color: transparent;
|
29
|
+
text-shadow: none;
|
30
|
+
background-color: transparent;
|
31
|
+
border: 0;
|
32
|
+
}
|
33
|
+
|
34
|
+
.input-block-level {
|
35
|
+
display: block;
|
36
|
+
width: 100%;
|
37
|
+
min-height: 30px;
|
38
|
+
-webkit-box-sizing: border-box;
|
39
|
+
-moz-box-sizing: border-box;
|
40
|
+
box-sizing: border-box;
|
41
|
+
}
|
42
|
+
|
43
|
+
@-ms-viewport {
|
44
|
+
width: device-width;
|
45
|
+
}
|
46
|
+
|
47
|
+
.hidden {
|
48
|
+
display: none;
|
49
|
+
visibility: hidden;
|
50
|
+
}
|
51
|
+
|
52
|
+
.visible-phone {
|
53
|
+
display: none !important;
|
54
|
+
}
|
55
|
+
|
56
|
+
.visible-tablet {
|
57
|
+
display: none !important;
|
58
|
+
}
|
59
|
+
|
60
|
+
.hidden-desktop {
|
61
|
+
display: none !important;
|
62
|
+
}
|
63
|
+
|
64
|
+
.visible-desktop {
|
65
|
+
display: inherit !important;
|
66
|
+
}
|
67
|
+
|
68
|
+
@media (min-width: 768px) and (max-width: 979px) {
|
69
|
+
.hidden-desktop {
|
70
|
+
display: inherit !important;
|
71
|
+
}
|
72
|
+
.visible-desktop {
|
73
|
+
display: none !important ;
|
74
|
+
}
|
75
|
+
.visible-tablet {
|
76
|
+
display: inherit !important;
|
77
|
+
}
|
78
|
+
.hidden-tablet {
|
79
|
+
display: none !important;
|
80
|
+
}
|
81
|
+
}
|
82
|
+
|
83
|
+
@media (max-width: 767px) {
|
84
|
+
.hidden-desktop {
|
85
|
+
display: inherit !important;
|
86
|
+
}
|
87
|
+
.visible-desktop {
|
88
|
+
display: none !important;
|
89
|
+
}
|
90
|
+
.visible-phone {
|
91
|
+
display: inherit !important;
|
92
|
+
}
|
93
|
+
.hidden-phone {
|
94
|
+
display: none !important;
|
95
|
+
}
|
96
|
+
}
|
97
|
+
|
98
|
+
.visible-print {
|
99
|
+
display: none !important;
|
100
|
+
}
|
101
|
+
|
102
|
+
@media print {
|
103
|
+
.visible-print {
|
104
|
+
display: inherit !important;
|
105
|
+
}
|
106
|
+
.hidden-print {
|
107
|
+
display: none !important;
|
108
|
+
}
|
109
|
+
}
|
110
|
+
|
111
|
+
@media (min-width: 1200px) {
|
112
|
+
.row {
|
113
|
+
margin-left: -30px;
|
114
|
+
*zoom: 1;
|
115
|
+
}
|
116
|
+
.row:before,
|
117
|
+
.row:after {
|
118
|
+
display: table;
|
119
|
+
line-height: 0;
|
120
|
+
content: "";
|
121
|
+
}
|
122
|
+
.row:after {
|
123
|
+
clear: both;
|
124
|
+
}
|
125
|
+
[class*="span"] {
|
126
|
+
float: left;
|
127
|
+
min-height: 1px;
|
128
|
+
margin-left: 30px;
|
129
|
+
}
|
130
|
+
.container,
|
131
|
+
.navbar-static-top .container,
|
132
|
+
.navbar-fixed-top .container,
|
133
|
+
.navbar-fixed-bottom .container {
|
134
|
+
width: 1170px;
|
135
|
+
}
|
136
|
+
.span12 {
|
137
|
+
width: 1170px;
|
138
|
+
}
|
139
|
+
.span11 {
|
140
|
+
width: 1070px;
|
141
|
+
}
|
142
|
+
.span10 {
|
143
|
+
width: 970px;
|
144
|
+
}
|
145
|
+
.span9 {
|
146
|
+
width: 870px;
|
147
|
+
}
|
148
|
+
.span8 {
|
149
|
+
width: 770px;
|
150
|
+
}
|
151
|
+
.span7 {
|
152
|
+
width: 670px;
|
153
|
+
}
|
154
|
+
.span6 {
|
155
|
+
width: 570px;
|
156
|
+
}
|
157
|
+
.span5 {
|
158
|
+
width: 470px;
|
159
|
+
}
|
160
|
+
.span4 {
|
161
|
+
width: 370px;
|
162
|
+
}
|
163
|
+
.span3 {
|
164
|
+
width: 270px;
|
165
|
+
}
|
166
|
+
.span2 {
|
167
|
+
width: 170px;
|
168
|
+
}
|
169
|
+
.span1 {
|
170
|
+
width: 70px;
|
171
|
+
}
|
172
|
+
.offset12 {
|
173
|
+
margin-left: 1230px;
|
174
|
+
}
|
175
|
+
.offset11 {
|
176
|
+
margin-left: 1130px;
|
177
|
+
}
|
178
|
+
.offset10 {
|
179
|
+
margin-left: 1030px;
|
180
|
+
}
|
181
|
+
.offset9 {
|
182
|
+
margin-left: 930px;
|
183
|
+
}
|
184
|
+
.offset8 {
|
185
|
+
margin-left: 830px;
|
186
|
+
}
|
187
|
+
.offset7 {
|
188
|
+
margin-left: 730px;
|
189
|
+
}
|
190
|
+
.offset6 {
|
191
|
+
margin-left: 630px;
|
192
|
+
}
|
193
|
+
.offset5 {
|
194
|
+
margin-left: 530px;
|
195
|
+
}
|
196
|
+
.offset4 {
|
197
|
+
margin-left: 430px;
|
198
|
+
}
|
199
|
+
.offset3 {
|
200
|
+
margin-left: 330px;
|
201
|
+
}
|
202
|
+
.offset2 {
|
203
|
+
margin-left: 230px;
|
204
|
+
}
|
205
|
+
.offset1 {
|
206
|
+
margin-left: 130px;
|
207
|
+
}
|
208
|
+
.row-fluid {
|
209
|
+
width: 100%;
|
210
|
+
*zoom: 1;
|
211
|
+
}
|
212
|
+
.row-fluid:before,
|
213
|
+
.row-fluid:after {
|
214
|
+
display: table;
|
215
|
+
line-height: 0;
|
216
|
+
content: "";
|
217
|
+
}
|
218
|
+
.row-fluid:after {
|
219
|
+
clear: both;
|
220
|
+
}
|
221
|
+
.row-fluid [class*="span"] {
|
222
|
+
display: block;
|
223
|
+
float: left;
|
224
|
+
width: 100%;
|
225
|
+
min-height: 30px;
|
226
|
+
margin-left: 2.564102564102564%;
|
227
|
+
*margin-left: 2.5109110747408616%;
|
228
|
+
-webkit-box-sizing: border-box;
|
229
|
+
-moz-box-sizing: border-box;
|
230
|
+
box-sizing: border-box;
|
231
|
+
}
|
232
|
+
.row-fluid [class*="span"]:first-child {
|
233
|
+
margin-left: 0;
|
234
|
+
}
|
235
|
+
.row-fluid .controls-row [class*="span"] + [class*="span"] {
|
236
|
+
margin-left: 2.564102564102564%;
|
237
|
+
}
|
238
|
+
.row-fluid .span12 {
|
239
|
+
width: 100%;
|
240
|
+
*width: 99.94680851063829%;
|
241
|
+
}
|
242
|
+
.row-fluid .span11 {
|
243
|
+
width: 91.45299145299145%;
|
244
|
+
*width: 91.39979996362975%;
|
245
|
+
}
|
246
|
+
.row-fluid .span10 {
|
247
|
+
width: 82.90598290598291%;
|
248
|
+
*width: 82.8527914166212%;
|
249
|
+
}
|
250
|
+
.row-fluid .span9 {
|
251
|
+
width: 74.35897435897436%;
|
252
|
+
*width: 74.30578286961266%;
|
253
|
+
}
|
254
|
+
.row-fluid .span8 {
|
255
|
+
width: 65.81196581196582%;
|
256
|
+
*width: 65.75877432260411%;
|
257
|
+
}
|
258
|
+
.row-fluid .span7 {
|
259
|
+
width: 57.26495726495726%;
|
260
|
+
*width: 57.21176577559556%;
|
261
|
+
}
|
262
|
+
.row-fluid .span6 {
|
263
|
+
width: 48.717948717948715%;
|
264
|
+
*width: 48.664757228587014%;
|
265
|
+
}
|
266
|
+
.row-fluid .span5 {
|
267
|
+
width: 40.17094017094017%;
|
268
|
+
*width: 40.11774868157847%;
|
269
|
+
}
|
270
|
+
.row-fluid .span4 {
|
271
|
+
width: 31.623931623931625%;
|
272
|
+
*width: 31.570740134569924%;
|
273
|
+
}
|
274
|
+
.row-fluid .span3 {
|
275
|
+
width: 23.076923076923077%;
|
276
|
+
*width: 23.023731587561375%;
|
277
|
+
}
|
278
|
+
.row-fluid .span2 {
|
279
|
+
width: 14.52991452991453%;
|
280
|
+
*width: 14.476723040552828%;
|
281
|
+
}
|
282
|
+
.row-fluid .span1 {
|
283
|
+
width: 5.982905982905983%;
|
284
|
+
*width: 5.929714493544281%;
|
285
|
+
}
|
286
|
+
.row-fluid .offset12 {
|
287
|
+
margin-left: 105.12820512820512%;
|
288
|
+
*margin-left: 105.02182214948171%;
|
289
|
+
}
|
290
|
+
.row-fluid .offset12:first-child {
|
291
|
+
margin-left: 102.56410256410257%;
|
292
|
+
*margin-left: 102.45771958537915%;
|
293
|
+
}
|
294
|
+
.row-fluid .offset11 {
|
295
|
+
margin-left: 96.58119658119658%;
|
296
|
+
*margin-left: 96.47481360247316%;
|
297
|
+
}
|
298
|
+
.row-fluid .offset11:first-child {
|
299
|
+
margin-left: 94.01709401709402%;
|
300
|
+
*margin-left: 93.91071103837061%;
|
301
|
+
}
|
302
|
+
.row-fluid .offset10 {
|
303
|
+
margin-left: 88.03418803418803%;
|
304
|
+
*margin-left: 87.92780505546462%;
|
305
|
+
}
|
306
|
+
.row-fluid .offset10:first-child {
|
307
|
+
margin-left: 85.47008547008548%;
|
308
|
+
*margin-left: 85.36370249136206%;
|
309
|
+
}
|
310
|
+
.row-fluid .offset9 {
|
311
|
+
margin-left: 79.48717948717949%;
|
312
|
+
*margin-left: 79.38079650845607%;
|
313
|
+
}
|
314
|
+
.row-fluid .offset9:first-child {
|
315
|
+
margin-left: 76.92307692307693%;
|
316
|
+
*margin-left: 76.81669394435352%;
|
317
|
+
}
|
318
|
+
.row-fluid .offset8 {
|
319
|
+
margin-left: 70.94017094017094%;
|
320
|
+
*margin-left: 70.83378796144753%;
|
321
|
+
}
|
322
|
+
.row-fluid .offset8:first-child {
|
323
|
+
margin-left: 68.37606837606839%;
|
324
|
+
*margin-left: 68.26968539734497%;
|
325
|
+
}
|
326
|
+
.row-fluid .offset7 {
|
327
|
+
margin-left: 62.393162393162385%;
|
328
|
+
*margin-left: 62.28677941443899%;
|
329
|
+
}
|
330
|
+
.row-fluid .offset7:first-child {
|
331
|
+
margin-left: 59.82905982905982%;
|
332
|
+
*margin-left: 59.72267685033642%;
|
333
|
+
}
|
334
|
+
.row-fluid .offset6 {
|
335
|
+
margin-left: 53.84615384615384%;
|
336
|
+
*margin-left: 53.739770867430444%;
|
337
|
+
}
|
338
|
+
.row-fluid .offset6:first-child {
|
339
|
+
margin-left: 51.28205128205128%;
|
340
|
+
*margin-left: 51.175668303327875%;
|
341
|
+
}
|
342
|
+
.row-fluid .offset5 {
|
343
|
+
margin-left: 45.299145299145295%;
|
344
|
+
*margin-left: 45.1927623204219%;
|
345
|
+
}
|
346
|
+
.row-fluid .offset5:first-child {
|
347
|
+
margin-left: 42.73504273504273%;
|
348
|
+
*margin-left: 42.62865975631933%;
|
349
|
+
}
|
350
|
+
.row-fluid .offset4 {
|
351
|
+
margin-left: 36.75213675213675%;
|
352
|
+
*margin-left: 36.645753773413354%;
|
353
|
+
}
|
354
|
+
.row-fluid .offset4:first-child {
|
355
|
+
margin-left: 34.18803418803419%;
|
356
|
+
*margin-left: 34.081651209310785%;
|
357
|
+
}
|
358
|
+
.row-fluid .offset3 {
|
359
|
+
margin-left: 28.205128205128204%;
|
360
|
+
*margin-left: 28.0987452264048%;
|
361
|
+
}
|
362
|
+
.row-fluid .offset3:first-child {
|
363
|
+
margin-left: 25.641025641025642%;
|
364
|
+
*margin-left: 25.53464266230224%;
|
365
|
+
}
|
366
|
+
.row-fluid .offset2 {
|
367
|
+
margin-left: 19.65811965811966%;
|
368
|
+
*margin-left: 19.551736679396257%;
|
369
|
+
}
|
370
|
+
.row-fluid .offset2:first-child {
|
371
|
+
margin-left: 17.094017094017094%;
|
372
|
+
*margin-left: 16.98763411529369%;
|
373
|
+
}
|
374
|
+
.row-fluid .offset1 {
|
375
|
+
margin-left: 11.11111111111111%;
|
376
|
+
*margin-left: 11.004728132387708%;
|
377
|
+
}
|
378
|
+
.row-fluid .offset1:first-child {
|
379
|
+
margin-left: 8.547008547008547%;
|
380
|
+
*margin-left: 8.440625568285142%;
|
381
|
+
}
|
382
|
+
input,
|
383
|
+
textarea,
|
384
|
+
.uneditable-input {
|
385
|
+
margin-left: 0;
|
386
|
+
}
|
387
|
+
.controls-row [class*="span"] + [class*="span"] {
|
388
|
+
margin-left: 30px;
|
389
|
+
}
|
390
|
+
input.span12,
|
391
|
+
textarea.span12,
|
392
|
+
.uneditable-input.span12 {
|
393
|
+
width: 1156px;
|
394
|
+
}
|
395
|
+
input.span11,
|
396
|
+
textarea.span11,
|
397
|
+
.uneditable-input.span11 {
|
398
|
+
width: 1056px;
|
399
|
+
}
|
400
|
+
input.span10,
|
401
|
+
textarea.span10,
|
402
|
+
.uneditable-input.span10 {
|
403
|
+
width: 956px;
|
404
|
+
}
|
405
|
+
input.span9,
|
406
|
+
textarea.span9,
|
407
|
+
.uneditable-input.span9 {
|
408
|
+
width: 856px;
|
409
|
+
}
|
410
|
+
input.span8,
|
411
|
+
textarea.span8,
|
412
|
+
.uneditable-input.span8 {
|
413
|
+
width: 756px;
|
414
|
+
}
|
415
|
+
input.span7,
|
416
|
+
textarea.span7,
|
417
|
+
.uneditable-input.span7 {
|
418
|
+
width: 656px;
|
419
|
+
}
|
420
|
+
input.span6,
|
421
|
+
textarea.span6,
|
422
|
+
.uneditable-input.span6 {
|
423
|
+
width: 556px;
|
424
|
+
}
|
425
|
+
input.span5,
|
426
|
+
textarea.span5,
|
427
|
+
.uneditable-input.span5 {
|
428
|
+
width: 456px;
|
429
|
+
}
|
430
|
+
input.span4,
|
431
|
+
textarea.span4,
|
432
|
+
.uneditable-input.span4 {
|
433
|
+
width: 356px;
|
434
|
+
}
|
435
|
+
input.span3,
|
436
|
+
textarea.span3,
|
437
|
+
.uneditable-input.span3 {
|
438
|
+
width: 256px;
|
439
|
+
}
|
440
|
+
input.span2,
|
441
|
+
textarea.span2,
|
442
|
+
.uneditable-input.span2 {
|
443
|
+
width: 156px;
|
444
|
+
}
|
445
|
+
input.span1,
|
446
|
+
textarea.span1,
|
447
|
+
.uneditable-input.span1 {
|
448
|
+
width: 56px;
|
449
|
+
}
|
450
|
+
.thumbnails {
|
451
|
+
margin-left: -30px;
|
452
|
+
}
|
453
|
+
.thumbnails > li {
|
454
|
+
margin-left: 30px;
|
455
|
+
}
|
456
|
+
.row-fluid .thumbnails {
|
457
|
+
margin-left: 0;
|
458
|
+
}
|
459
|
+
}
|
460
|
+
|
461
|
+
@media (min-width: 768px) and (max-width: 979px) {
|
462
|
+
.row {
|
463
|
+
margin-left: -20px;
|
464
|
+
*zoom: 1;
|
465
|
+
}
|
466
|
+
.row:before,
|
467
|
+
.row:after {
|
468
|
+
display: table;
|
469
|
+
line-height: 0;
|
470
|
+
content: "";
|
471
|
+
}
|
472
|
+
.row:after {
|
473
|
+
clear: both;
|
474
|
+
}
|
475
|
+
[class*="span"] {
|
476
|
+
float: left;
|
477
|
+
min-height: 1px;
|
478
|
+
margin-left: 20px;
|
479
|
+
}
|
480
|
+
.container,
|
481
|
+
.navbar-static-top .container,
|
482
|
+
.navbar-fixed-top .container,
|
483
|
+
.navbar-fixed-bottom .container {
|
484
|
+
width: 724px;
|
485
|
+
}
|
486
|
+
.span12 {
|
487
|
+
width: 724px;
|
488
|
+
}
|
489
|
+
.span11 {
|
490
|
+
width: 662px;
|
491
|
+
}
|
492
|
+
.span10 {
|
493
|
+
width: 600px;
|
494
|
+
}
|
495
|
+
.span9 {
|
496
|
+
width: 538px;
|
497
|
+
}
|
498
|
+
.span8 {
|
499
|
+
width: 476px;
|
500
|
+
}
|
501
|
+
.span7 {
|
502
|
+
width: 414px;
|
503
|
+
}
|
504
|
+
.span6 {
|
505
|
+
width: 352px;
|
506
|
+
}
|
507
|
+
.span5 {
|
508
|
+
width: 290px;
|
509
|
+
}
|
510
|
+
.span4 {
|
511
|
+
width: 228px;
|
512
|
+
}
|
513
|
+
.span3 {
|
514
|
+
width: 166px;
|
515
|
+
}
|
516
|
+
.span2 {
|
517
|
+
width: 104px;
|
518
|
+
}
|
519
|
+
.span1 {
|
520
|
+
width: 42px;
|
521
|
+
}
|
522
|
+
.offset12 {
|
523
|
+
margin-left: 764px;
|
524
|
+
}
|
525
|
+
.offset11 {
|
526
|
+
margin-left: 702px;
|
527
|
+
}
|
528
|
+
.offset10 {
|
529
|
+
margin-left: 640px;
|
530
|
+
}
|
531
|
+
.offset9 {
|
532
|
+
margin-left: 578px;
|
533
|
+
}
|
534
|
+
.offset8 {
|
535
|
+
margin-left: 516px;
|
536
|
+
}
|
537
|
+
.offset7 {
|
538
|
+
margin-left: 454px;
|
539
|
+
}
|
540
|
+
.offset6 {
|
541
|
+
margin-left: 392px;
|
542
|
+
}
|
543
|
+
.offset5 {
|
544
|
+
margin-left: 330px;
|
545
|
+
}
|
546
|
+
.offset4 {
|
547
|
+
margin-left: 268px;
|
548
|
+
}
|
549
|
+
.offset3 {
|
550
|
+
margin-left: 206px;
|
551
|
+
}
|
552
|
+
.offset2 {
|
553
|
+
margin-left: 144px;
|
554
|
+
}
|
555
|
+
.offset1 {
|
556
|
+
margin-left: 82px;
|
557
|
+
}
|
558
|
+
.row-fluid {
|
559
|
+
width: 100%;
|
560
|
+
*zoom: 1;
|
561
|
+
}
|
562
|
+
.row-fluid:before,
|
563
|
+
.row-fluid:after {
|
564
|
+
display: table;
|
565
|
+
line-height: 0;
|
566
|
+
content: "";
|
567
|
+
}
|
568
|
+
.row-fluid:after {
|
569
|
+
clear: both;
|
570
|
+
}
|
571
|
+
.row-fluid [class*="span"] {
|
572
|
+
display: block;
|
573
|
+
float: left;
|
574
|
+
width: 100%;
|
575
|
+
min-height: 30px;
|
576
|
+
margin-left: 2.7624309392265194%;
|
577
|
+
*margin-left: 2.709239449864817%;
|
578
|
+
-webkit-box-sizing: border-box;
|
579
|
+
-moz-box-sizing: border-box;
|
580
|
+
box-sizing: border-box;
|
581
|
+
}
|
582
|
+
.row-fluid [class*="span"]:first-child {
|
583
|
+
margin-left: 0;
|
584
|
+
}
|
585
|
+
.row-fluid .controls-row [class*="span"] + [class*="span"] {
|
586
|
+
margin-left: 2.7624309392265194%;
|
587
|
+
}
|
588
|
+
.row-fluid .span12 {
|
589
|
+
width: 100%;
|
590
|
+
*width: 99.94680851063829%;
|
591
|
+
}
|
592
|
+
.row-fluid .span11 {
|
593
|
+
width: 91.43646408839778%;
|
594
|
+
*width: 91.38327259903608%;
|
595
|
+
}
|
596
|
+
.row-fluid .span10 {
|
597
|
+
width: 82.87292817679558%;
|
598
|
+
*width: 82.81973668743387%;
|
599
|
+
}
|
600
|
+
.row-fluid .span9 {
|
601
|
+
width: 74.30939226519337%;
|
602
|
+
*width: 74.25620077583166%;
|
603
|
+
}
|
604
|
+
.row-fluid .span8 {
|
605
|
+
width: 65.74585635359117%;
|
606
|
+
*width: 65.69266486422946%;
|
607
|
+
}
|
608
|
+
.row-fluid .span7 {
|
609
|
+
width: 57.18232044198895%;
|
610
|
+
*width: 57.12912895262725%;
|
611
|
+
}
|
612
|
+
.row-fluid .span6 {
|
613
|
+
width: 48.61878453038674%;
|
614
|
+
*width: 48.56559304102504%;
|
615
|
+
}
|
616
|
+
.row-fluid .span5 {
|
617
|
+
width: 40.05524861878453%;
|
618
|
+
*width: 40.00205712942283%;
|
619
|
+
}
|
620
|
+
.row-fluid .span4 {
|
621
|
+
width: 31.491712707182323%;
|
622
|
+
*width: 31.43852121782062%;
|
623
|
+
}
|
624
|
+
.row-fluid .span3 {
|
625
|
+
width: 22.92817679558011%;
|
626
|
+
*width: 22.87498530621841%;
|
627
|
+
}
|
628
|
+
.row-fluid .span2 {
|
629
|
+
width: 14.3646408839779%;
|
630
|
+
*width: 14.311449394616199%;
|
631
|
+
}
|
632
|
+
.row-fluid .span1 {
|
633
|
+
width: 5.801104972375691%;
|
634
|
+
*width: 5.747913483013988%;
|
635
|
+
}
|
636
|
+
.row-fluid .offset12 {
|
637
|
+
margin-left: 105.52486187845304%;
|
638
|
+
*margin-left: 105.41847889972962%;
|
639
|
+
}
|
640
|
+
.row-fluid .offset12:first-child {
|
641
|
+
margin-left: 102.76243093922652%;
|
642
|
+
*margin-left: 102.6560479605031%;
|
643
|
+
}
|
644
|
+
.row-fluid .offset11 {
|
645
|
+
margin-left: 96.96132596685082%;
|
646
|
+
*margin-left: 96.8549429881274%;
|
647
|
+
}
|
648
|
+
.row-fluid .offset11:first-child {
|
649
|
+
margin-left: 94.1988950276243%;
|
650
|
+
*margin-left: 94.09251204890089%;
|
651
|
+
}
|
652
|
+
.row-fluid .offset10 {
|
653
|
+
margin-left: 88.39779005524862%;
|
654
|
+
*margin-left: 88.2914070765252%;
|
655
|
+
}
|
656
|
+
.row-fluid .offset10:first-child {
|
657
|
+
margin-left: 85.6353591160221%;
|
658
|
+
*margin-left: 85.52897613729868%;
|
659
|
+
}
|
660
|
+
.row-fluid .offset9 {
|
661
|
+
margin-left: 79.8342541436464%;
|
662
|
+
*margin-left: 79.72787116492299%;
|
663
|
+
}
|
664
|
+
.row-fluid .offset9:first-child {
|
665
|
+
margin-left: 77.07182320441989%;
|
666
|
+
*margin-left: 76.96544022569647%;
|
667
|
+
}
|
668
|
+
.row-fluid .offset8 {
|
669
|
+
margin-left: 71.2707182320442%;
|
670
|
+
*margin-left: 71.16433525332079%;
|
671
|
+
}
|
672
|
+
.row-fluid .offset8:first-child {
|
673
|
+
margin-left: 68.50828729281768%;
|
674
|
+
*margin-left: 68.40190431409427%;
|
675
|
+
}
|
676
|
+
.row-fluid .offset7 {
|
677
|
+
margin-left: 62.70718232044199%;
|
678
|
+
*margin-left: 62.600799341718584%;
|
679
|
+
}
|
680
|
+
.row-fluid .offset7:first-child {
|
681
|
+
margin-left: 59.94475138121547%;
|
682
|
+
*margin-left: 59.838368402492065%;
|
683
|
+
}
|
684
|
+
.row-fluid .offset6 {
|
685
|
+
margin-left: 54.14364640883978%;
|
686
|
+
*margin-left: 54.037263430116376%;
|
687
|
+
}
|
688
|
+
.row-fluid .offset6:first-child {
|
689
|
+
margin-left: 51.38121546961326%;
|
690
|
+
*margin-left: 51.27483249088986%;
|
691
|
+
}
|
692
|
+
.row-fluid .offset5 {
|
693
|
+
margin-left: 45.58011049723757%;
|
694
|
+
*margin-left: 45.47372751851417%;
|
695
|
+
}
|
696
|
+
.row-fluid .offset5:first-child {
|
697
|
+
margin-left: 42.81767955801105%;
|
698
|
+
*margin-left: 42.71129657928765%;
|
699
|
+
}
|
700
|
+
.row-fluid .offset4 {
|
701
|
+
margin-left: 37.01657458563536%;
|
702
|
+
*margin-left: 36.91019160691196%;
|
703
|
+
}
|
704
|
+
.row-fluid .offset4:first-child {
|
705
|
+
margin-left: 34.25414364640884%;
|
706
|
+
*margin-left: 34.14776066768544%;
|
707
|
+
}
|
708
|
+
.row-fluid .offset3 {
|
709
|
+
margin-left: 28.45303867403315%;
|
710
|
+
*margin-left: 28.346655695309746%;
|
711
|
+
}
|
712
|
+
.row-fluid .offset3:first-child {
|
713
|
+
margin-left: 25.69060773480663%;
|
714
|
+
*margin-left: 25.584224756083227%;
|
715
|
+
}
|
716
|
+
.row-fluid .offset2 {
|
717
|
+
margin-left: 19.88950276243094%;
|
718
|
+
*margin-left: 19.783119783707537%;
|
719
|
+
}
|
720
|
+
.row-fluid .offset2:first-child {
|
721
|
+
margin-left: 17.12707182320442%;
|
722
|
+
*margin-left: 17.02068884448102%;
|
723
|
+
}
|
724
|
+
.row-fluid .offset1 {
|
725
|
+
margin-left: 11.32596685082873%;
|
726
|
+
*margin-left: 11.219583872105325%;
|
727
|
+
}
|
728
|
+
.row-fluid .offset1:first-child {
|
729
|
+
margin-left: 8.56353591160221%;
|
730
|
+
*margin-left: 8.457152932878806%;
|
731
|
+
}
|
732
|
+
input,
|
733
|
+
textarea,
|
734
|
+
.uneditable-input {
|
735
|
+
margin-left: 0;
|
736
|
+
}
|
737
|
+
.controls-row [class*="span"] + [class*="span"] {
|
738
|
+
margin-left: 20px;
|
739
|
+
}
|
740
|
+
input.span12,
|
741
|
+
textarea.span12,
|
742
|
+
.uneditable-input.span12 {
|
743
|
+
width: 710px;
|
744
|
+
}
|
745
|
+
input.span11,
|
746
|
+
textarea.span11,
|
747
|
+
.uneditable-input.span11 {
|
748
|
+
width: 648px;
|
749
|
+
}
|
750
|
+
input.span10,
|
751
|
+
textarea.span10,
|
752
|
+
.uneditable-input.span10 {
|
753
|
+
width: 586px;
|
754
|
+
}
|
755
|
+
input.span9,
|
756
|
+
textarea.span9,
|
757
|
+
.uneditable-input.span9 {
|
758
|
+
width: 524px;
|
759
|
+
}
|
760
|
+
input.span8,
|
761
|
+
textarea.span8,
|
762
|
+
.uneditable-input.span8 {
|
763
|
+
width: 462px;
|
764
|
+
}
|
765
|
+
input.span7,
|
766
|
+
textarea.span7,
|
767
|
+
.uneditable-input.span7 {
|
768
|
+
width: 400px;
|
769
|
+
}
|
770
|
+
input.span6,
|
771
|
+
textarea.span6,
|
772
|
+
.uneditable-input.span6 {
|
773
|
+
width: 338px;
|
774
|
+
}
|
775
|
+
input.span5,
|
776
|
+
textarea.span5,
|
777
|
+
.uneditable-input.span5 {
|
778
|
+
width: 276px;
|
779
|
+
}
|
780
|
+
input.span4,
|
781
|
+
textarea.span4,
|
782
|
+
.uneditable-input.span4 {
|
783
|
+
width: 214px;
|
784
|
+
}
|
785
|
+
input.span3,
|
786
|
+
textarea.span3,
|
787
|
+
.uneditable-input.span3 {
|
788
|
+
width: 152px;
|
789
|
+
}
|
790
|
+
input.span2,
|
791
|
+
textarea.span2,
|
792
|
+
.uneditable-input.span2 {
|
793
|
+
width: 90px;
|
794
|
+
}
|
795
|
+
input.span1,
|
796
|
+
textarea.span1,
|
797
|
+
.uneditable-input.span1 {
|
798
|
+
width: 28px;
|
799
|
+
}
|
800
|
+
}
|
801
|
+
|
802
|
+
@media (max-width: 767px) {
|
803
|
+
body {
|
804
|
+
padding-right: 20px;
|
805
|
+
padding-left: 20px;
|
806
|
+
}
|
807
|
+
.navbar-fixed-top,
|
808
|
+
.navbar-fixed-bottom,
|
809
|
+
.navbar-static-top {
|
810
|
+
margin-right: -20px;
|
811
|
+
margin-left: -20px;
|
812
|
+
}
|
813
|
+
.container-fluid {
|
814
|
+
padding: 0;
|
815
|
+
}
|
816
|
+
.dl-horizontal dt {
|
817
|
+
float: none;
|
818
|
+
width: auto;
|
819
|
+
clear: none;
|
820
|
+
text-align: left;
|
821
|
+
}
|
822
|
+
.dl-horizontal dd {
|
823
|
+
margin-left: 0;
|
824
|
+
}
|
825
|
+
.container {
|
826
|
+
width: auto;
|
827
|
+
}
|
828
|
+
.row-fluid {
|
829
|
+
width: 100%;
|
830
|
+
}
|
831
|
+
.row,
|
832
|
+
.thumbnails {
|
833
|
+
margin-left: 0;
|
834
|
+
}
|
835
|
+
.thumbnails > li {
|
836
|
+
float: none;
|
837
|
+
margin-left: 0;
|
838
|
+
}
|
839
|
+
[class*="span"],
|
840
|
+
.uneditable-input[class*="span"],
|
841
|
+
.row-fluid [class*="span"] {
|
842
|
+
display: block;
|
843
|
+
float: none;
|
844
|
+
width: 100%;
|
845
|
+
margin-left: 0;
|
846
|
+
-webkit-box-sizing: border-box;
|
847
|
+
-moz-box-sizing: border-box;
|
848
|
+
box-sizing: border-box;
|
849
|
+
}
|
850
|
+
.span12,
|
851
|
+
.row-fluid .span12 {
|
852
|
+
width: 100%;
|
853
|
+
-webkit-box-sizing: border-box;
|
854
|
+
-moz-box-sizing: border-box;
|
855
|
+
box-sizing: border-box;
|
856
|
+
}
|
857
|
+
.row-fluid [class*="offset"]:first-child {
|
858
|
+
margin-left: 0;
|
859
|
+
}
|
860
|
+
.input-large,
|
861
|
+
.input-xlarge,
|
862
|
+
.input-xxlarge,
|
863
|
+
input[class*="span"],
|
864
|
+
select[class*="span"],
|
865
|
+
textarea[class*="span"],
|
866
|
+
.uneditable-input {
|
867
|
+
display: block;
|
868
|
+
width: 100%;
|
869
|
+
min-height: 30px;
|
870
|
+
-webkit-box-sizing: border-box;
|
871
|
+
-moz-box-sizing: border-box;
|
872
|
+
box-sizing: border-box;
|
873
|
+
}
|
874
|
+
.input-prepend input,
|
875
|
+
.input-append input,
|
876
|
+
.input-prepend input[class*="span"],
|
877
|
+
.input-append input[class*="span"] {
|
878
|
+
display: inline-block;
|
879
|
+
width: auto;
|
880
|
+
}
|
881
|
+
.controls-row [class*="span"] + [class*="span"] {
|
882
|
+
margin-left: 0;
|
883
|
+
}
|
884
|
+
.modal {
|
885
|
+
position: fixed;
|
886
|
+
top: 20px;
|
887
|
+
right: 20px;
|
888
|
+
left: 20px;
|
889
|
+
width: auto;
|
890
|
+
margin: 0;
|
891
|
+
}
|
892
|
+
.modal.fade {
|
893
|
+
top: -100px;
|
894
|
+
}
|
895
|
+
.modal.fade.in {
|
896
|
+
top: 20px;
|
897
|
+
}
|
898
|
+
}
|
899
|
+
|
900
|
+
@media (max-width: 480px) {
|
901
|
+
.nav-collapse {
|
902
|
+
-webkit-transform: translate3d(0, 0, 0);
|
903
|
+
}
|
904
|
+
.page-header h1 small {
|
905
|
+
display: block;
|
906
|
+
line-height: 20px;
|
907
|
+
}
|
908
|
+
input[type="checkbox"],
|
909
|
+
input[type="radio"] {
|
910
|
+
border: 1px solid #ccc;
|
911
|
+
}
|
912
|
+
.form-horizontal .control-label {
|
913
|
+
float: none;
|
914
|
+
width: auto;
|
915
|
+
padding-top: 0;
|
916
|
+
text-align: left;
|
917
|
+
}
|
918
|
+
.form-horizontal .controls {
|
919
|
+
margin-left: 0;
|
920
|
+
}
|
921
|
+
.form-horizontal .control-list {
|
922
|
+
padding-top: 0;
|
923
|
+
}
|
924
|
+
.form-horizontal .form-actions {
|
925
|
+
padding-right: 10px;
|
926
|
+
padding-left: 10px;
|
927
|
+
}
|
928
|
+
.media .pull-left,
|
929
|
+
.media .pull-right {
|
930
|
+
display: block;
|
931
|
+
float: none;
|
932
|
+
margin-bottom: 10px;
|
933
|
+
}
|
934
|
+
.media-object {
|
935
|
+
margin-right: 0;
|
936
|
+
margin-left: 0;
|
937
|
+
}
|
938
|
+
.modal {
|
939
|
+
top: 10px;
|
940
|
+
right: 10px;
|
941
|
+
left: 10px;
|
942
|
+
}
|
943
|
+
.modal-header .close {
|
944
|
+
padding: 10px;
|
945
|
+
margin: -10px;
|
946
|
+
}
|
947
|
+
.carousel-caption {
|
948
|
+
position: static;
|
949
|
+
}
|
950
|
+
}
|
951
|
+
|
952
|
+
@media (max-width: 979px) {
|
953
|
+
body {
|
954
|
+
padding-top: 0;
|
955
|
+
}
|
956
|
+
.navbar-fixed-top,
|
957
|
+
.navbar-fixed-bottom {
|
958
|
+
position: static;
|
959
|
+
}
|
960
|
+
.navbar-fixed-top {
|
961
|
+
margin-bottom: 20px;
|
962
|
+
}
|
963
|
+
.navbar-fixed-bottom {
|
964
|
+
margin-top: 20px;
|
965
|
+
}
|
966
|
+
.navbar-fixed-top .navbar-inner,
|
967
|
+
.navbar-fixed-bottom .navbar-inner {
|
968
|
+
padding: 5px;
|
969
|
+
}
|
970
|
+
.navbar .container {
|
971
|
+
width: auto;
|
972
|
+
padding: 0;
|
973
|
+
}
|
974
|
+
.navbar .brand {
|
975
|
+
padding-right: 10px;
|
976
|
+
padding-left: 10px;
|
977
|
+
margin: 0 0 0 -5px;
|
978
|
+
}
|
979
|
+
.nav-collapse {
|
980
|
+
clear: both;
|
981
|
+
}
|
982
|
+
.nav-collapse .nav {
|
983
|
+
float: none;
|
984
|
+
margin: 0 0 10px;
|
985
|
+
}
|
986
|
+
.nav-collapse .nav > li {
|
987
|
+
float: none;
|
988
|
+
}
|
989
|
+
.nav-collapse .nav > li > a {
|
990
|
+
margin-bottom: 2px;
|
991
|
+
}
|
992
|
+
.nav-collapse .nav > .divider-vertical {
|
993
|
+
display: none;
|
994
|
+
}
|
995
|
+
.nav-collapse .nav .nav-header {
|
996
|
+
color: #777777;
|
997
|
+
text-shadow: none;
|
998
|
+
}
|
999
|
+
.nav-collapse .nav > li > a,
|
1000
|
+
.nav-collapse .dropdown-menu a {
|
1001
|
+
padding: 9px 15px;
|
1002
|
+
font-weight: bold;
|
1003
|
+
color: #777777;
|
1004
|
+
-webkit-border-radius: 3px;
|
1005
|
+
-moz-border-radius: 3px;
|
1006
|
+
border-radius: 3px;
|
1007
|
+
}
|
1008
|
+
.nav-collapse .btn {
|
1009
|
+
padding: 4px 10px 4px;
|
1010
|
+
font-weight: normal;
|
1011
|
+
-webkit-border-radius: 4px;
|
1012
|
+
-moz-border-radius: 4px;
|
1013
|
+
border-radius: 4px;
|
1014
|
+
}
|
1015
|
+
.nav-collapse .dropdown-menu li + li a {
|
1016
|
+
margin-bottom: 2px;
|
1017
|
+
}
|
1018
|
+
.nav-collapse .nav > li > a:hover,
|
1019
|
+
.nav-collapse .nav > li > a:focus,
|
1020
|
+
.nav-collapse .dropdown-menu a:hover,
|
1021
|
+
.nav-collapse .dropdown-menu a:focus {
|
1022
|
+
background-color: #f2f2f2;
|
1023
|
+
}
|
1024
|
+
.navbar-inverse .nav-collapse .nav > li > a,
|
1025
|
+
.navbar-inverse .nav-collapse .dropdown-menu a {
|
1026
|
+
color: #999999;
|
1027
|
+
}
|
1028
|
+
.navbar-inverse .nav-collapse .nav > li > a:hover,
|
1029
|
+
.navbar-inverse .nav-collapse .nav > li > a:focus,
|
1030
|
+
.navbar-inverse .nav-collapse .dropdown-menu a:hover,
|
1031
|
+
.navbar-inverse .nav-collapse .dropdown-menu a:focus {
|
1032
|
+
background-color: #111111;
|
1033
|
+
}
|
1034
|
+
.nav-collapse.in .btn-group {
|
1035
|
+
padding: 0;
|
1036
|
+
margin-top: 5px;
|
1037
|
+
}
|
1038
|
+
.nav-collapse .dropdown-menu {
|
1039
|
+
position: static;
|
1040
|
+
top: auto;
|
1041
|
+
left: auto;
|
1042
|
+
display: none;
|
1043
|
+
float: none;
|
1044
|
+
max-width: none;
|
1045
|
+
padding: 0;
|
1046
|
+
margin: 0 15px;
|
1047
|
+
background-color: transparent;
|
1048
|
+
border: none;
|
1049
|
+
-webkit-border-radius: 0;
|
1050
|
+
-moz-border-radius: 0;
|
1051
|
+
border-radius: 0;
|
1052
|
+
-webkit-box-shadow: none;
|
1053
|
+
-moz-box-shadow: none;
|
1054
|
+
box-shadow: none;
|
1055
|
+
}
|
1056
|
+
.nav-collapse .open > .dropdown-menu {
|
1057
|
+
display: block;
|
1058
|
+
}
|
1059
|
+
.nav-collapse .dropdown-menu:before,
|
1060
|
+
.nav-collapse .dropdown-menu:after {
|
1061
|
+
display: none;
|
1062
|
+
}
|
1063
|
+
.nav-collapse .dropdown-menu .divider {
|
1064
|
+
display: none;
|
1065
|
+
}
|
1066
|
+
.nav-collapse .nav > li > .dropdown-menu:before,
|
1067
|
+
.nav-collapse .nav > li > .dropdown-menu:after {
|
1068
|
+
display: none;
|
1069
|
+
}
|
1070
|
+
.nav-collapse .navbar-form,
|
1071
|
+
.nav-collapse .navbar-search {
|
1072
|
+
float: none;
|
1073
|
+
padding: 10px 15px;
|
1074
|
+
margin: 10px 0;
|
1075
|
+
border-top: 1px solid #f2f2f2;
|
1076
|
+
border-bottom: 1px solid #f2f2f2;
|
1077
|
+
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
|
1078
|
+
-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
|
1079
|
+
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
|
1080
|
+
}
|
1081
|
+
.navbar-inverse .nav-collapse .navbar-form,
|
1082
|
+
.navbar-inverse .nav-collapse .navbar-search {
|
1083
|
+
border-top-color: #111111;
|
1084
|
+
border-bottom-color: #111111;
|
1085
|
+
}
|
1086
|
+
.navbar .nav-collapse .nav.pull-right {
|
1087
|
+
float: none;
|
1088
|
+
margin-left: 0;
|
1089
|
+
}
|
1090
|
+
.nav-collapse,
|
1091
|
+
.nav-collapse.collapse {
|
1092
|
+
height: 0;
|
1093
|
+
overflow: hidden;
|
1094
|
+
}
|
1095
|
+
.navbar .btn-navbar {
|
1096
|
+
display: block;
|
1097
|
+
}
|
1098
|
+
.navbar-static .navbar-inner {
|
1099
|
+
padding-right: 10px;
|
1100
|
+
padding-left: 10px;
|
1101
|
+
}
|
1102
|
+
}
|
1103
|
+
|
1104
|
+
@media (min-width: 980px) {
|
1105
|
+
.nav-collapse.collapse {
|
1106
|
+
height: auto !important;
|
1107
|
+
overflow: visible !important;
|
1108
|
+
}
|
1109
|
+
}
|