├── .gitignore ├── README.md ├── bin ├── livepool.cmd └── livepool.js ├── keys ├── cert.pem └── key.pem ├── lib ├── core.js ├── livepool │ ├── config.js │ ├── event.js │ ├── logger.js │ ├── notify.js │ ├── proxy.js │ ├── request.js │ ├── responder │ │ ├── combo.js │ │ ├── delay.js │ │ ├── index.js │ │ ├── local.js │ │ ├── qzmin.js │ │ ├── remote.js │ │ ├── route.js │ │ └── template.js │ ├── response.js │ └── util.js ├── plugins │ ├── beautify │ │ └── readme │ ├── netsimulate │ │ └── readme │ ├── nocache │ │ ├── index.js │ │ └── readme │ └── sitecacher │ │ └── readme ├── template │ ├── 200_FiddlerGif.dat │ ├── 200_SimpleHTML.dat │ ├── 200_TransPixel.dat │ ├── 204_NoContent.dat │ ├── 302_Redirect.dat │ ├── 303_RedirectWithGet.dat │ ├── 304_NotModified.dat │ ├── 307_RedirectWithMethod.dat │ ├── 401_AuthBasic.dat │ ├── 401_AuthDigest.dat │ ├── 403_AuthDeny.dat │ ├── 404_Plain.dat │ ├── 407_ProxyAuthBasic.dat │ ├── 502_Unreachable.dat │ └── 503_ProxyError.html ├── tools │ ├── auth │ │ ├── Authenticate.app │ │ │ └── Contents │ │ │ │ ├── Info.plist │ │ │ │ ├── MacOS │ │ │ │ └── Authenticate │ │ │ │ ├── PkgInfo │ │ │ │ └── Resources │ │ │ │ ├── en.lproj │ │ │ │ ├── InfoPlist.strings │ │ │ │ └── MainMenu.nib │ │ │ │ ├── lock.icns │ │ │ │ └── lock.png │ │ └── readme.md │ ├── beautify │ │ └── scripts │ │ │ ├── beautify-css.js │ │ │ ├── beautify-html.js │ │ │ ├── beautify.js │ │ │ └── run.js │ ├── proxysetting_mac.sh │ ├── refreshproxy.exe │ ├── refreshproxy.ini │ └── speedlimiter └── webui │ ├── liveapp.js │ ├── public │ ├── css │ │ └── main.css │ ├── img │ │ ├── add.png │ │ ├── no-img-data.jpg │ │ ├── stackoverflow.png │ │ └── tbg.jpg │ ├── index.html │ ├── js │ │ ├── CONST.js │ │ ├── io.js │ │ ├── keymap.js │ │ ├── liveapp.js │ │ ├── node.webkit.js │ │ ├── observers.js │ │ ├── store.js │ │ ├── underscore.js │ │ ├── utils.js │ │ ├── ux.plugin.js │ │ ├── view.session.js │ │ ├── view.session.tree.js │ │ ├── view.tab.composer.js │ │ ├── view.tab.filter.js │ │ ├── view.tab.inspector.js │ │ ├── view.tab.log.js │ │ ├── view.tab.pool.js │ │ ├── view.tab.stat.js │ │ └── view.tab.timeline.js │ └── libs │ │ ├── ext-theme │ │ └── Azzurra │ │ │ ├── css │ │ │ └── azzurra │ │ │ │ ├── azzurra-core.css │ │ │ │ └── azzurra-ui-all.css │ │ │ ├── js │ │ │ └── azzurra.js │ │ │ └── themes │ │ │ └── images │ │ │ └── azzurra │ │ │ ├── boundlist │ │ │ └── trigger-arrow.png │ │ │ ├── button │ │ │ ├── arrow.gif │ │ │ ├── btn-arrow.gif │ │ │ ├── s-arrow-b-noline.gif │ │ │ ├── s-arrow-b.gif │ │ │ ├── s-arrow-bo.gif │ │ │ ├── s-arrow-light.gif │ │ │ ├── s-arrow-noline.gif │ │ │ ├── s-arrow-o.gif │ │ │ └── s-arrow.gif │ │ │ ├── dd │ │ │ ├── drop-add.gif │ │ │ ├── drop-no.gif │ │ │ └── drop-yes.gif │ │ │ ├── editor │ │ │ ├── tb-sprite-medium.png │ │ │ ├── tb-sprite.gif │ │ │ └── tb-sprite.png │ │ │ ├── form │ │ │ ├── checkbox.gif │ │ │ ├── clear-trigger-medium.png │ │ │ ├── clear-trigger.png │ │ │ ├── date-trigger-medium.gif │ │ │ ├── date-trigger.gif │ │ │ ├── exclamation.gif │ │ │ ├── radio.gif │ │ │ ├── search-trigger-medium.png │ │ │ ├── search-trigger.png │ │ │ ├── spinner-small.gif │ │ │ ├── spinner.png │ │ │ ├── text-bg.gif │ │ │ ├── trigger-medium.gif │ │ │ └── trigger.gif │ │ │ ├── grid │ │ │ ├── arrow-left-white.gif │ │ │ ├── arrow-right-white.gif │ │ │ ├── checked.gif │ │ │ ├── col-move-bottom.gif │ │ │ ├── col-move-top.gif │ │ │ ├── dd-insert-arrow-left.gif │ │ │ ├── dd-insert-arrow-left.png │ │ │ ├── dd-insert-arrow-right.gif │ │ │ ├── dd-insert-arrow-right.png │ │ │ ├── dirty.gif │ │ │ ├── done.gif │ │ │ ├── drop-no.gif │ │ │ ├── drop-yes.gif │ │ │ ├── grid-loading.gif │ │ │ ├── grid3-hd-btn.gif │ │ │ ├── group-by.gif │ │ │ ├── group-collapse.gif │ │ │ ├── group-expand-sprite.gif │ │ │ ├── group-expand.gif │ │ │ ├── hd-pop.gif │ │ │ ├── hmenu-asc.gif │ │ │ ├── hmenu-asc.png │ │ │ ├── hmenu-desc.gif │ │ │ ├── hmenu-desc.png │ │ │ ├── hmenu-lock.gif │ │ │ ├── hmenu-lock.png │ │ │ ├── hmenu-unlock.gif │ │ │ ├── hmenu-unlock.png │ │ │ ├── invalid_line.gif │ │ │ ├── loading.gif │ │ │ ├── nowait.gif │ │ │ ├── page-first-disabled.gif │ │ │ ├── page-first.gif │ │ │ ├── page-last-disabled.gif │ │ │ ├── page-last.gif │ │ │ ├── page-next-disabled.gif │ │ │ ├── page-next.gif │ │ │ ├── page-prev-disabled.gif │ │ │ ├── page-prev.gif │ │ │ ├── pagingbar-sprite-medium.png │ │ │ ├── pagingbar-sprite.png │ │ │ ├── pick-button.gif │ │ │ ├── refresh-disabled.gif │ │ │ ├── refresh-disabled.png │ │ │ ├── refresh.gif │ │ │ ├── refresh.png │ │ │ ├── row-check-sprite.gif │ │ │ ├── row-expand-sprite.gif │ │ │ ├── sort_asc.gif │ │ │ ├── sort_desc.gif │ │ │ ├── unchecked.gif │ │ │ └── wait.gif │ │ │ ├── layout │ │ │ ├── mini-bottom.gif │ │ │ ├── mini-left.gif │ │ │ ├── mini-right.gif │ │ │ └── mini-top.gif │ │ │ ├── menu │ │ │ ├── checked.gif │ │ │ ├── group-checked.gif │ │ │ ├── item-over-disabled.gif │ │ │ ├── item-over.gif │ │ │ ├── menu-item-active-bg.gif │ │ │ ├── menu-item-active-corners.gif │ │ │ ├── menu-item-active-sides.gif │ │ │ ├── menu-parent.gif │ │ │ ├── menu.gif │ │ │ └── unchecked.gif │ │ │ ├── panel │ │ │ ├── panel-default-framed-corners.gif │ │ │ └── panel-default-framed-sides.gif │ │ │ ├── progress │ │ │ └── progress-default-bg.gif │ │ │ ├── rtl │ │ │ ├── button │ │ │ │ ├── s-arrow.gif │ │ │ │ └── s-arrow.png │ │ │ ├── editor │ │ │ │ ├── tb-sprite-medium.png │ │ │ │ └── tb-sprite.png │ │ │ ├── form │ │ │ │ ├── clear-trigger-medium.png │ │ │ │ ├── clear-trigger.png │ │ │ │ ├── date-trigger-medium.gif │ │ │ │ ├── date-trigger.gif │ │ │ │ ├── search-trigger-medium.png │ │ │ │ ├── search-trigger.png │ │ │ │ ├── spinner.png │ │ │ │ ├── trigger-medium.gif │ │ │ │ └── trigger.gif │ │ │ ├── grid │ │ │ │ ├── pagingbar-sprite-medium.png │ │ │ │ └── pagingbar-sprite.png │ │ │ ├── menu │ │ │ │ └── menu-parent.gif │ │ │ └── tree │ │ │ │ ├── all-elbows-large.png │ │ │ │ ├── all-elbows-medium.png │ │ │ │ └── all-elbows-small.png │ │ │ ├── shared │ │ │ ├── blue-loading.gif │ │ │ ├── calendar.gif │ │ │ ├── icon-error.gif │ │ │ ├── icon-info.gif │ │ │ ├── icon-question.gif │ │ │ ├── icon-warning.gif │ │ │ ├── large-loading.gif │ │ │ ├── left-btn.gif │ │ │ ├── loading-balls.gif │ │ │ ├── right-btn.gif │ │ │ ├── right-btn.png │ │ │ ├── shadow-c.png │ │ │ ├── shadow-lr.png │ │ │ ├── shadow.png │ │ │ ├── tool-sprites.png │ │ │ └── warning.gif │ │ │ ├── sizer │ │ │ ├── e-handle-dark.gif │ │ │ ├── e-handle.gif │ │ │ ├── ne-handle-dark.gif │ │ │ ├── ne-handle.gif │ │ │ ├── nw-handle-dark.gif │ │ │ ├── nw-handle.gif │ │ │ ├── s-handle-dark.gif │ │ │ ├── s-handle.gif │ │ │ ├── se-handle-dark.gif │ │ │ ├── se-handle.gif │ │ │ ├── square.gif │ │ │ ├── sw-handle-dark.gif │ │ │ └── sw-handle.gif │ │ │ ├── slider │ │ │ ├── slider-bg.gif │ │ │ ├── slider-bg.png │ │ │ ├── slider-thumb.gif │ │ │ ├── slider-thumb.png │ │ │ ├── slider-v-bg.gif │ │ │ ├── slider-v-bg.png │ │ │ ├── slider-v-thumb.gif │ │ │ └── slider-v-thumb.png │ │ │ ├── tab-bar │ │ │ ├── scroll-left.gif │ │ │ └── scroll-right.gif │ │ │ ├── tab │ │ │ └── tab-white-close.gif │ │ │ ├── tip │ │ │ ├── tip-corners.gif │ │ │ └── tip-sides.gif │ │ │ ├── toolbar │ │ │ ├── more.gif │ │ │ ├── scroll-left.gif │ │ │ └── scroll-right.gif │ │ │ ├── tools │ │ │ ├── tool-sprite-tpl.gif │ │ │ ├── tool-sprites.gif │ │ │ ├── tool-sprites.png │ │ │ └── tools-sprites-trans.gif │ │ │ ├── tree │ │ │ ├── Untitled-1.png │ │ │ ├── all-elbows-large.png │ │ │ ├── all-elbows-medium.png │ │ │ ├── all-elbows-small.png │ │ │ ├── arrows-large.png │ │ │ ├── arrows-medium.png │ │ │ ├── arrows-small.png │ │ │ ├── arrows.gif │ │ │ ├── drop-above.gif │ │ │ ├── drop-add.gif │ │ │ ├── drop-append.gif │ │ │ ├── drop-below.gif │ │ │ ├── drop-between.gif │ │ │ ├── drop-no.gif │ │ │ ├── drop-over.gif │ │ │ ├── drop-under.gif │ │ │ ├── drop-yes.gif │ │ │ ├── elbow-end-large.png │ │ │ ├── elbow-end-medium.png │ │ │ ├── elbow-end-minus-large.png │ │ │ ├── elbow-end-minus-medium.png │ │ │ ├── elbow-end-minus-nl.gif │ │ │ ├── elbow-end-minus.gif │ │ │ ├── elbow-end-plus-large.png │ │ │ ├── elbow-end-plus-medium.png │ │ │ ├── elbow-end-plus-nl.gif │ │ │ ├── elbow-end-plus.gif │ │ │ ├── elbow-end.gif │ │ │ ├── elbow-large.png │ │ │ ├── elbow-line-large.png │ │ │ ├── elbow-line-medium.png │ │ │ ├── elbow-line.gif │ │ │ ├── elbow-medium.png │ │ │ ├── elbow-minus-large.png │ │ │ ├── elbow-minus-medium.png │ │ │ ├── elbow-minus-nl.gif │ │ │ ├── elbow-minus.gif │ │ │ ├── elbow-plus-nl.gif │ │ │ ├── elbow-plus.gif │ │ │ ├── elbow.gif │ │ │ ├── folder-open.gif │ │ │ ├── folder-open.png │ │ │ ├── folder.gif │ │ │ ├── folder.png │ │ │ ├── icons-large.png │ │ │ ├── icons-medium.png │ │ │ ├── icons-small.png │ │ │ ├── icons.png │ │ │ ├── leaf.gif │ │ │ ├── leaf.png │ │ │ ├── loading.gif │ │ │ └── s.gif │ │ │ ├── util │ │ │ └── splitter │ │ │ │ ├── mini-bottom.gif │ │ │ │ ├── mini-left.gif │ │ │ │ ├── mini-right.gif │ │ │ │ └── mini-top.gif │ │ │ └── window │ │ │ ├── icon-error.gif │ │ │ ├── icon-info.gif │ │ │ ├── icon-question.gif │ │ │ └── icon-warning.gif │ │ ├── ext │ │ ├── ext-all-debug.js │ │ └── ext-all.js │ │ ├── icomoon │ │ ├── sprites.css │ │ ├── sprites.html │ │ └── sprites.png │ │ ├── jsoneditor │ │ ├── img │ │ │ └── jsoneditor-icons.png │ │ ├── jsoneditor-min.css │ │ ├── jsoneditor-min.js │ │ ├── jsoneditor.css │ │ ├── jsoneditor.js │ │ └── lib │ │ │ ├── ace │ │ │ ├── ace.js │ │ │ ├── ext-searchbox.js │ │ │ ├── mode-json.js │ │ │ ├── theme-jsoneditor.js │ │ │ ├── theme-textmate.js │ │ │ └── worker-json.js │ │ │ └── jsonlint │ │ │ ├── README.md │ │ │ └── jsonlint.js │ │ ├── pac │ │ └── livepool.pac │ │ └── zeroclipboard │ │ ├── ZeroClipboard.js │ │ ├── ZeroClipboard.min.js │ │ └── ZeroClipboard.swf │ ├── readme.md │ └── routes │ ├── index.js │ └── other.js ├── livepool.js ├── node-webkit.html ├── node-webkit.js ├── package.json ├── rules ├── pool.js ├── readme.md └── settings.js ├── settings.js ├── test.js └── test ├── examples ├── __index.html ├── cgi-bin │ └── readme ├── css │ ├── comp.css │ ├── main.css │ ├── readme │ ├── sub1.css │ └── sub2.css ├── img │ ├── module │ │ └── qq.png │ └── qq.png ├── index.html ├── js │ ├── delay.js │ ├── find.all.js │ ├── find.combo.js │ ├── jquery.js │ ├── main.js │ ├── readme │ └── sub.js ├── static │ ├── index.html │ └── site │ │ └── index.html └── tools │ ├── find.all.js │ └── find.all.qzmin └── screenshot └── shot1.png /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | tmp 3 | node_modules.zip 4 | *.iml 5 | .idea 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # LivePool 2 | Fiddler Like debugging proxy for web developers base on NodeJS 3 | 4 | LivePool 是一个基于 NodeJS,类似 Fiddler 支持抓包和本地替换的 Web 开发调试工具,是 Tencent AlloyTeam 在开发实践过程总结出的一套的便捷的 WorkFlow 以及调试方案。 5 | 6 | ## 版本 7 | version: 0.7.2 8 | 9 | ## 特性 10 | - 基于 NodeJS, 跨平台 11 | - 便捷的 UI 界面,跟 Fiddler 类似,降低学习成本 12 | - 支持 http 抓包和本地替换调试,Https/WebSockets 直接代理,暂不支持本地替换 13 | - 基于项目的替换规则管理,方便高效,规则支持拖曳排序 14 | - 支持规则替换,host 配置 15 | - 替换类型支持:文件/文件夹替换,combo合并替换,qzmin替换(批量combo),delay延时等 16 | - 支持自动设置系统代理 17 | - 支持规则过滤,只显示关注的请求 18 | - 提供构建 http get/post 请求界面,方便接口调试 19 | - 特色功能:模拟gprs/3g等低网速(mac only) 20 | - 特色功能:支持离线站点到本地,并自动代码格式化 21 | 22 | ## 安装 23 | - 先安装 nodejs, 参考官网 http://nodejs.org 24 | 25 | ### 从 git 下载安装 26 | - 下载, 运行 livepool 27 | ``` shell 28 | git clone https://github.com/rehorn/livepool 29 | ``` 30 | - 安装依赖 31 | ```shell 32 | cd ~/livepool 33 | npm install 34 | ``` 35 | - 运行 livepool 36 | ```shell 37 | node livepool.js 38 | ``` 39 | 40 | ### 使用 npm 进行全局安装 41 | ``` shell 42 | node install livepool -g 43 | ``` 44 | 45 | - 运行 livepool 46 | ```shell 47 | livepool 48 | ``` 49 | 50 | ### 使用测试 51 | - 将浏览器的代理设置为 http://127.0.0.1:8090, chrome 可以通过 switchsharp 进行 52 | - 打开浏览器,http://127.0.0.1:8002 53 | - 打开需要调试页面地址,如 http://im.qq.com 54 | - 效果如下 55 | ![效果图](http://raw.github.com/rehorn/livepool/master/test/screenshot/shot1.png) 56 | 57 | ## 界面说明 58 | 1. 59 | 60 | ## 使用 LivePool 进行抓包 61 | ### 设置代理 62 | - 浏览器代理 63 | - 64 | - 系统全局代理 65 | ### 查看请求内容 66 | - http request 67 | - http response 68 | - 视图切换 69 | 70 | ## 本地替换开发 71 | ### 新建项目 72 | - 点击新建 73 | - 74 | ### 新建替换规则 75 | - 点击新建 76 | 77 | ### 替换类型 78 | 79 | ## 过滤器 80 | 81 | ## 请求构建器 82 | 83 | ## 错误日志 84 | 85 | ## 模拟低网速[mac] 86 | 87 | ## 离线站点到本地 88 | 89 | ## 快捷操作 90 | - 91 | 92 | ## 快捷键 93 | 94 | ## 95 | 96 | ## TODO 97 | - 完善 Timeline时间轴、Stat统计界面 98 | - LiveReload、AlloyDesinger集成, 99 | - 支持构建工具 task 管理与运行,如 Grunt, Gulp, Mod 100 | - More.... -------------------------------------------------------------------------------- /bin/livepool.cmd: -------------------------------------------------------------------------------- 1 | :: Created by npm, please don't edit manually. 2 | @IF EXIST "%~dp0\node.exe" ( 3 | "%~dp0\node.exe" "%~dp0\livepool.js" %* 4 | ) ELSE ( 5 | node "livepool.js" %* 6 | ) -------------------------------------------------------------------------------- /bin/livepool.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | require('../livepool.js'); 4 | -------------------------------------------------------------------------------- /keys/cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIDUjCCAjoCAQAwDQYJKoZIhvcNAQEFBQAwbzEVMBMGA1UECxMMR29BZ2VudCBS 3 | b290MRAwDgYDVQQKEwdHb0FnZW50MRMwEQYDVQQDEwpHb0FnZW50IENBMREwDwYD 4 | VQQIEwhJbnRlcm5ldDELMAkGA1UEBhMCQ04xDzANBgNVBAcTBkNlcm5ldDAeFw0x 5 | MTA0MjAxNzM3MzVaFw0zMTA0MjAxNzM3MzVaMG8xFTATBgNVBAsTDEdvQWdlbnQg 6 | Um9vdDEQMA4GA1UEChMHR29BZ2VudDETMBEGA1UEAxMKR29BZ2VudCBDQTERMA8G 7 | A1UECBMISW50ZXJuZXQxCzAJBgNVBAYTAkNOMQ8wDQYDVQQHEwZDZXJuZXQwggEi 8 | MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0jV3yx3yGAHlQqzm4fbVascvT 9 | nyCdtParWBnQn5A3U9pJjI47SCo8j7FfeoYSL0mHbJ0mjafTnw+/ewb09AQIkdEl 10 | n6smojl7NOKs1Yhh0yldB6kQWiBPr/XKMBskmvcyjJEqkU6hwtibASaAZt+q5clT 11 | BJ2XRaeAaMDeDbYDchFa7MTNhoQMdQFu1UhqkJxtuVMBEs1/qPbx5O9pqy1RgAeK 12 | WvxyCzVRi2hHaTns+weZBJ6N71afyvr1etGqqtWVpjpobk1ZFBYk4xpznCbm4iqP 13 | Ar9nqdGDw1IJIdX0DyMJIJrpwOf94pAK9v6zG0jnsbMqromL18kEMXZgYSMlAgMB 14 | AAEwDQYJKoZIhvcNAQEFBQADggEBAASiRZFCcgQ8VsncB8wKG+bmN9UZhXLJYRGp 15 | m3KIUy/zG6mMWG/3TgkPn8ivNAkrk+1ul5SrRvot/Q7XWpb0/yKX0faX/512JF2G 16 | 220gopqo4amj+g7SBKxzW8VhLQF6dm99eUd27JbAzi5VKXR0dMFECk2rFlA5gAR5 17 | zzFijaXHuObMtd2S292wji79JWocA0z6WVM5Qokw4hRTsXWfXL0BJTL3i/xRrEzW 18 | sdecYFpNhaEKldjegazoqAqiAMJj7PDU1AqdprNsq+3/tAmCvn0URkas4QhkvtqS 19 | FO6OGm/PZe5GbkBpAKdfLYFfEMO17SAGHHqAsIKAFfuHYONRGSM= 20 | -----END CERTIFICATE----- 21 | -------------------------------------------------------------------------------- /keys/key.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | MIIEowIBAAKCAQEAtI1d8sd8hgB5UKs5uH21WrHL058gnbT2q1gZ0J+QN1PaSYyO 3 | O0gqPI+xX3qGEi9Jh2ydJo2n058Pv3sG9PQECJHRJZ+rJqI5ezTirNWIYdMpXQep 4 | EFogT6/1yjAbJJr3MoyRKpFOocLYmwEmgGbfquXJUwSdl0WngGjA3g22A3IRWuzE 5 | zYaEDHUBbtVIapCcbblTARLNf6j28eTvaastUYAHilr8cgs1UYtoR2k57PsHmQSe 6 | je9Wn8r69XrRqqrVlaY6aG5NWRQWJOMac5wm5uIqjwK/Z6nRg8NSCSHV9A8jCSCa 7 | 6cDn/eKQCvb+sxtI57GzKq6Ji9fJBDF2YGEjJQIDAQABAoIBACB3n2JN/xV1tlsM 8 | P1fuuxLxD+8hGVNivEy5jgLW/q8EVCePr+/3HSlAyauas8tHV5iTrnrFVF2Yp9NO 9 | A0U/MA5+cjaqzLMozt9Z9j0QNPMqbrC89Ojs3AyYXsGZ/veJKlSbtGsMMDCkgiD1 10 | hv/l/+iSY66bEN+n9eQAclY77vQVXLSoCMReVfbdUxU9Q1MywODGf5Kng84gTyT/ 11 | zd+xEfFHz8zbCDyw3Hd3hGJ2FxN+yFz1uI29ORb3/R7N9dZgsWf2fsfiRVPGuhAH 12 | RNlDockImB+BKeidx14sMim5p7s8heVYkBVW3SIOEReqz59b8x4QVhhZrzYWSHNq 13 | Gi0pLiECgYEA26v6b+rsxT//PznJSEhLyrg1Jo6XeWmFlwZY0KoipH6sxX/YPrDZ 14 | bOPN8KvAHtRltRLFs3L2iRaO2jltjxHGVF4FSYrf5KSExuj6/ABHxWM0YtezfDwR 15 | hU1ORg5QwVegMoOgsphS8ts2xn6T6wIwpBgtFPY84A52IBVn5CHuQtkCgYEA0mk5 16 | EpnZfmMT5ldcZ7JlZrxfWKvDHIcuA0neIBsd4oIcEfRhDC3TolH6pB4z4SCqyYw3 17 | t5HMiTx8yz074mycTcOcXO1Cs49kMZwbzKziRXpUdCW4EIo0DG+6LqwetPgYzozg 18 | FeTiGQBHqjrzjBLZ3RfozICbo7dvYHkVLK92my0CgYBWNBjlDnW3ujN6Jj0cxnIn 19 | rT3+UXqTxJsN9wmnaPyLPMKkBlVf1JqeJo9MYLnV31fCRQmcMAMbLOUGMf8SY9FG 20 | jlbY00ylNwJ75DWJ6ro/dXy7RRZELHZbr0iGKVv7Y12UNR88tpXmg6vtHQMC+CsK 21 | Wgpm7XJaIpKsaHoKhl4vkQKBgBBBTsZwGkxYTSZDY4EjWBAax2brRhSDIPviDgX+ 22 | 8k0YbiC493Jga/QjTzC0oJ9ozajqazeETP/hK2bsIR858s1TKlZHghqrHjty6vbh 23 | +E0TyUh7zX+BncnEK+cFJw4mCIyUd49ZcloqGl89VKlin3AkM7jwypVYS4Nxd0BP 24 | geM1AoGBALOWNmYm9d4gRhUv14oJRiA+e+4evswiWvVdnS6UJ4tst0NlEKWahtpR 25 | kdAjav8WV1n6IbkJC2L743Ozjb63z5w6p5O7OtTyYUWbLt1hvNkHlkNP8AjRQP8E 26 | +N2jjrMAdbEwahPNAX9QlzHpF62AfEGQ3oODUm06TGTq+yAPSyYm 27 | -----END RSA PRIVATE KEY----- 28 | -------------------------------------------------------------------------------- /lib/core.js: -------------------------------------------------------------------------------- 1 | var http = require('http'), 2 | https = require('https'), 3 | httpProxy = require('http-proxy'), 4 | fs = require('fs'), 5 | net = require('net'), 6 | path = require('path'), 7 | _ = require('underscore'), 8 | zlib = require('zlib'); 9 | 10 | /** 11 | * self module requirement 12 | * @param {string} module module name 13 | * @return {object} livepool singleton 14 | */ 15 | 16 | function liveRequire(module) { 17 | return livepool[module] = require('./livepool/' + module); 18 | }; 19 | 20 | // livepool module init 21 | var livepool = module.exports = {}; 22 | livepool.verson = '0.7.2'; 23 | livepool.startTime = (new Date()).getTime(); 24 | 25 | // self module require 26 | var config = liveRequire('config'), 27 | logger = liveRequire('logger'), 28 | util = liveRequire('util'), 29 | eventCenter = liveRequire('event'), 30 | request = liveRequire('request'), 31 | notify = liveRequire('notify'), 32 | proxy = liveRequire('proxy'), 33 | response = liveRequire('response'); 34 | 35 | var responders = require('./livepool/responder'); 36 | 37 | var global = config.global, 38 | httpPort = global.http, 39 | httpsPort = global.https, 40 | uiport = global.uiport, 41 | proxyAgent = global.proxy || '', 42 | proxyAgent = proxyAgent.split(':'), 43 | localName = '127.0.0.1'; 44 | 45 | // global 46 | var httpServer, httpsServer, https2http; 47 | var liveapp; 48 | // request session id seed 49 | var idx = 0; 50 | 51 | var ssl = { 52 | key: fs.readFileSync('keys/key.pem'), 53 | cert: fs.readFileSync('keys/cert.pem') 54 | }; 55 | 56 | var proxy2Liveapp = new httpProxy.createProxyServer({ 57 | target: { 58 | host: localName, 59 | port: uiport 60 | } 61 | }); 62 | 63 | function runLiveApp() { 64 | liveapp = require('./webui/liveapp').app.run(); 65 | }; 66 | 67 | function loadPlugins() { 68 | require('./plugins/nocache').run(livepool); 69 | }; 70 | 71 | livepool.run = function() { 72 | logger.writeline(); 73 | logger.log('livepool'.cyan + ' is running, port: ' + String(httpPort).cyan); 74 | 75 | // 加载替换和路由规则 76 | config.loadRules(); 77 | 78 | // 加载插件 79 | loadPlugins(); 80 | 81 | // 初始化webui 82 | runLiveApp(); 83 | 84 | // 设置系统全局代理 85 | if (config.settings.proxy) { 86 | proxy.setProxy(httpPort); 87 | } 88 | 89 | // http proxy server 90 | httpServer = http.createServer(function(req, res) { 91 | var responder; 92 | var reqInfo = request.getReqInfo(req); 93 | var handler = config.getHandler(reqInfo); 94 | var reqUrl = reqInfo.url; 95 | var hostname = reqInfo.headers.host.split(':')[0]; 96 | var sid = ++idx; 97 | var chunks = []; 98 | var options = { 99 | sid: sid 100 | }; 101 | var callback = function(err, body) { 102 | notify.response(sid, req, res, body); 103 | }; 104 | 105 | // notify req 106 | notify.request(sid, req, res); 107 | response.getResInfo(res); 108 | // parse post body 109 | if (req.method == 'POST') { 110 | var body = ''; 111 | req.on('data', function(data) { 112 | body += data; 113 | }); 114 | req.on('end', function() { 115 | notify.reqBody(sid, req, res, body); 116 | }); 117 | } 118 | 119 | res.on('pipe', function(readStream) { 120 | // readStream = response.getResInfo(readStream); 121 | readStream.on('data', function(chunk) { 122 | chunks.push(chunk); 123 | res.write(chunk); 124 | }); 125 | readStream.on('end', function() { 126 | var headers = readStream.headers || []; 127 | var buffer = Buffer.concat(chunks); 128 | var encoding = headers['content-encoding']; 129 | if (encoding == 'gzip') { 130 | zlib.gunzip(buffer, function(err, decoded) { 131 | callback(err, decoded && decoded.toString('binary')); 132 | }); 133 | } else if (encoding == 'deflate') { 134 | zlib.inflate(buffer, function(err, decoded) { 135 | callback(err, decoded && decoded.toString('binary')); 136 | }); 137 | } else { 138 | callback(null, buffer.toString('binary')); 139 | } 140 | }); 141 | }); 142 | 143 | if (reqUrl.match(/127.0.0.1:8002/)) { 144 | // ui app 145 | proxy2Liveapp.web(req, res); 146 | } else if ((hostname != 'localhost') && handler && (responder = responders[handler.respond.type])) { 147 | // local replacement 148 | logger.log('req handler [ ' + handler.respond.type.grey + ' ]: ' + reqUrl.grey); 149 | responder(handler, req, res, options); 150 | } else { 151 | // remote route 152 | responder = responders['route']; 153 | responder(null, req, res, options); 154 | } 155 | 156 | }); 157 | httpServer.setMaxListeners(0); 158 | httpServer.listen(httpPort); 159 | 160 | // directly forward https request 161 | // TODO support https responders 162 | httpServer.on('connect', function(req, cltSocket, head) { 163 | // connect to an origin server 164 | var srvUrl = require('url').parse('http://' + req.url); 165 | var srvSocket = net.connect(srvUrl.port, srvUrl.hostname, function() { 166 | cltSocket.write('HTTP/1.1 200 Connection Established\r\n' + 167 | 'Proxy-agent: LivePool-Proxy\r\n' + 168 | '\r\n'); 169 | srvSocket.write(head); 170 | srvSocket.pipe(cltSocket); 171 | cltSocket.pipe(srvSocket); 172 | }); 173 | }); 174 | 175 | // directly forward websocket 176 | // TODO support websocket responders 177 | httpServer.on('upgrade', function(req, socket, head) { 178 | socket.write('HTTP/1.1 101 Web Socket Protocol Handshake\r\n' + 179 | 'Upgrade: WebSocket\r\n' + 180 | 'Connection: Upgrade\r\n' + 181 | '\r\n'); 182 | 183 | socket.pipe(socket); // echo back 184 | }); 185 | }; 186 | 187 | // stop server 188 | livepool.stop = function() { 189 | if (httpSever) { 190 | httpSever.close(); 191 | } 192 | }; 193 | 194 | livepool.run(); 195 | -------------------------------------------------------------------------------- /lib/livepool/event.js: -------------------------------------------------------------------------------- 1 | var util = require('util'); 2 | var eventEmitter = require('events').EventEmitter; 3 | var EventCenter = function() { 4 | eventEmitter.call(this); 5 | }; 6 | util.inherits(EventCenter, eventEmitter); 7 | module.exports = new EventCenter; 8 | -------------------------------------------------------------------------------- /lib/livepool/logger.js: -------------------------------------------------------------------------------- 1 | /** 2 | * logger 模块 3 | * Thanks to Caolan McMahon's work on Jam on which this file is based. 4 | * https://github.com/caolan/jam/ 5 | */ 6 | 7 | var util = require('util'), 8 | colors = require('colors'), 9 | fs = require('fs'); 10 | 11 | var notify = require('./notify'); 12 | 13 | exports.level = 'info'; 14 | 15 | var forLevels = function(levels, fn) { 16 | return function(label, val) { 17 | for (var i = 0; i < levels.length; i++) { 18 | if (levels[i] === exports.level) { 19 | return fn(label, val); 20 | } 21 | } 22 | }; 23 | }; 24 | 25 | function log(msg) { 26 | console.log(msg); 27 | notify.log(msg.stripColors); 28 | }; 29 | 30 | function logWithoutNotify(msg) { 31 | exports.log(msg); 32 | }; 33 | 34 | /** 35 | * Logs debug messages, using util.inspect to show the properties of objects 36 | * (logged for 'debug' level only) 37 | */ 38 | exports.debug = forLevels(['debug'], function(label, val) { 39 | if (val === undefined) { 40 | val = label; 41 | label = null; 42 | } 43 | if (typeof val !== 'string') { 44 | val = util.inspect(val); 45 | } 46 | if (label && val) { 47 | log(label.magenta + ' ' + val); 48 | } else { 49 | log(label); 50 | } 51 | }); 52 | 53 | /** 54 | * Logs info messages (logged for 'info' and 'debug' levels) 55 | */ 56 | exports.info = forLevels(['info', 'debug'], function(label, val) { 57 | if (val === undefined) { 58 | val = label; 59 | label = null; 60 | } 61 | if (typeof val !== 'string') { 62 | val = util.inspect(val); 63 | } 64 | if (label) { 65 | log(label.cyan + ' ' + val); 66 | } else { 67 | log(val); 68 | } 69 | }); 70 | 71 | /** 72 | * Logs warnings messages (logged for 'warning', 'info' and 'debug' levels) 73 | */ 74 | exports.warn = exports.warning = forLevels(['warning', 'info', 'debug'], function(msg) { 75 | log(('Warning: '.bold + msg).yellow); 76 | }); 77 | 78 | /** 79 | * Logs error messages (always logged) 80 | */ 81 | exports.error = function(err) { 82 | var msg = err.message || err.error || err; 83 | if (err.stack) { 84 | msg = err.stack.replace(/^Error: /, ''); 85 | } 86 | log(('Error: '.bold + msg).red); 87 | }; 88 | 89 | exports.log = function(label, val) { 90 | exports.info(label, val); 91 | }; 92 | 93 | exports.logWithoutNotify = function(label, val) { 94 | logWithoutNotify(label, val); 95 | }; 96 | 97 | exports.writeline = function() { 98 | exports.log('========================================='); 99 | }; 100 | 101 | /** 102 | * Display a failure message if exit is unexpected. 103 | */ 104 | exports.clean_exit = false; 105 | exports.end = function(msg) { 106 | exports.clean_exit = true; 107 | exports.success(msg); 108 | }; 109 | exports.success = function(msg) { 110 | exports.log(('\n' + 'OK'.bold + (msg ? ': '.bold + msg : '')).green); 111 | }; 112 | 113 | var _onExit = function() { 114 | if (!exports.clean_exit) { 115 | exports.log('\n' + 'Failed'.bold.red); 116 | process.removeListener('exit', _onExit); 117 | process.exit(1); 118 | } 119 | }; 120 | process.on('exit', _onExit); 121 | 122 | process.on('uncaughtException', function(err) { 123 | exports.error('uncaughtException: ' + (err.stack || err)); 124 | 125 | // try{ 126 | // fs.appendFile('log/log.txt', '\r\n' + (err.stack || err), function (err) { 127 | // if (err) throw err; 128 | // }); 129 | // }catch(e){ 130 | // exports.error(e); 131 | // } 132 | }); 133 | -------------------------------------------------------------------------------- /lib/livepool/proxy.js: -------------------------------------------------------------------------------- 1 | var util = require('./util'); 2 | var config = require('./config'); 3 | var exec = require('child_process').exec; 4 | var path = require('path'); 5 | 6 | exports.setProxy = function setProxy(port, done) { 7 | if (process.platform == 'win32') { 8 | var dir = path.resolve(__dirname, '../../', 'lib/tools'); 9 | var refresh = 'refreshproxy.exe on 127.0.0.1:' + config.global.http; 10 | util.chdir(dir, function() { 11 | exec(refresh, function(err) { 12 | if (err) { 13 | throw err; 14 | } 15 | if (typeof done == 'function') done(); 16 | }); 17 | }); 18 | } else if (process.platform == 'mac' || process.platform == 'darwin') { 19 | var dir = path.resolve(__dirname, '../../', 'lib/tools'); 20 | var cmd = 'sh proxysetting_mac.sh on ' + config.global.http; 21 | util.chdir(dir, function() { 22 | exec(cmd, function(err) { 23 | if (err) { 24 | throw err; 25 | } 26 | if (typeof done == 'function') done(); 27 | }); 28 | }); 29 | } else if (process.platform == 'linux') { 30 | var proxy = 'export HTTP_PROXY=http://127.0.0.1:' + port; 31 | exec(proxy, function(error) { 32 | if (error) throw error; 33 | if (typeof done == 'function') done(); 34 | }); 35 | } 36 | } 37 | 38 | exports.initProxy = function initProxy(done) { 39 | if (process.platform == 'win32') { 40 | var dir = path.resolve(__dirname, '../../', 'lib/tools'); 41 | var refresh = 'refreshproxy.exe restore'; 42 | util.chdir(dir, function() { 43 | exec(refresh, function(err) { 44 | if (err) { 45 | throw err; 46 | } 47 | if (typeof done == 'function') done(); 48 | }); 49 | }); 50 | } else if (process.platform == 'mac' || process.platform == 'darwin') { 51 | var dir = path.resolve(__dirname, '../../', 'lib/tools'); 52 | var cmd = 'sh proxysetting_mac.sh off'; 53 | util.chdir(dir, function() { 54 | exec(cmd, function(err) { 55 | if (err) { 56 | throw err; 57 | } 58 | if (typeof done == 'function') done(); 59 | }); 60 | }); 61 | } else if (process.platform == 'linux') { 62 | var proxy = 'export HTTP_PROXY=""'; 63 | exec(proxy, function(error) { 64 | if (error) throw error; 65 | if (typeof done == 'function') done(); 66 | }); 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /lib/livepool/request.js: -------------------------------------------------------------------------------- 1 | var ev = require('./event'); 2 | 3 | exports.getReqInfo = function(req) { 4 | ev.emit('beforeRequest', req); 5 | return req; 6 | }; 7 | -------------------------------------------------------------------------------- /lib/livepool/responder/combo.js: -------------------------------------------------------------------------------- 1 | var fs = require('fs'), 2 | path = require('path'), 3 | mime = require('mime'), 4 | _ = require('underscore'); 5 | 6 | function respond404(res) { 7 | // logger 8 | res.writeHead(404); 9 | res.end(); 10 | } 11 | 12 | function comboFiles(target, combos) { 13 | 14 | var content = _.map(combos, function(filepath) { 15 | return fs.readFileSync(filepath); 16 | }).join('\r\n'); 17 | 18 | fs.writeFileSync(target, content); 19 | } 20 | 21 | function respondFile(filepath, res) { 22 | fs.stat(filepath, function(err, stat) { 23 | 24 | res.statusCode = 200; 25 | res.setHeader('Content-Length', stat.size); 26 | res.setHeader('Content-Type', mime.lookup(filepath)); 27 | res.setHeader('Server', 'livepool'); 28 | 29 | fs.createReadStream(filepath).pipe(res); 30 | }); 31 | } 32 | 33 | function comboResponder(handler, req, res, options) { 34 | if (!handler) return; 35 | 36 | var opt = { 37 | forceUpdate: false 38 | }; 39 | _.extend(opt, options); 40 | 41 | var action = handler && handler.action.split('|'); 42 | if (_.isArray(action)) { 43 | var filepath = [], 44 | fileNotFound = false, 45 | maxMTime = new Date('1970').getTime(); 46 | var target = handler.respond.filepath; 47 | var targetMTime, targetStat; 48 | // check all action file is exists 49 | _.each(action, function(item) { 50 | item = path.resolve(handler.base, item); 51 | filepath.push(item); 52 | // fileNotFound 53 | if (!fs.existsSync(item)) { 54 | fileNotFound = true; 55 | return; 56 | } 57 | 58 | var stat = fs.statSync(item); 59 | if (stat && stat.mtime.getTime() > maxMTime) { 60 | maxMTime = stat.mtime.getTime(); 61 | } 62 | }); 63 | 64 | // one of th combo file not found 65 | if (fileNotFound) { 66 | respond404(res); 67 | return; 68 | } 69 | 70 | // check target is exits and out-of-date(modify time is shorten than 500ms) 71 | if (opt.forceUpdate || !(fs.existsSync(target) && 72 | (targetStat = fs.statSync(target)) && 73 | (targetStat.mtime.getTime() - maxMTime) > 500)) { 74 | comboFiles(target, filepath); 75 | } 76 | respondFile(target, res); 77 | } else { 78 | respond404(res); 79 | } 80 | } 81 | 82 | module.exports = comboResponder; 83 | -------------------------------------------------------------------------------- /lib/livepool/responder/delay.js: -------------------------------------------------------------------------------- 1 | var responders = { 2 | combo: require('./combo'), 3 | local: require('./local'), 4 | qzmin: require('./qzmin'), 5 | remote: require('./remote'), 6 | route: require('./route'), 7 | template: require('./template') 8 | }; 9 | var logger = require('../logger'); 10 | var config = require('../config'); 11 | var responder; 12 | 13 | function delayResponder(handler, req, res, options) { 14 | options = options || {}; 15 | var reqUrl = req.url; 16 | var delay = handler.respond.delay || 0; 17 | 18 | logger.log('delay[' + delay + ']: ' + reqUrl); 19 | 20 | setTimeout(function() { 21 | var handler = config.getHandler(req, false); 22 | if (handler && (responder = responders[handler.respond.type])) { 23 | // local replacement 24 | logger.log('delay: req handler [ ' + handler.respond.type.grey + ' ]: ' + reqUrl.grey); 25 | responder(handler, req, res, options); 26 | } else { 27 | // remote route 28 | responder = responders['route']; 29 | responder(null, req, res, options); 30 | } 31 | }, delay * 1000); 32 | }; 33 | 34 | module.exports = delayResponder; 35 | -------------------------------------------------------------------------------- /lib/livepool/responder/index.js: -------------------------------------------------------------------------------- 1 | exports.combo = require('./combo'); 2 | exports.local = require('./local'); 3 | exports.qzmin = require('./qzmin'); 4 | exports.remote = require('./remote'); 5 | exports.route = require('./route'); 6 | exports.template = require('./template'); 7 | exports.delay = require('./delay'); 8 | -------------------------------------------------------------------------------- /lib/livepool/responder/local.js: -------------------------------------------------------------------------------- 1 | var fs = require('fs'); 2 | var mime = require('mime'); 3 | 4 | function localFileResponder(handler, req, res, options) { 5 | 6 | var filepath = handler.respond.filepath; 7 | fs.existsSync(filepath) && fs.stat(filepath, function(err, stat) { 8 | if (err) { 9 | throw err; 10 | } 11 | 12 | if (!stat.isFile()) { 13 | throw new Error('The responder is not a file!'); 14 | } 15 | 16 | res.statusCode = options.statusCode || 200; 17 | res.setHeader('Content-Length', stat.size); 18 | res.setHeader('Content-Type', mime.lookup(filepath)); 19 | res.setHeader('Server', 'livepool'); 20 | 21 | fs.createReadStream(filepath).pipe(res); 22 | }); 23 | }; 24 | 25 | module.exports = localFileResponder; 26 | -------------------------------------------------------------------------------- /lib/livepool/responder/qzmin.js: -------------------------------------------------------------------------------- 1 | var fs = require('fs'), 2 | path = require('path'), 3 | _ = require('underscore'), 4 | comboResponder = require('./combo'); 5 | 6 | var qzminCache = {}; 7 | 8 | function js2json(jsString) { 9 | // Remove BOM 10 | if (jsString.charCodeAt(0) === 0xFEFF) { 11 | jsString = jsString.substring(1); 12 | } 13 | var result = jsString.replace(/([^"\s]\S+[^"])\s*:/g, '"$1":'); 14 | return result.replace(/\'/g, '"'); 15 | }; 16 | 17 | function respond404(res) { 18 | // logger 19 | res.writeHead(404); 20 | res.end(); 21 | } 22 | 23 | function qzminResponder(handler, req, res, options) { 24 | var qzminFilepath = path.join(handler.base, handler.action); 25 | // console.log(qzminFilepath) 26 | if (!fs.existsSync(qzminFilepath)) { 27 | respond404(res); 28 | return; 29 | } 30 | 31 | var qzminDirPath = path.dirname(qzminFilepath); 32 | var qzminJson = js2json(fs.readFileSync(qzminFilepath, 'utf8')); 33 | var qzmin = JSON.parse(qzminJson); 34 | // qzmin 要配合willow其实只有projects有效 35 | var project = qzmin.projects[0]; 36 | var target = path.join(qzminDirPath, project.target); 37 | 38 | var options = options || {}, 39 | qzminStat; 40 | // check if qzmin combo out of date 41 | if (!qzminCache[qzminFilepath] || !((qzminStat = fs.statSync(qzminFilepath)) && 42 | (qzminCache[qzminFilepath] - qzminStat.mtime.getTime()) > 500)) { 43 | // resolve include path 44 | var includes = _.map(project.include, function(value) { 45 | return path.join(qzminDirPath, value); 46 | }); 47 | 48 | handler.action = includes.join('|'); 49 | console.log(handler.action) 50 | qzminCache[qzminFilepath] = new Date().getTime(); 51 | options.forceUpdate = true; 52 | } 53 | 54 | handler.respond.filepath = target; 55 | comboResponder(handler, req, res, options); 56 | }; 57 | 58 | module.exports = qzminResponder; 59 | -------------------------------------------------------------------------------- /lib/livepool/responder/remote.js: -------------------------------------------------------------------------------- 1 | var http = require('http'), 2 | url = require('url'), 3 | Buffer = require('buffer').Buffer, 4 | logger = require('../logger'); 5 | 6 | function remoteResponder(handler, req, res, options) { 7 | 8 | var reqUrl = url.parse(handler.action); 9 | var buffers = []; 10 | var options = { 11 | hostname: reqUrl.hostname, 12 | port: 80, 13 | path: reqUrl.pathname, 14 | method: 'GET' 15 | }; 16 | 17 | var request = http.request(options, function(response) { 18 | response.pipe(res); 19 | }); 20 | 21 | request.on('error', function(e) { 22 | logger.log('problem with request: ' + e.message); 23 | }); 24 | 25 | request.end(); 26 | } 27 | 28 | module.exports = remoteResponder; 29 | -------------------------------------------------------------------------------- /lib/livepool/responder/route.js: -------------------------------------------------------------------------------- 1 | var url = require('url'), 2 | fs = require('fs'), 3 | dns = require('dns'); 4 | 5 | var httpProxy = require('http-proxy'); 6 | var httpProxyAgent = require('http-proxy-agent'); 7 | 8 | var config = require('../config'), 9 | liveRequest = require('../request'), 10 | logger = require('../logger'), 11 | notify = require('../notify'), 12 | templateResponder = require('./template'); 13 | 14 | var global = config.global; 15 | 16 | function routeResponder(router, req, res, options) { 17 | var proxyHost = ''; 18 | var reqInfo = liveRequest.getReqInfo(req); 19 | router = router || config.getRouter(reqInfo); 20 | if (router) { 21 | // directly proxy 22 | if (router.action == '-') { 23 | goProxy(req, res, null, options); 24 | } else { 25 | // proxy to specified server 26 | goProxy(req, res, router.action, options); 27 | } 28 | } else { 29 | // directly proxy 30 | goProxy(req, res, null, options); 31 | } 32 | }; 33 | 34 | function goProxy(req, res, router, options) { 35 | var host, port, hostIp; 36 | if (router) { 37 | host = router.split(':')[0]; 38 | port = router.split(':')[1] || '80'; 39 | } 40 | var urlObj = url.parse(req.url); 41 | urlObj.host = host || urlObj.hostname; 42 | urlObj.port = port || urlObj.port; 43 | 44 | // TODO req.connect.remoteAddress -> 127.0.0.1 45 | // hack -> use dns resolve to get ip of hostname 46 | // known issue: multi ip don't know which one is used for socket connection 47 | var re = /((?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))/; 48 | if (re.test(urlObj.host)) { 49 | notify.hostIp(options.sid, req, res, [urlObj.host]); 50 | } else { 51 | dns.resolve4(urlObj.host, function(err, address) { 52 | if (err) { 53 | return ; 54 | }; 55 | notify.hostIp(options.sid, req, res, address); 56 | }); 57 | } 58 | 59 | // logger.log('req proxied, host:' + host + ', port:' + port + ', url:' + req.url); 60 | var proxy = httpProxy.createProxyServer({}); 61 | var proxyOptions = { 62 | target: { 63 | host: urlObj.host, 64 | port: urlObj.port 65 | } 66 | }; 67 | // TODO: router with a proxy agent has errors 68 | // router ip should be visit without proxy agent 69 | if (!router && global.proxy) { 70 | proxyOptions.agent = httpProxyAgent(global.proxy); 71 | } 72 | proxy.web(req, res, proxyOptions, function(e) { 73 | console.log('[proxy error]: ' + req.url); 74 | console.log(e.stack); 75 | 76 | var options = { 77 | statusCode: 503 78 | }; 79 | templateResponder('503_ProxyError.html', req, res, options); 80 | }); 81 | }; 82 | 83 | module.exports = routeResponder; 84 | -------------------------------------------------------------------------------- /lib/livepool/responder/template.js: -------------------------------------------------------------------------------- 1 | var path = require('path'); 2 | var localFileResponder = require('./local'); 3 | 4 | function templateResponder(tpl, req, res, options) { 5 | options = options || {}; 6 | var _handler = {}; 7 | var filepath = path.join(__dirname, '../../template', tpl); 8 | _handler.respond = { 9 | filepath: filepath 10 | }; 11 | localFileResponder(_handler, req, res, { 12 | statusCode: options.statusCode 13 | }); 14 | }; 15 | 16 | module.exports = templateResponder; 17 | -------------------------------------------------------------------------------- /lib/livepool/response.js: -------------------------------------------------------------------------------- 1 | var ev = require('./event'); 2 | exports.getResInfo = function(res) { 3 | ev.emit('beforeResponse', res); 4 | return res; 5 | }; 6 | -------------------------------------------------------------------------------- /lib/livepool/util.js: -------------------------------------------------------------------------------- 1 | var _ = require('underscore'), 2 | path = require('path'), 3 | fs = require('fs'); 4 | var exec = require('child_process').exec; 5 | 6 | var util = module.exports = {}; 7 | 8 | util._ = _; 9 | 10 | var win32 = process.platform === 'win32', 11 | windowsDriveRegExp = /^[a-zA-Z]\:\/$/, 12 | pathSeparatorRe = /[\/\\]/g; 13 | 14 | var pathExists = fs.exists || path.exists; 15 | var existsSync = fs.existsSync || path.existsSync; 16 | 17 | util.exists = existsSync; 18 | 19 | util.endsWith = function(src, str) { 20 | return str.length > 0 && src.substring(src.length - str.length, src.length) === str; 21 | } 22 | 23 | util.detectDestType = function(target) { 24 | return (util.endsWith(target, '\\') || util.endsWith(target, '/')) ? 'dir' : 'file'; 25 | }; 26 | 27 | util.mkdirpSync = function(dirpath, mode) { 28 | if (mode == null) { 29 | mode = parseInt('0777', 8) & (~process.umask()); 30 | } 31 | // reduce方法把列表中元素归结为一个简单的数值 32 | dirpath.split(pathSeparatorRe).reduce(function(parts, part) { 33 | parts += path.join(part, path.sep); 34 | var subpath = path.resolve(parts); 35 | if (!existsSync(subpath)) { 36 | fs.mkdirSync(subpath, mode); 37 | } 38 | return parts; 39 | }, ''); 40 | }; 41 | 42 | /** 43 | * 格式化日期 44 | * 45 | * yyyy-------年 46 | * MM---------月 47 | * dd---------日 48 | * hh---------时 49 | * mm---------分 50 | * formatDate(new Date() , 'yyyy-MM-dd mm:hh'); 51 | * or formateDate(new Date(), 'yyyy/MM/dd mm/hh'); 52 | * * @param {Date}date 需要格式化的日期对象 53 | * @param {Object} style 样式 54 | * @return 返回格式化后的当前时间 55 | */ 56 | util.formatDate = function(date, style) { 57 | var y = date.getFullYear(); 58 | var M = "0" + (date.getMonth() + 1); 59 | M = M.substring(M.length - 2); 60 | var d = "0" + date.getDate(); 61 | d = d.substring(d.length - 2); 62 | var h = "0" + date.getHours(); 63 | h = h.substring(h.length - 2); 64 | var m = "0" + date.getMinutes(); 65 | m = m.substring(m.length - 2); 66 | var s = "0" + date.getSeconds(); 67 | s = s.substring(s.length - 2); 68 | return style.replace('yyyy', y).replace('MM', M).replace('dd', d).replace('hh', h).replace('mm', m).replace('ss', s); 69 | }; 70 | 71 | util.copyFile = function(source, target, cb) { 72 | var cbCalled = false; 73 | var rd = fs.createReadStream(source); 74 | rd.on("error", function(err) { 75 | done(err); 76 | }); 77 | var wr = fs.createWriteStream(target); 78 | wr.on("error", function(err) { 79 | done(err); 80 | }); 81 | wr.on("close", function(ex) { 82 | done(); 83 | }); 84 | rd.pipe(wr); 85 | 86 | function done(err) { 87 | if (!cbCalled) { 88 | cb(err); 89 | cbCalled = true; 90 | } 91 | } 92 | }; 93 | 94 | util.getUUId = function() { 95 | function s4() { 96 | return Math.floor((1 + Math.random()) * 0x10000) 97 | .toString(16) 98 | .substring(1); 99 | } 100 | return s4() + s4() + '-' + s4() + '-' + s4() + '-' + 101 | s4() + '-' + s4() + s4() + s4(); 102 | }; 103 | 104 | /** chdir **/ 105 | 106 | function chdir(dir, cb) { 107 | chdir.push(); 108 | process.chdir(dir); 109 | if (cb) { 110 | cb(); 111 | } 112 | chdir.pop(); 113 | } 114 | 115 | chdir.stack = []; 116 | 117 | chdir.push = function(dir) { 118 | chdir.stack.push(dir === undefined ? process.cwd() : dir); 119 | }; 120 | 121 | chdir.pop = function() { 122 | var dir = chdir.stack.shift(); 123 | if (dir !== undefined) { 124 | process.chdir(dir); 125 | } 126 | }; 127 | 128 | util.chdir = chdir; 129 | 130 | util.speedLimitStart = function(type, port) { 131 | type = type || 'WIFI'; 132 | var delay = 250; //ms 133 | var map = { 134 | 'WIFI': { 135 | speed: '2048', // kbit/s 136 | delay: delay 137 | }, 138 | 'ADSL': { 139 | speed: '768', 140 | delay: delay 141 | }, 142 | '3g': { 143 | speed: '348', 144 | delay: delay 145 | }, 146 | 'Edge': { 147 | speed: '64', 148 | delay: delay 149 | }, 150 | 'GPRS': { 151 | speed: '48', 152 | delay: delay 153 | } 154 | }; 155 | var cmd = 'sh speedlimiter start ' + map[type].speed + ' ' + map[type].delay + ' 0 no localhost ' + port; 156 | var dir = path.resolve(__dirname, '../../', 'lib/tools'); 157 | util.speedLimitStop(function() { 158 | util.chdir(dir, function() { 159 | exec(cmd, function(err) { 160 | if (err) { 161 | throw err; 162 | } 163 | }); 164 | }); 165 | }); 166 | }; 167 | 168 | util.speedLimitList = function(callback) { 169 | var dir = path.resolve(__dirname, '../../', 'lib/tools'); 170 | var cmd = 'sh speedlimiter list'; 171 | util.chdir(dir, function() { 172 | exec(cmd, function(err, result) { 173 | if (err) { 174 | // console.log(err); 175 | } 176 | if (callback) { 177 | var lines = result.split('\n'); 178 | var rules = []; 179 | _.each(lines, function(line) { 180 | if (line.indexOf('8090') >= 0) { 181 | rules.push(parseInt(line)); 182 | } 183 | }) 184 | callback(rules); 185 | } 186 | }); 187 | }); 188 | }; 189 | 190 | util.speedLimitStop = function(callback) { 191 | util.speedLimitList(function(rules) { 192 | var cmd = 'sh speedlimiter stop ' + rules.join(' '); 193 | var dir = path.resolve(__dirname, '../../', 'lib/tools'); 194 | util.chdir(dir, function() { 195 | exec(cmd, function(err) { 196 | if (err) { 197 | // console.log(err); 198 | } 199 | if (callback) callback(); 200 | }); 201 | }); 202 | }) 203 | }; 204 | 205 | util.getHostPortFromString = function(hostString, defaultPort) { 206 | var regex_hostport = /^([^:]+)(:([0-9]+))?$/; 207 | var host = hostString; 208 | var port = defaultPort; 209 | var result = regex_hostport.exec(hostString); 210 | if (result != null) { 211 | host = result[1]; 212 | if (result[2] != null) { 213 | port = result[3]; 214 | } 215 | } 216 | return ([host, port]); 217 | }; 218 | -------------------------------------------------------------------------------- /lib/plugins/beautify/readme: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/plugins/beautify/readme -------------------------------------------------------------------------------- /lib/plugins/netsimulate/readme: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/plugins/netsimulate/readme -------------------------------------------------------------------------------- /lib/plugins/nocache/index.js: -------------------------------------------------------------------------------- 1 | exports.run = function(livepool) { 2 | var config = livepool.config; 3 | if (config.settings.disableCache) { 4 | var ev = livepool.event; 5 | ev.on('beforeResponse', function(res) { 6 | res.setHeader('Cache-control', 'no-cache'); 7 | res.setHeader('Expires', 0); 8 | // res.statusCode = res.statusCode == 304 ? 200 : res.statusCode; 9 | }); 10 | } 11 | }; 12 | -------------------------------------------------------------------------------- /lib/plugins/nocache/readme: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/plugins/nocache/readme -------------------------------------------------------------------------------- /lib/plugins/sitecacher/readme: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/plugins/sitecacher/readme -------------------------------------------------------------------------------- /lib/template/200_FiddlerGif.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/template/200_FiddlerGif.dat -------------------------------------------------------------------------------- /lib/template/200_SimpleHTML.dat: -------------------------------------------------------------------------------- 1 | HTTP/1.1 200 OK 2 | FiddlerTemplate: True 3 | Content-Length: 51 4 | Server: LivePool 5 | 6 | This is a simple Fiddler-returned HTML page. -------------------------------------------------------------------------------- /lib/template/200_TransPixel.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/template/200_TransPixel.dat -------------------------------------------------------------------------------- /lib/template/204_NoContent.dat: -------------------------------------------------------------------------------- 1 | HTTP/1.1 204 No Content 2 | FiddlerTemplate: True 3 | Content-Length: 0 4 | Server: LivePool 5 | 6 | -------------------------------------------------------------------------------- /lib/template/302_Redirect.dat: -------------------------------------------------------------------------------- 1 | HTTP/1.1 302 Redirect 2 | FiddlerTemplate: True 3 | Location: http://www.fiddler2.com/sandbox/FormAndCookie.asp 4 | Content-Length: 0 5 | Server: LivePool 6 | 7 | -------------------------------------------------------------------------------- /lib/template/303_RedirectWithGet.dat: -------------------------------------------------------------------------------- 1 | HTTP/1.1 303 Redirect Using GET 2 | FiddlerTemplate: True 3 | Location: http://www.fiddler2.com/sandbox/FormAndCookie.asp 4 | Content-Length: 0 5 | Server: LivePool 6 | 7 | -------------------------------------------------------------------------------- /lib/template/304_NotModified.dat: -------------------------------------------------------------------------------- 1 | HTTP/1.1 304 Not Modified 2 | FiddlerTemplate: True 3 | Content-Length: 0 4 | Server: LivePool 5 | 6 | -------------------------------------------------------------------------------- /lib/template/307_RedirectWithMethod.dat: -------------------------------------------------------------------------------- 1 | HTTP/1.1 307 Redirect using same Method 2 | FiddlerTemplate: True 3 | Location: http://www.fiddler2.com/sandbox/FormAndCookie.asp 4 | Content-Length: 0 5 | Server: LivePool 6 | 7 | -------------------------------------------------------------------------------- /lib/template/401_AuthBasic.dat: -------------------------------------------------------------------------------- 1 | HTTP/1.1 401 Authentication Required 2 | FiddlerTemplate: True 3 | WWW-Authenticate: Basic realm="Fiddler" 4 | Content-Type: text/html 5 | Content-Length: 520 6 | Server: LivePool 7 | 8 | Fiddler: HTTP/401 Basic Server Auth Required. -------------------------------------------------------------------------------- /lib/template/401_AuthDigest.dat: -------------------------------------------------------------------------------- 1 | HTTP/1.1 401 Authentication Required 2 | FiddlerTemplate: True 3 | WWW-Authenticate: Digest realm="realm@example.com",qop="auth,auth-int",nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",opaque="5ccc069c403ebaf9f0171e9517f40e41" 4 | Content-Type: text/html 5 | Content-Length: 520 6 | Server: LivePool 7 | 8 | Fiddler: HTTP/401 Digest Server Auth Required. -------------------------------------------------------------------------------- /lib/template/403_AuthDeny.dat: -------------------------------------------------------------------------------- 1 | HTTP/1.1 403 Access Denied 2 | FiddlerTemplate: True 3 | Content-Length: 520 4 | Server: LivePool 5 | 6 | Fiddler: HTTP/403 Access Denied. -------------------------------------------------------------------------------- /lib/template/404_Plain.dat: -------------------------------------------------------------------------------- 1 | HTTP/1.1 404 Not Found 2 | FiddlerTemplate: True 3 | Content-Type: text/html 4 | Content-Length: 520 5 | Server: LivePool 6 | 7 | LivePool: HTTP/404 Not Found -------------------------------------------------------------------------------- /lib/template/407_ProxyAuthBasic.dat: -------------------------------------------------------------------------------- 1 | HTTP/1.1 407 Proxy Auth Required 2 | FiddlerTemplate: True 3 | Proxy-Authenticate: Basic realm="Fiddler (just hit Ok)" 4 | Content-Type: text/html 5 | Content-Length: 520 6 | Server: LivePool 7 | 8 | LivePool: HTTP/407 Proxy Auth Required. -------------------------------------------------------------------------------- /lib/template/502_Unreachable.dat: -------------------------------------------------------------------------------- 1 | HTTP/1.1 502 Unreachable Server 2 | FiddlerTemplate: True 3 | Content-Type: text/html 4 | Content-Length: 520 5 | Server: LivePool 6 | 7 | LivePool: HTTP/502 unreachable server. -------------------------------------------------------------------------------- /lib/template/503_ProxyError.html: -------------------------------------------------------------------------------- 1 | LivePool HttpProxy error ! -------------------------------------------------------------------------------- /lib/tools/auth/Authenticate.app/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildMachineOSBuild 6 | 11C74 7 | CFBundleDevelopmentRegion 8 | en 9 | CFBundleDocumentTypes 10 | 11 | CFBundleExecutable 12 | Authenticate 13 | CFBundleIconFile 14 | lock.icns 15 | CFBundleIdentifier 16 | com.BinaryGhost.Authenticate 17 | CFBundleInfoDictionaryVersion 18 | 6.0 19 | CFBundleName 20 | Authenticate 21 | CFBundlePackageType 22 | APPL 23 | CFBundleShortVersionString 24 | 1.0 25 | CFBundleSignature 26 | ???? 27 | CFBundleURLTypes 28 | 29 | CFBundleVersion 30 | 1 31 | DTCompiler 32 | com.apple.compilers.llvm.clang.1_0 33 | DTPlatformBuild 34 | 4B110 35 | DTPlatformVersion 36 | GM 37 | DTSDKBuild 38 | 11A511a 39 | DTSDKName 40 | macosx10.7 41 | DTXcode 42 | 0410 43 | DTXcodeBuild 44 | 4B110 45 | LSMinimumSystemVersion 46 | 10.7 47 | NSHumanReadableCopyright 48 | Copyright © 2011 Don Southard. All rights reserved. 49 | NSMainNibFile 50 | MainMenu 51 | NSPrincipalClass 52 | NSApplication 53 | NSServices 54 | 55 | UTExportedTypeDeclarations 56 | 57 | UTImportedTypeDeclarations 58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /lib/tools/auth/Authenticate.app/Contents/MacOS/Authenticate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/tools/auth/Authenticate.app/Contents/MacOS/Authenticate -------------------------------------------------------------------------------- /lib/tools/auth/Authenticate.app/Contents/PkgInfo: -------------------------------------------------------------------------------- 1 | APPL???? -------------------------------------------------------------------------------- /lib/tools/auth/Authenticate.app/Contents/Resources/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/tools/auth/Authenticate.app/Contents/Resources/en.lproj/InfoPlist.strings -------------------------------------------------------------------------------- /lib/tools/auth/Authenticate.app/Contents/Resources/en.lproj/MainMenu.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/tools/auth/Authenticate.app/Contents/Resources/en.lproj/MainMenu.nib -------------------------------------------------------------------------------- /lib/tools/auth/Authenticate.app/Contents/Resources/lock.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/tools/auth/Authenticate.app/Contents/Resources/lock.icns -------------------------------------------------------------------------------- /lib/tools/auth/Authenticate.app/Contents/Resources/lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/tools/auth/Authenticate.app/Contents/Resources/lock.png -------------------------------------------------------------------------------- /lib/tools/auth/readme.md: -------------------------------------------------------------------------------- 1 | http://www.dirtdon.com/Authenticate/ -------------------------------------------------------------------------------- /lib/tools/beautify/scripts/run.js: -------------------------------------------------------------------------------- 1 | /* This Source Code Form is subject to the terms of the Mozilla Public 2 | * License, v. 2.0. If a copy of the MPL was not distributed with this 3 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 | 5 | (function() { 6 | "use strict"; 7 | 8 | // Cache the console log function and the process arguments. 9 | var log = console.log; 10 | var argv = process.argv; 11 | 12 | // Require path and file system utilities to load the jshint.js file. 13 | var path = require("path"); 14 | var fs = require("fs"); 15 | 16 | // The source file to be prettified, original source's path and some options. 17 | var tempPath = argv[2] || ""; 18 | var filePath = argv[3] || ""; 19 | var options = { 20 | html: {}, 21 | css: {}, 22 | js: {} 23 | }; 24 | 25 | // This stuff does all the magic. 26 | var html_beautify = require(path.join(__dirname, "beautify-html.js")).html_beautify; 27 | var js_beautify = require(path.join(__dirname, "beautify.js")).js_beautify; 28 | var css_beautify = require(path.join(__dirname, "beautify-css.js")).css_beautify; 29 | 30 | // Some handy utility functions. 31 | 32 | function isTrue(value) { 33 | return value == "true" || value == true; 34 | } 35 | 36 | function getUserHome() { 37 | return process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE; 38 | } 39 | 40 | function getOptions(file) { 41 | var data = fs.readFileSync(file, "utf8"); 42 | var comments = /(?:\/\*(?:[\s\S]*?)\*\/)|(?:\/\/(?:.*)$)/gm; 43 | try { 44 | return JSON.parse(data.replace(comments, "")); 45 | } catch (e) { 46 | return Object.create(null); 47 | } 48 | } 49 | 50 | function setOptions(file, optionsStore) { 51 | var obj = getOptions(file); 52 | for (var key in obj) { 53 | var value = obj[key]; 54 | 55 | // Options are defined as an object for each format, with keys as prefs. 56 | if (key != "html" && key != "css" && key != "js") { 57 | continue; 58 | } 59 | for (var pref in value) { 60 | // Special case "true" and "false" pref values as actually booleans. 61 | // This avoids common accidents in .jsbeautifyrc json files. 62 | if (value == "true" || value == "false") { 63 | optionsStore[key][pref] = isTrue(value[pref]); 64 | } else { 65 | optionsStore[key][pref] = value[pref]; 66 | } 67 | } 68 | } 69 | } 70 | 71 | var jsbeautifyrc = ".jsbeautifyrc"; 72 | var pluginFolder = path.dirname(__dirname); 73 | var sourceFolder = path.dirname(filePath); 74 | var sourceParent = path.dirname(sourceFolder); 75 | var jsbeautifyrcPath; 76 | 77 | // Older versions of node has `existsSync` in the path module, not fs. Meh. 78 | fs.existsSync = fs.existsSync || path.existsSync; 79 | 80 | // Try and get some persistent options from the plugin folder. 81 | if (fs.existsSync(jsbeautifyrcPath = pluginFolder + path.sep + jsbeautifyrc)) { 82 | setOptions(jsbeautifyrcPath, options); 83 | } 84 | 85 | // When a JSBeautify config file exists in the same dir as the source file or 86 | // one dir above, then use this configuration to overwrite the default prefs. 87 | 88 | // Try and get more options from the source's folder. 89 | if (fs.existsSync(jsbeautifyrcPath = sourceFolder + path.sep + jsbeautifyrc)) { 90 | setOptions(jsbeautifyrcPath, options); 91 | } 92 | // ...or the parent folder. 93 | else if (fs.existsSync(jsbeautifyrcPath = sourceParent + path.sep + jsbeautifyrc)) { 94 | setOptions(jsbeautifyrcPath, options); 95 | } 96 | // ...or the user's home folder if everything else fails. 97 | else if (fs.existsSync(jsbeautifyrcPath = getUserHome() + path.sep + jsbeautifyrc)) { 98 | setOptions(jsbeautifyrcPath, options); 99 | } 100 | 101 | function isHTML(path, data) { 102 | return path.match(/\.html?$/) || 103 | path.match(/\.xhtml?$/) || 104 | path.match(/\.xml$/) || 105 | path.match(/\.html\.erb$/) || 106 | (path == "?" && data.match(/^\s* .. " 19 | fi 20 | SPEED="$1Kbit/s" 21 | shift 22 | 23 | DELAY="$1ms" 24 | shift 25 | 26 | PLR="$1" 27 | shift 28 | 29 | PLR_SUPPRESS="$1" 30 | shift 31 | 32 | if [[ "$PLR_SUPPRESS" == "yes" ]]; then 33 | PLR_SUPPRESS="noerror" 34 | else 35 | PLR_SUPPRESS="" 36 | fi 37 | 38 | HOSTS="${1//,/ }" 39 | if [[ "$HOSTS" == "" ]]; then 40 | HOSTS="any" 41 | fi 42 | shift 43 | 44 | PIPE=100 45 | while [[ -n "$1" ]]; do 46 | PORT=$1 47 | shift 48 | 49 | for HOST in ${HOSTS[@]}; do 50 | HOST=${HOST// /} 51 | echo $PASS | sudo -S sh -c "/sbin/ipfw add pipe $PIPE ip from $HOST $PORT to me" 52 | #/sbin/ipfw add pipe $PIPE ip from any $PORT to $HOST out 53 | echo $PASS | sudo -S sh -c "/sbin/ipfw pipe $((PIPE ++)) config $PLR_SUPPRESS bw $SPEED queue 64Kbytes delay $DELAY plr $PLR" 54 | echo $PASS | sudo -S sh -c "/sbin/ipfw add pipe $PIPE ip from me $PORT to $HOST" 55 | #/sbin/ipfw add pipe $PIPE ip from any $PORT to $HOST in 56 | echo $PASS | sudo -S sh -c "/sbin/ipfw pipe $((PIPE ++)) config $PLR_SUPPRESS bw $SPEED queue 64Kbytes delay $DELAY plr $PLR" 57 | done 58 | done 59 | elif [[ "$ACTION" == "stop" ]]; then 60 | if [[ $# -lt 2 ]]; then 61 | echo "Usage: $0 stop [rule1] [rule2] .. " 62 | exit 1 63 | fi 64 | 65 | while [[ -n "$1" ]]; do 66 | RULE=$1 67 | shift 68 | echo $PASS | sudo -S sh -c "/sbin/ipfw delete $RULE" 69 | done 70 | elif [[ "$ACTION" == "list" ]]; then 71 | echo $PASS | sudo -S sh -c "/sbin/ipfw list $*" 72 | else 73 | echo "Usage: $0 start/stop/list" 74 | exit 1 75 | fi 76 | -------------------------------------------------------------------------------- /lib/webui/liveapp.js: -------------------------------------------------------------------------------- 1 | var path = require('path'), 2 | fs = require('fs'), 3 | rimraf = require('rimraf'); 4 | 5 | var routes = require('./routes'); 6 | 7 | var _socket = null; 8 | var config, logger, util; 9 | 10 | var express = require('express.io'); 11 | var liveapp = express(); 12 | liveapp.http().io(); 13 | 14 | var publicPath = __dirname + '/public', 15 | viewPath = __dirname + '/views'; 16 | 17 | // create tmp folder 18 | 19 | function createSocketFolder() { 20 | var _path = path.join(config.global.tempDir, _socket.id); 21 | if (!util.exists(_path)) { 22 | util.mkdirpSync(_path); 23 | } 24 | }; 25 | 26 | function removeSocketFolder() { 27 | var path = config.global.tempDir; 28 | try { 29 | rimraf.sync(path); 30 | } catch (e) { 31 | 32 | } 33 | }; 34 | 35 | liveapp.configure(function() { 36 | liveapp.set('views', viewPath); 37 | liveapp.set('basepath', publicPath); 38 | liveapp.use(express.logger('dev')); 39 | liveapp.use(express.json()); 40 | liveapp.use(express.urlencoded()); 41 | liveapp.use(express.methodOverride()); 42 | liveapp.use(liveapp.router); 43 | routes(liveapp); 44 | }); 45 | 46 | liveapp.configure('development', function() { 47 | liveapp.use(express.static(publicPath)); 48 | liveapp.use(express.errorHandler({ 49 | dumpExceptions: true, 50 | showStack: true 51 | })); 52 | }); 53 | // liveapp.io.set('transports', ['websocket']); 54 | 55 | liveapp.configure('production', function() { 56 | var oneYear = 31557600000; 57 | liveapp.use(express.static(publicPath, { 58 | maxAge: oneYear 59 | })); 60 | liveapp.use(express.errorHandler()); 61 | }); 62 | 63 | liveapp.run = function() { 64 | config = require('../livepool/config'); 65 | logger = require('../livepool/logger'); 66 | util = require('../livepool/util'); 67 | proxy = require('../livepool/proxy'); 68 | var uiport = config.global.uiport; 69 | 70 | liveapp.listen(uiport); 71 | 72 | // browser connection -> keep only one socket connection 73 | liveapp.io.sockets.on('connection', function(socket) { 74 | console.log('connect:' + socket.id); 75 | _socket = socket; 76 | exports.socket = _socket; 77 | createSocketFolder(); 78 | if (config.settings.proxy) { 79 | proxy.setProxy(); 80 | } 81 | 82 | socket.on('disconnect', function(socket) { 83 | console.log('disconnect:' + _socket.id); 84 | removeSocketFolder(); 85 | if (config.settings.proxy) { 86 | proxy.initProxy(); 87 | } 88 | delete _socket; 89 | }); 90 | 91 | socket.emit('config', config.settings); 92 | }); 93 | 94 | logger.log('liveapp ui'.cyan + ' is ready, port: ' + String(uiport).cyan); 95 | }; 96 | 97 | // publish 98 | exports.app = liveapp; 99 | -------------------------------------------------------------------------------- /lib/webui/public/css/main.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: tahoma, arial, sans-serif, 'Helvetica Neue', Helvetica, 'Microsoft YaHei UI', 'Microsoft YaHei' !important; 3 | } 4 | .tran-background { 5 | background-image: url(../img/tbg.jpg); 6 | } 7 | #mainContainer-body, #resPanel-body, #reqPanel-body { 8 | border: 0 !important; 9 | } 10 | /*hack*/ 11 | .x-grid-row .x-grid-cell, .x-btn-default-toolbar-small .x-btn-inner, .x-column-header, .x-toolbar .x-toolbar-text, .x-tab button { 12 | font-family: tahoma, arial, sans-serif, 'Helvetica Neue', Helvetica, 'Microsoft YaHei UI', 'Microsoft YaHei' !important; 13 | } 14 | .x-grid-record-gray { 15 | /*background: #FF0000;*/ 16 | color: #888; 17 | } 18 | .x-grid-record-green { 19 | /*color: #2ECC40;*/ 20 | color: #228B22; 21 | } 22 | .x-grid-record-red { 23 | color: #FF4136; 24 | } 25 | .x-grid-record-maroon { 26 | color: #85144B; 27 | } 28 | .x-grid-record-blue { 29 | color: #0074D9; 30 | } 31 | .x-grid-record-navy { 32 | color: #001F3F; 33 | } 34 | .x-grid-record-olive { 35 | color: #800080; 36 | } 37 | .x-grid-record-blue2 { 38 | color: #fff; 39 | } 40 | .x-grid-record-blue2 td { 41 | background: #4290D5 !important; 42 | } 43 | .x-grid-record-maroon2 { 44 | color: #fff; 45 | } 46 | .x-grid-record-maroon2 td { 47 | background: #bb427d !important; 48 | } 49 | .x-grid-record-gray2 { 50 | /*color: #fff;*/ 51 | } 52 | .x-grid-record-gray2 td { 53 | background: #cecece !important; 54 | } 55 | .x-action-col-icon { 56 | height: 16px; 57 | width: 16px; 58 | margin-right: 4px; 59 | } 60 | .x-tree-panel .x-grid-cell-inner { 61 | cursor: default; 62 | } 63 | .p-hide-action-col-icon { 64 | height: 16px; 65 | width: 16px; 66 | visibility: hidden; 67 | cursor: default !important; 68 | } 69 | /* jsoneditor */ 70 | .jsoneditor { 71 | border: none !important; 72 | } 73 | .jsoneditor .menu { 74 | border-bottom: 1px solid #AFB6BE; 75 | background-color: #E0E3E6; 76 | } 77 | .jsoneditor .search .frame { 78 | border: 1px solid #AFB6BE; 79 | } 80 | .jsoneditor .menu button { 81 | border: 1px solid #AFB6BE; 82 | } 83 | .jsoneditor .frame button { 84 | border: none; 85 | } 86 | .jsoneditor .field, .jsoneditor .value, .jsoneditor td, .jsoneditor th, .jsoneditor textarea { 87 | font-family: tahoma, arial, sans-serif, 'Helvetica Neue', Helvetica, 'Microsoft YaHei UI', 'Microsoft YaHei' !important; 88 | } 89 | /* other */ 90 | #global-zeroclipboard-html-bridge { 91 | z-index: 999999 !important; 92 | } 93 | #drop_zone { 94 | border: 2px dashed #bbb; 95 | -moz-border-radius: 5px; 96 | -webkit-border-radius: 5px; 97 | border-radius: 5px; 98 | padding: 25px; 99 | text-align: center; 100 | font: 20pt bold'Vollkorn'; 101 | color: #bbb; 102 | } 103 | -------------------------------------------------------------------------------- /lib/webui/public/img/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/img/add.png -------------------------------------------------------------------------------- /lib/webui/public/img/no-img-data.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/img/no-img-data.jpg -------------------------------------------------------------------------------- /lib/webui/public/img/stackoverflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/img/stackoverflow.png -------------------------------------------------------------------------------- /lib/webui/public/img/tbg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/img/tbg.jpg -------------------------------------------------------------------------------- /lib/webui/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Live Pool Client App 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /lib/webui/public/js/CONST.js: -------------------------------------------------------------------------------- 1 | var CONST = { 2 | host: '127.0.0.1', 3 | layout: 'default' 4 | }; 5 | -------------------------------------------------------------------------------- /lib/webui/public/js/io.js: -------------------------------------------------------------------------------- 1 | var initSocketIO = function() { 2 | io = io.connect(); 3 | io.on('proxy', function(proxy) { 4 | if (proxy.length) { 5 | var req = [], 6 | res = []; 7 | Ext.Array.each(proxy, function(data) { 8 | // var rs = filterData(data.rows); 9 | var rs = data.rows; 10 | if (data.type == 'req') { 11 | req = req.concat(rs); 12 | // store.add(data.rows); 13 | // store.insert(0, data.rows); 14 | } else { 15 | res = res.concat(rs); 16 | } 17 | }); 18 | store.add(req); 19 | Ext.Array.each(res, function(row) { 20 | var gridRow = store.findRecord('id', row.id); 21 | if (gridRow) { 22 | row.result && gridRow.set('result', row.result); 23 | row.body && gridRow.set('body', row.body); 24 | row.reqBody && gridRow.set('reqBody', unescape(row.reqBody)); 25 | row.contentType && gridRow.set('contentType', row.contentType); 26 | row.caching && gridRow.set('caching', row.caching); 27 | row.resHeaders && gridRow.set('resHeaders', row.resHeaders); 28 | row.resTime && gridRow.set('resTime', row.resTime); 29 | row.hostIp && gridRow.set('hostIp', row.hostIp); 30 | } 31 | }); 32 | 33 | // apply max session 34 | if ($cmp.data.showSession !== 'All') { 35 | var max = parseInt($cmp.data.showSession); 36 | var count = store.getCount(); 37 | if (count + req.length > max) { 38 | var removeRecords = store.getRange(0, (count + req.length - max)); 39 | store.remove(removeRecords); 40 | } 41 | } 42 | 43 | store.save(); 44 | 45 | // apply filter 46 | if ($cmp.useFilter.getValue()) { 47 | observers.onFilterGrid(); 48 | } 49 | // apply auto scroll 50 | if ($cmp.data.autoScroll) { 51 | observers.onScrollGridToEnd(); 52 | } 53 | // apply tree refresh 54 | if ($cmp.pathTree && $cmp.data.autoRefeshTree) { 55 | SESSION_TREE.refresh(); 56 | } 57 | } 58 | 59 | }); 60 | 61 | io.on('log', function(msg) { 62 | $cmp.logWin.setValue(msg + '\n' + $cmp.logWin.getValue()); 63 | }); 64 | 65 | io.on('rulesImport', function() { 66 | poolTreeStore.load(); 67 | }); 68 | 69 | io.on('poolTreeUpdated', function() { 70 | poolTreeStore.load(); 71 | }); 72 | 73 | io.on('config', function(config) { 74 | if (config.keep) { 75 | $cmp.btnKeep.setChecked(config.keep); 76 | } 77 | if (config.proxy) { 78 | $cmp.chkProxy.setChecked(config.proxy); 79 | } 80 | if (config.disablePool) { 81 | $cmp.disablePool.toggle(config.disablePool); 82 | } 83 | if (config.disableCache) { 84 | $cmp.menuDisableCache.setChecked(config.disableCache); 85 | } 86 | if (config.disableCacheForce) { 87 | $cmp.menuDisableCacheForce.setChecked(config.disableCacheForce); 88 | } 89 | if (config.autoScroll) { 90 | $cmp.btnAutoScroll.setChecked(true); 91 | $cmp.data.autoScroll = true; 92 | } 93 | if (config.showSession) { 94 | var map = { 95 | 'All': 0, 96 | '100': 1, 97 | '200': 2, 98 | '500': 3, 99 | '1000': 4 100 | }; 101 | $cmp.radioShowSession.menu.items.getAt(map[config.showSession]).setChecked(true); 102 | } 103 | if (config.speedLimit) { 104 | var map = { 105 | 'Disabled': 0, 106 | 'WIFI': 1, 107 | 'ADSL': 2, 108 | '3g': 3, 109 | 'Edge': 4, 110 | 'GPRS': 5 111 | }; 112 | $cmp.speedLimit.menu.items.getAt(map[config.speedLimit]).setChecked(true); 113 | } 114 | if (config.layout) { 115 | $cmp.data.layout = config.layout; 116 | } 117 | if (config.tabSetting) { 118 | $cmp.data.tabSetting = config.tabSetting; 119 | } 120 | if (config.sessionColumns) { 121 | $cmp.data.sessionColumns = config.sessionColumns; 122 | } 123 | if (config.platform != 'darwin') { 124 | $cmp.speedLimit.setVisible(false); 125 | } 126 | }); 127 | }; 128 | -------------------------------------------------------------------------------- /lib/webui/public/js/keymap.js: -------------------------------------------------------------------------------- 1 | var initKeyMap = function() { 2 | 3 | // keymap 4 | // ctrl+x to remove all session @ session grid 5 | new Ext.KeyMap('gridpanel', { 6 | key: 'x', 7 | ctrl: true, 8 | handler: function(key, event) { 9 | store.removeAll(); 10 | }, 11 | stopEvent: true 12 | }); 13 | 14 | // r to replay current 15 | new Ext.KeyMap('gridpanel', { 16 | key: 'r', 17 | handler: function(key, event) { 18 | observers.onSessionReplay(); 19 | observers.onScrollGridToEnd(); 20 | }, 21 | stopEvent: true 22 | }); 23 | 24 | // shift+c to clone 25 | new Ext.KeyMap('poolTree', { 26 | key: 'c', 27 | shift: true, 28 | handler: function(key, event) { 29 | observers.pool.onClone(); 30 | }, 31 | stopEvent: true 32 | }); 33 | new Ext.KeyMap('poolTree', { 34 | key: 'd', 35 | shift: true, 36 | handler: function(key, event) { 37 | if (!$cmp.poolTree.getSelectionModel().hasSelection()) { 38 | $cmp.poolTree.selModel.doSelect($cmp.poolTree.getRootNode().getChildAt(0)); 39 | } 40 | var sel = $cmp.poolTree.getSelectionModel().getSelection()[0]; 41 | if (sel.data.type != 'group') { 42 | observers.pool.onDelete(sel); 43 | } 44 | }, 45 | stopEvent: true 46 | }); 47 | }; 48 | -------------------------------------------------------------------------------- /lib/webui/public/js/node.webkit.js: -------------------------------------------------------------------------------- 1 | // var gui = require('nw.gui'); 2 | // var win = gui.Window.get(); 3 | // win.on('load', function() { 4 | // win.maximize(); 5 | // }); 6 | // win.on('close', function() { 7 | // this.hide(); 8 | // var self = this; 9 | // proxy.initProxy(function() { 10 | // self.close(true); 11 | // }); 12 | // }); 13 | 14 | // win.on("closed", function() { 15 | // win = null; 16 | // }) 17 | 18 | // win.on('minimize', function() { 19 | // this.hide(); 20 | 21 | // tray = new gui.Tray({ 22 | // icon: 'lib/webui/public/img/stackoverflow.png' 23 | // }) 24 | 25 | // tray.on('click', function(e) { 26 | // win.show(); 27 | // this.remove(); 28 | // tray = null; 29 | // }); 30 | // }); 31 | -------------------------------------------------------------------------------- /lib/webui/public/js/store.js: -------------------------------------------------------------------------------- 1 | // store 2 | var store = Ext.create('Ext.data.Store', { 3 | storeId: 'livepool', 4 | fields: [ 5 | 'id', 6 | 'idx', 7 | 'result', 8 | 'protocol', 9 | 'host', 10 | 'hostIp', 11 | 'url', 12 | 'path', 13 | 'pathname', 14 | 'body', 15 | 'rawBody', 16 | 'reqBody', 17 | 'caching', 18 | 'contentType', 19 | 'req', 20 | 'res', 21 | 'reqTime', 22 | 'resTime', 23 | 'reqHeaders', 24 | 'resHeaders' 25 | ], 26 | data: { 27 | 'items': [] 28 | }, 29 | buffered: true, 30 | pageSize: 5000, 31 | proxy: { 32 | type: 'memory', 33 | reader: { 34 | type: 'json', 35 | root: 'items' 36 | } 37 | } 38 | }); 39 | 40 | var reqHeaderStore = Ext.create('Ext.data.Store', { 41 | fields: ['key', 'value'], 42 | data: { 43 | 'items': [] 44 | }, 45 | buffered: true, 46 | pageSize: 5000, 47 | proxy: { 48 | type: 'memory', 49 | reader: { 50 | type: 'json', 51 | root: 'items' 52 | } 53 | } 54 | }); 55 | 56 | var resHeaderStore = Ext.create('Ext.data.Store', { 57 | fields: ['key', 'value'], 58 | data: { 59 | 'items': [] 60 | }, 61 | buffered: true, 62 | pageSize: 5000, 63 | proxy: { 64 | type: 'memory', 65 | reader: { 66 | type: 'json', 67 | root: 'items' 68 | } 69 | } 70 | }); 71 | 72 | var reqCookieStore = Ext.create('Ext.data.Store', { 73 | fields: ['key', 'value'], 74 | data: { 75 | 'items': [] 76 | }, 77 | buffered: true, 78 | pageSize: 5000, 79 | proxy: { 80 | type: 'memory', 81 | reader: { 82 | type: 'json', 83 | root: 'items' 84 | } 85 | } 86 | }); 87 | var resCookieStore = Ext.create('Ext.data.Store', { 88 | fields: ['key', 'value'], 89 | data: { 90 | 'items': [] 91 | }, 92 | buffered: true, 93 | pageSize: 5000, 94 | proxy: { 95 | type: 'memory', 96 | reader: { 97 | type: 'json', 98 | root: 'items' 99 | } 100 | } 101 | }); 102 | var reqWebformStore = Ext.create('Ext.data.Store', { 103 | fields: ['name', 'value'], 104 | data: { 105 | 'items': [] 106 | }, 107 | buffered: true, 108 | pageSize: 5000, 109 | proxy: { 110 | type: 'memory', 111 | reader: { 112 | type: 'json', 113 | root: 'items' 114 | } 115 | } 116 | }); 117 | 118 | var urlMatchComboStore = Ext.create('Ext.data.Store', { 119 | fields: ['name', 'value'], 120 | data: [{ 121 | "name": "include", 122 | "value": "1" 123 | }, { 124 | "name": "exclude", 125 | "value": "2" 126 | }] 127 | }); 128 | var reqMethodStore = Ext.create('Ext.data.Store', { 129 | fields: ['name', 'value'], 130 | data: [{ 131 | "name": "GET", 132 | "value": "GET" 133 | }, { 134 | "name": "POST", 135 | "value": "POST" 136 | }, { 137 | "name": "PUT", 138 | "value": "PUT" 139 | }, { 140 | "name": "HEAD", 141 | "value": "HEAD" 142 | }, { 143 | "name": "TRACE", 144 | "value": "TRACE" 145 | }, { 146 | "name": "DELETE", 147 | "value": "DELETE" 148 | }, { 149 | "name": "SEARCH", 150 | "value": "SEARCH" 151 | }, { 152 | "name": "CONNECT", 153 | "value": "CONNECT" 154 | }, { 155 | "name": "PROPFIND", 156 | "value": "PROPFIND" 157 | }, { 158 | "name": "PROPPATCH", 159 | "value": "PROPPATCH" 160 | }, { 161 | "name": "PATCH", 162 | "value": "PATCH" 163 | }, { 164 | "name": "MKCOL", 165 | "value": "MKCOL" 166 | }, { 167 | "name": "COPY", 168 | "value": "COPY" 169 | }, { 170 | "name": "LOCK", 171 | "value": "LOCK" 172 | }, { 173 | "name": "UNLOCK", 174 | "value": "UNLOCK" 175 | }, { 176 | "name": "OPTIONS", 177 | "value": "OPTIONS" 178 | }] 179 | }); 180 | var httpVersionStore = Ext.create('Ext.data.Store', { 181 | fields: ['name', 'value'], 182 | data: [{ 183 | "name": "HTTP/2.0", 184 | "value": "2.0" 185 | }, { 186 | "name": "HTTP/1.2", 187 | "value": "1.2" 188 | }, { 189 | "name": "HTTP/1.1", 190 | "value": "1.1" 191 | }, { 192 | "name": "HTTP/1.0", 193 | "value": "1.0" 194 | }, { 195 | "name": "HTTP/0.9", 196 | "value": "0.9" 197 | }] 198 | }); 199 | var poolTreeStore = Ext.create('Ext.data.TreeStore', { 200 | fields: ['id', 'parentId', 'name', 'sort', 'match', 'action', 'checked', 'type'], 201 | proxy: { 202 | type: 'ajax', 203 | // url: '/pool/get', 204 | api: { 205 | create: '/pool/create', 206 | read: '/pool/get', 207 | update: '/pool/update', 208 | destroy: '/pool/remove' 209 | }, 210 | writer: { 211 | type: 'json', 212 | allowSingle: false, 213 | root: 'records' 214 | } 215 | }, 216 | root: { 217 | id: -1, 218 | expanded: true, 219 | text: "Root" 220 | }, 221 | autoLoad: true 222 | }); 223 | var keyMapStore = Ext.create('Ext.data.Store', { 224 | fields: ['scope', 'key', 'text'], 225 | data: [{ 226 | 'scope': '[Session]', 227 | 'key': 'ctrl+x', 228 | 'text': 'Remove All Sessions' 229 | }, { 230 | 'scope': '[Session]', 231 | 'key': 'r', 232 | 'text': 'Replay Current Session' 233 | }, { 234 | 'scope': '[Pool]', 235 | 'key': 'shift+c', 236 | 'text': 'Clone Current Project/Rule' 237 | }, { 238 | 'scope': '[Pool]', 239 | 'key': 'shift+d', 240 | 'text': 'Delete Current Project/Rule' 241 | }] 242 | }); 243 | -------------------------------------------------------------------------------- /lib/webui/public/js/utils.js: -------------------------------------------------------------------------------- 1 | var utils = { 2 | objToPlain: function(obj) { 3 | var str = ''; 4 | for (var name in obj) { 5 | str += name + ': ' + obj[name] + '\r\n'; 6 | } 7 | return str; 8 | }, 9 | parseHeader: function(headerText) { 10 | // load request header 11 | var regex = /(.*?): (.*?)\r\n/g; 12 | var result = regex.exec(headerText); 13 | var headers = []; 14 | while (result != null) { 15 | var header = { 16 | key: RegExp.$1, 17 | value: RegExp.$2 18 | }; 19 | headers.push(header); 20 | result = regex.exec(headerText); 21 | } 22 | return _.sortBy(headers, function(header) { 23 | return header.key; 24 | }); 25 | }, 26 | parseCookie: function(cookieText) { 27 | cookieText += '; '; 28 | // load request header 29 | var regex = /(.*?)=(.*?); /g; 30 | var result = regex.exec(cookieText); 31 | var headers = []; 32 | while (result != null) { 33 | var header = { 34 | key: RegExp.$1, 35 | value: RegExp.$2 36 | }; 37 | headers.push(header); 38 | result = regex.exec(cookieText); 39 | } 40 | return _.sortBy(headers, function(header) { 41 | return header.key; 42 | }); 43 | }, 44 | formateSize: function(size) { 45 | size = parseFloat(size); 46 | var rank = 0; 47 | var rankchar = 'B'; 48 | while (size > 1024) { 49 | size = size / 1024; 50 | rank++; 51 | } 52 | if (rank == 1) { 53 | rankchar = "KB"; 54 | } else if (rank == 2) { 55 | rankchar = "MB"; 56 | } else if (rank == 3) { 57 | rankchar = "GB"; 58 | } 59 | return size.toFixed(1) + " " + rankchar; 60 | }, 61 | formateTime: function(time) { 62 | time = parseFloat(time); 63 | var rank = 0; 64 | var rankchar = 'ms'; 65 | while (size > 1024) { 66 | size = size / 1024; 67 | rank++; 68 | } 69 | if (rank == 1) { 70 | rankchar = "s"; 71 | } else if (rank == 2) { 72 | rankchar = "MB"; 73 | } else if (rank == 3) { 74 | rankchar = "GB"; 75 | } 76 | return size.toFixed(1) + " " + rankchar; 77 | }, 78 | convertTime: function(time) { 79 | time = parseFloat(time); 80 | if (!time || time < 0) { 81 | return 0; 82 | } 83 | if (time >= 0 && time <= 1000) { 84 | return time + 'ms'; 85 | } else { 86 | time = time / 1000; 87 | if (time > 60 && time < 60 * 60) { 88 | time = parseInt(time / 60.0) + 'm' + parseInt((parseFloat(time / 60.0) - 89 | parseInt(time / 60.0)) * 60) + 's'; 90 | } else if (time >= 60 * 60 && time < 60 * 60 * 24) { 91 | time = parseInt(time / 3600.0) + 'h' + parseInt((parseFloat(time / 3600.0) - 92 | parseInt(time / 3600.0)) * 60) + 'm' + 93 | parseInt((parseFloat((parseFloat(time / 3600.0) - parseInt(time / 3600.0)) * 60) - 94 | parseInt((parseFloat(time / 3600.0) - parseInt(time / 3600.0)) * 60)) * 60) + 's'; 95 | } else { 96 | time = parseInt(time) + 's'; 97 | } 98 | } 99 | }, 100 | updateQueryStringParameter: function(uri, key, value) { 101 | var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i"); 102 | var separator = uri.indexOf('?') !== -1 ? "&" : "?"; 103 | if (uri.match(re)) { 104 | return uri.replace(re, '$1' + key + "=" + value + '$2'); 105 | } else { 106 | return uri + separator + key + "=" + value; 107 | } 108 | }, 109 | toUnicode: function(str) { 110 | return escape(str).replace(/%/g, "\\").toLowerCase(); 111 | }, 112 | unUnicode: function(str) { 113 | return unescape(str.replace(/\\/g, "%")); 114 | }, 115 | parseQueryString: function(query) { 116 | var match, 117 | pl = /\+/g, // Regex for replacing addition symbol with a space 118 | search = /([^&=]+)=?([^&]*)/g, 119 | decode = function(s) { 120 | return decodeURIComponent(s.replace(pl, " ")); 121 | }, 122 | query = query; 123 | 124 | var urlMap = {}; 125 | var urlArray = []; 126 | while (match = search.exec(query)) { 127 | urlMap[decode(match[1])] = decode(match[2]); 128 | urlArray.push({ 129 | name: decode(match[1]), 130 | value: decode(match[2]) 131 | }); 132 | } 133 | return { 134 | map: urlMap, 135 | arr: urlArray 136 | }; 137 | }, 138 | filterCookieHeader: function(cookies) { 139 | var cookieHeaders = ['p3p', 'set-cookie']; 140 | var rs = []; 141 | _.map(cookies, function(value, key) { 142 | if (_.contains(cookieHeaders, key.toLowerCase())) { 143 | if (_.isArray(value)) { 144 | _.each(value, function(item) { 145 | rs.push({ 146 | key: key, 147 | value: item 148 | }); 149 | }); 150 | } else { 151 | rs.push({ 152 | key: key, 153 | value: value 154 | }); 155 | } 156 | } 157 | }); 158 | return rs; 159 | } 160 | }; 161 | -------------------------------------------------------------------------------- /lib/webui/public/js/ux.plugin.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author: Mask 3 | * @since: 2012-11-17 4 | * @memo: 跨浏览器的复制至剪切板插件(基于ZeroClipboard) 5 | * { 6 | xtype: 'button', 7 | text: '复制', 8 | plugins: { 9 | ptype: 'zeroclipboardplugin', 10 | // form中某个表单域的name属性,复制内容为此表单域的值 11 | targetCmpName: 'contentName' 12 | } 13 | } 14 | { 15 | xtype: 'button', 16 | text: '复制', 17 | plugins: { 18 | ptype: 'zeroclipboardplugin', 19 | // 复制内容为function所返回的值 20 | targetFun: function() { 21 | return "function所返回的值"; 22 | } 23 | } 24 | } 25 | { 26 | xtype: 'button', 27 | text: '复制', 28 | plugins: { 29 | ptype: 'zeroclipboardplugin', 30 | // 复制的内容 31 | targetValue: '复制的内容' 32 | } 33 | } 34 | */ 35 | Ext.define('Ext.ux.ZeroClipboardPlugin', { 36 | alias: 'plugin.zeroclipboardplugin', 37 | constructor: function(config) { 38 | var me = this; 39 | Ext.apply(me, config); 40 | }, 41 | init: function(component) { 42 | var me = this, 43 | jsLoader; 44 | me.component = component; 45 | component.on('boxready', me.initZeroClipboard, me, { 46 | single: true 47 | }); 48 | component.on('mouseover', me.glueZeroClipboard, me); 49 | component.on('mouseout', me.unGlueZeroClipboard, me); 50 | }, 51 | initZeroClipboard: function() { 52 | var me = this; 53 | ZeroClipboard.setMoviePath('/libs/zeroclipboard/ZeroClipboard.swf'); 54 | me.clip = new ZeroClipboard.Client(); 55 | me.clip.setHandCursor(true); 56 | me.clip.addEventListener("mouseover", Ext.bind(me.onMouseOver, me)); 57 | me.clip.addEventListener('complete', function(client, text) { 58 | me.clip.hide(); 59 | }); 60 | }, 61 | unGlueZeroClipboard: function() { 62 | var me = this; 63 | if (me.clip) { 64 | me.clip.unglue(me.component.getEl().id); 65 | } 66 | }, 67 | glueZeroClipboard: function() { 68 | var me = this; 69 | if (me.clip) { 70 | // me.clip.destroy(); 71 | // ZeroClipboard.destroy(); 72 | me.clip.glue(me.component.getEl().id); 73 | } 74 | }, 75 | onMouseOver: function() { 76 | var me = this, 77 | value; 78 | if (me.targetFun) { 79 | var rs = me.targetFun(me.component); 80 | value = rs.text; 81 | var id = rs.id; 82 | if (id == me.cmp.id) { 83 | me.clip.setText(value); 84 | } 85 | } 86 | }, 87 | destroy: function() { 88 | var me = this; 89 | me.component.clearListeners(); 90 | me.clip.destroy(); 91 | delete me.component; 92 | delete me.clip; 93 | } 94 | }); 95 | -------------------------------------------------------------------------------- /lib/webui/public/js/view.tab.composer.js: -------------------------------------------------------------------------------- 1 | var TAB_COMPOSER = { 2 | title: 'Composer', 3 | layout: 'fit', 4 | items: [{ 5 | id: 'composerForm', 6 | xtype: 'panel', 7 | padding: 5, 8 | border: 0, 9 | layout: { 10 | type: 'vbox', 11 | align: 'stretch' 12 | }, 13 | items: [{ 14 | xtype: 'fieldcontainer', 15 | width: '100%', 16 | layout: { 17 | type: 'hbox', 18 | align: 'stretch' 19 | }, 20 | items: [{ 21 | id: 'reqMethod', 22 | xtype: 'combobox', 23 | width: 90, 24 | store: reqMethodStore, 25 | queryMode: 'local', 26 | displayField: 'name', 27 | valueField: 'name' 28 | }, { 29 | id: 'reqUrl', 30 | xtype: 'textfield', 31 | flex: 1, 32 | margin: '0 10' 33 | }, { 34 | id: 'reqHttpVersion', 35 | xtype: 'combobox', 36 | width: 90, 37 | store: httpVersionStore, 38 | queryMode: 'local', 39 | displayField: 'name', 40 | valueField: 'name' 41 | }, { 42 | xtype: 'button', 43 | width: 70, 44 | text: 'Execute', 45 | margin: '0 0 0 10', 46 | handler: function() { 47 | var method = Ext.getCmp('reqMethod').getValue(); 48 | var headers = $cmp.composerSession.data.reqHeaders; 49 | var url = Ext.getCmp('reqUrl').getValue(); 50 | var body = {}; 51 | if (method == 'POST') { 52 | body = Ext.getCmp('reqBody').getValue(); 53 | } 54 | var params = { 55 | method: method, 56 | body: body, 57 | url: url, 58 | headers: JSON.stringify(headers) 59 | }; 60 | 61 | Ext.Ajax.request({ 62 | url: '/compose', 63 | params: params, 64 | method: 'POST', 65 | success: function(response, options) { 66 | 67 | }, 68 | failure: function(response, options) { 69 | 70 | } 71 | }); 72 | } 73 | }] 74 | }, { 75 | id: 'reqHeaders', 76 | xtype: 'textareafield', 77 | width: '100%', 78 | flex: 1 79 | }, { 80 | id: 'reqBody', 81 | xtype: 'textareafield', 82 | width: '100%', 83 | flex: 1 84 | }] 85 | }], 86 | listeners: { 87 | activate: function(tab) { 88 | var formPanel = Ext.getCmp('composerForm'); 89 | var ddrow = new Ext.dd.DropTarget(formPanel.body.dom, { 90 | ddGroup: 'GridDD', 91 | notifyEnter: function(ddSource, e, data) { 92 | formPanel.body.highlight(); 93 | }, 94 | notifyDrop: function(dd, e, data) { 95 | var record = data.records[0]; 96 | // console.log(record); 97 | $cmp.composerSession = record; 98 | Ext.getCmp('reqMethod').setValue(record.data.req.method); 99 | Ext.getCmp('reqUrl').setValue(record.data.url); 100 | Ext.getCmp('reqHttpVersion').setValue('HTTP/' + record.data.req.httpVersion); 101 | Ext.getCmp('reqHeaders').setValue(utils.objToPlain(record.data.reqHeaders)); 102 | Ext.getCmp('reqBody').setValue(record.data.reqBody); 103 | } 104 | }); 105 | } 106 | } 107 | }; 108 | -------------------------------------------------------------------------------- /lib/webui/public/js/view.tab.filter.js: -------------------------------------------------------------------------------- 1 | var TAB_FILTER = { 2 | id: 'tabFilter', 3 | title: 'Filters', 4 | padding: 10, 5 | layout: { 6 | type: 'vbox', 7 | align: 'stretch' 8 | }, 9 | items: [{ 10 | xtype: 'container', 11 | layout: 'hbox', 12 | items: [{ 13 | id: 'useFilter', 14 | xtype: 'checkbox', 15 | boxLabel: 'Use Filter', 16 | name: 'isFilterOn', 17 | handler: function(checkbox, checked) { 18 | if (checked) { 19 | observers.onFilterGrid(); 20 | } else { 21 | store.clearFilter(false); 22 | } 23 | } 24 | }, { 25 | xtype: 'button', 26 | text: 'Apply', 27 | margin: '0 0 0 15', 28 | handler: function() { 29 | observers.onFilterGrid(); 30 | } 31 | }, { 32 | xtype: 'button', 33 | text: 'Reset', 34 | margin: '0 5', 35 | handler: function() { 36 | store.clearFilter(false); 37 | $cmp.useFilter.setValue(false); 38 | $cmp.urlMatchValue.setValue(''); 39 | $cmp.urlMatchType = Ext.getCmp('urlMatchType'); 40 | $cmp.filterResStatusCodeNotModified.setValue(false); 41 | $cmp.filterResStatusCode200.setValue(false); 42 | $cmp.filterResStatusCodeN200.setValue(false); 43 | $cmp.filterResStatusCodeRedirect.setValue(false); 44 | $cmp.filterResImages.setValue(false); 45 | } 46 | }] 47 | }, { 48 | xtype: 'fieldset', 49 | title: 'Match url', 50 | items: [{ 51 | id: 'urlMatchType', 52 | xtype: 'combobox', 53 | width: 200, 54 | store: urlMatchComboStore, 55 | queryMode: 'local', 56 | displayField: 'name', 57 | valueField: 'value' 58 | }, { 59 | id: 'urlMatchValue', 60 | xtype: 'textareafield', 61 | width: '100%' 62 | }] 63 | }, { 64 | xtype: 'fieldset', 65 | title: 'Response Status Code', 66 | items: [{ 67 | xtype: 'fieldcontainer', 68 | layout: { 69 | type: 'hbox' 70 | }, 71 | items: [{ 72 | id: 'filterResStatusCode200', 73 | xtype: 'checkbox', 74 | boxLabel: 'Hide Success 200', 75 | flex: 1, 76 | }, { 77 | id: 'filterResStatusCodeN200', 78 | xtype: 'checkbox', 79 | flex: 1, 80 | boxLabel: 'Hide non-200' 81 | }] 82 | }, { 83 | xtype: 'fieldcontainer', 84 | layout: { 85 | type: 'hbox' 86 | }, 87 | items: [{ 88 | id: 'filterResStatusCodeNotModified', 89 | xtype: 'checkbox', 90 | flex: 1, 91 | boxLabel: 'Hide Not-Modified 304' 92 | }, { 93 | id: 'filterResStatusCodeRedirect', 94 | xtype: 'checkbox', 95 | flex: 1, 96 | boxLabel: 'Hide Redirect(300,301,302,303,307)' 97 | }] 98 | }] 99 | }, { 100 | xtype: 'fieldset', 101 | title: 'Response Content Type', 102 | items: [{ 103 | xtype: 'fieldcontainer', 104 | layout: { 105 | type: 'hbox' 106 | }, 107 | items: [{ 108 | id: 'filterResImages', 109 | xtype: 'checkbox', 110 | boxLabel: 'Hide Images', 111 | flex: 1, 112 | }] 113 | }] 114 | }] 115 | }; 116 | -------------------------------------------------------------------------------- /lib/webui/public/js/view.tab.log.js: -------------------------------------------------------------------------------- 1 | var TAB_LOG = { 2 | id: 'tabLog', 3 | title: 'Log', 4 | padding: 5, 5 | layout: 'fit', 6 | items: [{ 7 | id: 'log', 8 | layout: 'fit', 9 | xtype: 'textareafield', 10 | fieldStyle: "background: #FEFEFE none repeat scroll 0 0 !important;" 11 | }] 12 | }; 13 | -------------------------------------------------------------------------------- /lib/webui/public/js/view.tab.stat.js: -------------------------------------------------------------------------------- 1 | var TAB_STAT = { 2 | id: 'tabStatistics', 3 | title: 'Statistics', 4 | html: 'Comming Soon...', 5 | padding: 5 6 | }; 7 | -------------------------------------------------------------------------------- /lib/webui/public/js/view.tab.timeline.js: -------------------------------------------------------------------------------- 1 | var TAB_TIMELINE = { 2 | id: 'tabTimeline', 3 | title: 'Timeline', 4 | html: 'Comming Soon...', 5 | padding: 5 6 | }; 7 | -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/js/azzurra.js: -------------------------------------------------------------------------------- 1 | Ext.define('Ext.window.WindowActiveCls', { 2 | override: 'Ext.window.Window', 3 | 4 | statics: { 5 | _activeWindow: null 6 | }, 7 | 8 | shadow: false, 9 | ui: 'blue-window', 10 | border: false, 11 | setActive: function (active, newActive) { 12 | 13 | var me = this; 14 | 15 | if (!me.el) 16 | return; 17 | 18 | if (active) { 19 | me.addCls('x-window-active'); 20 | 21 | var paw = Ext.window.Window._activeWindow; 22 | Ext.window.Window._activeWindow = me; 23 | 24 | if (paw && paw != me && paw.el) { 25 | paw.removeCls('x-window-active'); 26 | } 27 | } else { 28 | me.removeCls('x-window-active'); 29 | } 30 | 31 | this.callParent(arguments); 32 | } 33 | }); 34 | -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/boundlist/trigger-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/boundlist/trigger-arrow.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/button/arrow.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/button/arrow.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/button/btn-arrow.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/button/btn-arrow.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/button/s-arrow-b-noline.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/button/s-arrow-b-noline.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/button/s-arrow-b.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/button/s-arrow-b.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/button/s-arrow-bo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/button/s-arrow-bo.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/button/s-arrow-light.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/button/s-arrow-light.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/button/s-arrow-noline.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/button/s-arrow-noline.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/button/s-arrow-o.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/button/s-arrow-o.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/button/s-arrow.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/button/s-arrow.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/dd/drop-add.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/dd/drop-add.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/dd/drop-no.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/dd/drop-no.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/dd/drop-yes.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/dd/drop-yes.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/editor/tb-sprite-medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/editor/tb-sprite-medium.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/editor/tb-sprite.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/editor/tb-sprite.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/editor/tb-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/editor/tb-sprite.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/form/checkbox.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/form/checkbox.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/form/clear-trigger-medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/form/clear-trigger-medium.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/form/clear-trigger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/form/clear-trigger.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/form/date-trigger-medium.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/form/date-trigger-medium.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/form/date-trigger.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/form/date-trigger.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/form/exclamation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/form/exclamation.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/form/radio.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/form/radio.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/form/search-trigger-medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/form/search-trigger-medium.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/form/search-trigger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/form/search-trigger.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/form/spinner-small.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/form/spinner-small.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/form/spinner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/form/spinner.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/form/text-bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/form/text-bg.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/form/trigger-medium.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/form/trigger-medium.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/form/trigger.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/form/trigger.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/arrow-left-white.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/arrow-left-white.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/arrow-right-white.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/arrow-right-white.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/checked.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/checked.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/col-move-bottom.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/col-move-bottom.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/col-move-top.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/col-move-top.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/dd-insert-arrow-left.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/dd-insert-arrow-left.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/dd-insert-arrow-left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/dd-insert-arrow-left.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/dd-insert-arrow-right.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/dd-insert-arrow-right.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/dd-insert-arrow-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/dd-insert-arrow-right.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/dirty.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/dirty.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/done.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/done.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/drop-no.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/drop-no.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/drop-yes.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/drop-yes.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/grid-loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/grid-loading.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/grid3-hd-btn.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/grid3-hd-btn.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/group-by.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/group-by.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/group-collapse.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/group-collapse.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/group-expand-sprite.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/group-expand-sprite.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/group-expand.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/group-expand.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/hd-pop.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/hd-pop.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/hmenu-asc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/hmenu-asc.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/hmenu-asc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/hmenu-asc.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/hmenu-desc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/hmenu-desc.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/hmenu-desc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/hmenu-desc.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/hmenu-lock.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/hmenu-lock.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/hmenu-lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/hmenu-lock.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/hmenu-unlock.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/hmenu-unlock.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/hmenu-unlock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/hmenu-unlock.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/invalid_line.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/invalid_line.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/loading.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/nowait.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/nowait.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/page-first-disabled.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/page-first-disabled.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/page-first.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/page-first.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/page-last-disabled.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/page-last-disabled.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/page-last.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/page-last.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/page-next-disabled.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/page-next-disabled.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/page-next.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/page-next.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/page-prev-disabled.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/page-prev-disabled.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/page-prev.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/page-prev.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/pagingbar-sprite-medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/pagingbar-sprite-medium.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/pagingbar-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/pagingbar-sprite.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/pick-button.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/pick-button.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/refresh-disabled.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/refresh-disabled.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/refresh-disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/refresh-disabled.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/refresh.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/refresh.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/refresh.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/row-check-sprite.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/row-check-sprite.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/row-expand-sprite.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/row-expand-sprite.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/sort_asc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/sort_asc.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/sort_desc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/sort_desc.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/unchecked.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/unchecked.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/wait.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/grid/wait.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/layout/mini-bottom.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/layout/mini-bottom.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/layout/mini-left.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/layout/mini-left.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/layout/mini-right.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/layout/mini-right.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/layout/mini-top.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/layout/mini-top.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/menu/checked.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/menu/checked.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/menu/group-checked.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/menu/group-checked.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/menu/item-over-disabled.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/menu/item-over-disabled.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/menu/item-over.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/menu/item-over.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/menu/menu-item-active-bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/menu/menu-item-active-bg.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/menu/menu-item-active-corners.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/menu/menu-item-active-corners.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/menu/menu-item-active-sides.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/menu/menu-item-active-sides.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/menu/menu-parent.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/menu/menu-parent.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/menu/menu.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/menu/menu.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/menu/unchecked.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/menu/unchecked.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/panel/panel-default-framed-corners.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/panel/panel-default-framed-corners.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/panel/panel-default-framed-sides.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/panel/panel-default-framed-sides.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/progress/progress-default-bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/progress/progress-default-bg.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/button/s-arrow.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/button/s-arrow.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/button/s-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/button/s-arrow.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/editor/tb-sprite-medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/editor/tb-sprite-medium.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/editor/tb-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/editor/tb-sprite.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/form/clear-trigger-medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/form/clear-trigger-medium.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/form/clear-trigger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/form/clear-trigger.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/form/date-trigger-medium.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/form/date-trigger-medium.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/form/date-trigger.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/form/date-trigger.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/form/search-trigger-medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/form/search-trigger-medium.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/form/search-trigger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/form/search-trigger.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/form/spinner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/form/spinner.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/form/trigger-medium.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/form/trigger-medium.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/form/trigger.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/form/trigger.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/grid/pagingbar-sprite-medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/grid/pagingbar-sprite-medium.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/grid/pagingbar-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/grid/pagingbar-sprite.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/menu/menu-parent.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/menu/menu-parent.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/tree/all-elbows-large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/tree/all-elbows-large.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/tree/all-elbows-medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/tree/all-elbows-medium.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/tree/all-elbows-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/rtl/tree/all-elbows-small.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/shared/blue-loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/shared/blue-loading.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/shared/calendar.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/shared/calendar.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/shared/icon-error.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/shared/icon-error.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/shared/icon-info.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/shared/icon-info.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/shared/icon-question.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/shared/icon-question.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/shared/icon-warning.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/shared/icon-warning.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/shared/large-loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/shared/large-loading.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/shared/left-btn.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/shared/left-btn.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/shared/loading-balls.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/shared/loading-balls.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/shared/right-btn.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/shared/right-btn.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/shared/right-btn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/shared/right-btn.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/shared/shadow-c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/shared/shadow-c.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/shared/shadow-lr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/shared/shadow-lr.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/shared/shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/shared/shadow.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/shared/tool-sprites.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/shared/tool-sprites.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/shared/warning.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/shared/warning.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/sizer/e-handle-dark.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/sizer/e-handle-dark.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/sizer/e-handle.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/sizer/e-handle.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/sizer/ne-handle-dark.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/sizer/ne-handle-dark.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/sizer/ne-handle.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/sizer/ne-handle.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/sizer/nw-handle-dark.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/sizer/nw-handle-dark.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/sizer/nw-handle.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/sizer/nw-handle.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/sizer/s-handle-dark.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/sizer/s-handle-dark.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/sizer/s-handle.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/sizer/s-handle.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/sizer/se-handle-dark.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/sizer/se-handle-dark.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/sizer/se-handle.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/sizer/se-handle.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/sizer/square.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/sizer/square.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/sizer/sw-handle-dark.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/sizer/sw-handle-dark.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/sizer/sw-handle.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/sizer/sw-handle.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/slider/slider-bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/slider/slider-bg.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/slider/slider-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/slider/slider-bg.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/slider/slider-thumb.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/slider/slider-thumb.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/slider/slider-thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/slider/slider-thumb.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/slider/slider-v-bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/slider/slider-v-bg.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/slider/slider-v-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/slider/slider-v-bg.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/slider/slider-v-thumb.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/slider/slider-v-thumb.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/slider/slider-v-thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/slider/slider-v-thumb.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tab-bar/scroll-left.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tab-bar/scroll-left.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tab-bar/scroll-right.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tab-bar/scroll-right.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tab/tab-white-close.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tab/tab-white-close.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tip/tip-corners.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tip/tip-corners.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tip/tip-sides.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tip/tip-sides.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/toolbar/more.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/toolbar/more.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/toolbar/scroll-left.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/toolbar/scroll-left.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/toolbar/scroll-right.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/toolbar/scroll-right.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tools/tool-sprite-tpl.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tools/tool-sprite-tpl.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tools/tool-sprites.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tools/tool-sprites.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tools/tool-sprites.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tools/tool-sprites.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tools/tools-sprites-trans.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tools/tools-sprites-trans.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/Untitled-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/Untitled-1.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/all-elbows-large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/all-elbows-large.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/all-elbows-medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/all-elbows-medium.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/all-elbows-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/all-elbows-small.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/arrows-large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/arrows-large.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/arrows-medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/arrows-medium.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/arrows-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/arrows-small.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/arrows.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/arrows.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/drop-above.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/drop-above.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/drop-add.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/drop-add.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/drop-append.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/drop-append.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/drop-below.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/drop-below.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/drop-between.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/drop-between.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/drop-no.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/drop-no.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/drop-over.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/drop-over.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/drop-under.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/drop-under.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/drop-yes.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/drop-yes.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-end-large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-end-large.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-end-medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-end-medium.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-end-minus-large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-end-minus-large.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-end-minus-medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-end-minus-medium.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-end-minus-nl.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-end-minus-nl.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-end-minus.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-end-minus.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-end-plus-large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-end-plus-large.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-end-plus-medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-end-plus-medium.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-end-plus-nl.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-end-plus-nl.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-end-plus.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-end-plus.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-end.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-end.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-large.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-line-large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-line-large.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-line-medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-line-medium.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-line.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-line.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-medium.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-minus-large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-minus-large.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-minus-medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-minus-medium.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-minus-nl.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-minus-nl.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-minus.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-minus.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-plus-nl.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-plus-nl.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-plus.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow-plus.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/elbow.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/folder-open.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/folder-open.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/folder-open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/folder-open.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/folder.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/folder.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/folder.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/icons-large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/icons-large.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/icons-medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/icons-medium.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/icons-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/icons-small.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/icons.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/leaf.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/leaf.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/leaf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/leaf.png -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/loading.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/s.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/tree/s.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/util/splitter/mini-bottom.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/util/splitter/mini-bottom.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/util/splitter/mini-left.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/util/splitter/mini-left.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/util/splitter/mini-right.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/util/splitter/mini-right.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/util/splitter/mini-top.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/util/splitter/mini-top.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/window/icon-error.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/window/icon-error.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/window/icon-info.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/window/icon-info.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/window/icon-question.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/window/icon-question.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/window/icon-warning.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/ext-theme/Azzurra/themes/images/azzurra/window/icon-warning.gif -------------------------------------------------------------------------------- /lib/webui/public/libs/icomoon/sprites.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/icomoon/sprites.png -------------------------------------------------------------------------------- /lib/webui/public/libs/jsoneditor/img/jsoneditor-icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/jsoneditor/img/jsoneditor-icons.png -------------------------------------------------------------------------------- /lib/webui/public/libs/jsoneditor/lib/ace/theme-jsoneditor.js: -------------------------------------------------------------------------------- 1 | /* ***** BEGIN LICENSE BLOCK ***** 2 | * Distributed under the BSD license: 3 | * 4 | * Copyright (c) 2010, Ajax.org B.V. 5 | * All rights reserved. 6 | * 7 | * Redistribution and use in source and binary forms, with or without 8 | * modification, are permitted provided that the following conditions are met: 9 | * * Redistributions of source code must retain the above copyright 10 | * notice, this list of conditions and the following disclaimer. 11 | * * Redistributions in binary form must reproduce the above copyright 12 | * notice, this list of conditions and the following disclaimer in the 13 | * documentation and/or other materials provided with the distribution. 14 | * * Neither the name of Ajax.org B.V. nor the 15 | * names of its contributors may be used to endorse or promote products 16 | * derived from this software without specific prior written permission. 17 | * 18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 19 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY 22 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 27 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | * 29 | * ***** END LICENSE BLOCK ***** */ 30 | 31 | define('ace/theme/jsoneditor', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { 32 | 33 | exports.isDark = false; 34 | exports.cssClass = "ace-jsoneditor"; 35 | exports.cssText = ".ace-jsoneditor .ace_gutter {\ 36 | background: #ebebeb;\ 37 | color: #333\ 38 | }\ 39 | \ 40 | .ace-jsoneditor.ace_editor {\ 41 | font-family: droid sans mono, monospace, courier new, courier, sans-serif;\ 42 | line-height: 1.3;\ 43 | }\ 44 | .ace-jsoneditor .ace_print-margin {\ 45 | width: 1px;\ 46 | background: #e8e8e8\ 47 | }\ 48 | .ace-jsoneditor .ace_scroller {\ 49 | background-color: #FFFFFF\ 50 | }\ 51 | .ace-jsoneditor .ace_text-layer {\ 52 | color: gray\ 53 | }\ 54 | .ace-jsoneditor .ace_variable {\ 55 | color: #1a1a1a\ 56 | }\ 57 | .ace-jsoneditor .ace_cursor {\ 58 | border-left: 2px solid #000000\ 59 | }\ 60 | .ace-jsoneditor .ace_overwrite-cursors .ace_cursor {\ 61 | border-left: 0px;\ 62 | border-bottom: 1px solid #000000\ 63 | }\ 64 | .ace-jsoneditor .ace_marker-layer .ace_selection {\ 65 | background: #D5DDF6\ 66 | }\ 67 | .ace-jsoneditor.ace_multiselect .ace_selection.ace_start {\ 68 | box-shadow: 0 0 3px 0px #FFFFFF;\ 69 | border-radius: 2px\ 70 | }\ 71 | .ace-jsoneditor .ace_marker-layer .ace_step {\ 72 | background: rgb(255, 255, 0)\ 73 | }\ 74 | .ace-jsoneditor .ace_marker-layer .ace_bracket {\ 75 | margin: -1px 0 0 -1px;\ 76 | border: 1px solid #BFBFBF\ 77 | }\ 78 | .ace-jsoneditor .ace_marker-layer .ace_active-line {\ 79 | background: #FFFBD1\ 80 | }\ 81 | .ace-jsoneditor .ace_gutter-active-line {\ 82 | background-color : #dcdcdc\ 83 | }\ 84 | .ace-jsoneditor .ace_marker-layer .ace_selected-word {\ 85 | border: 1px solid #D5DDF6\ 86 | }\ 87 | .ace-jsoneditor .ace_invisible {\ 88 | color: #BFBFBF\ 89 | }\ 90 | .ace-jsoneditor .ace_keyword,\ 91 | .ace-jsoneditor .ace_meta,\ 92 | .ace-jsoneditor .ace_support.ace_constant.ace_property-value {\ 93 | color: #AF956F\ 94 | }\ 95 | .ace-jsoneditor .ace_keyword.ace_operator {\ 96 | color: #484848\ 97 | }\ 98 | .ace-jsoneditor .ace_keyword.ace_other.ace_unit {\ 99 | color: #96DC5F\ 100 | }\ 101 | .ace-jsoneditor .ace_constant.ace_language {\ 102 | color: darkorange\ 103 | }\ 104 | .ace-jsoneditor .ace_constant.ace_numeric {\ 105 | color: red\ 106 | }\ 107 | .ace-jsoneditor .ace_constant.ace_character.ace_entity {\ 108 | color: #BF78CC\ 109 | }\ 110 | .ace-jsoneditor .ace_invalid {\ 111 | color: #FFFFFF;\ 112 | background-color: #FF002A;\ 113 | }\ 114 | .ace-jsoneditor .ace_fold {\ 115 | background-color: #AF956F;\ 116 | border-color: #000000\ 117 | }\ 118 | .ace-jsoneditor .ace_storage,\ 119 | .ace-jsoneditor .ace_support.ace_class,\ 120 | .ace-jsoneditor .ace_support.ace_function,\ 121 | .ace-jsoneditor .ace_support.ace_other,\ 122 | .ace-jsoneditor .ace_support.ace_type {\ 123 | color: #C52727\ 124 | }\ 125 | .ace-jsoneditor .ace_string {\ 126 | color: green\ 127 | }\ 128 | .ace-jsoneditor .ace_comment {\ 129 | color: #BCC8BA\ 130 | }\ 131 | .ace-jsoneditor .ace_entity.ace_name.ace_tag,\ 132 | .ace-jsoneditor .ace_entity.ace_other.ace_attribute-name {\ 133 | color: #606060\ 134 | }\ 135 | .ace-jsoneditor .ace_markup.ace_underline {\ 136 | text-decoration: underline\ 137 | }\ 138 | .ace-jsoneditor .ace_indent-guide {\ 139 | background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y\ 140 | }"; 141 | 142 | var dom = require("../lib/dom"); 143 | dom.importCssString(exports.cssText, exports.cssClass); 144 | }); 145 | -------------------------------------------------------------------------------- /lib/webui/public/libs/jsoneditor/lib/ace/theme-textmate.js: -------------------------------------------------------------------------------- 1 | /* ***** BEGIN LICENSE BLOCK ***** 2 | * Distributed under the BSD license: 3 | * 4 | * Copyright (c) 2010, Ajax.org B.V. 5 | * All rights reserved. 6 | * 7 | * Redistribution and use in source and binary forms, with or without 8 | * modification, are permitted provided that the following conditions are met: 9 | * * Redistributions of source code must retain the above copyright 10 | * notice, this list of conditions and the following disclaimer. 11 | * * Redistributions in binary form must reproduce the above copyright 12 | * notice, this list of conditions and the following disclaimer in the 13 | * documentation and/or other materials provided with the distribution. 14 | * * Neither the name of Ajax.org B.V. nor the 15 | * names of its contributors may be used to endorse or promote products 16 | * derived from this software without specific prior written permission. 17 | * 18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 19 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY 22 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 27 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | * 29 | * ***** END LICENSE BLOCK ***** */ 30 | 31 | define('ace/theme/textmate', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { 32 | 33 | 34 | exports.isDark = false; 35 | exports.cssClass = "ace-tm"; 36 | exports.cssText = ".ace-tm .ace_gutter {\ 37 | background: #f0f0f0;\ 38 | color: #333;\ 39 | }\ 40 | .ace-tm .ace_print-margin {\ 41 | width: 1px;\ 42 | background: #e8e8e8;\ 43 | }\ 44 | .ace-tm .ace_fold {\ 45 | background-color: #6B72E6;\ 46 | }\ 47 | .ace-tm .ace_scroller {\ 48 | background-color: #FFFFFF;\ 49 | }\ 50 | .ace-tm .ace_cursor {\ 51 | border-left: 2px solid black;\ 52 | }\ 53 | .ace-tm .ace_overwrite-cursors .ace_cursor {\ 54 | border-left: 0px;\ 55 | border-bottom: 1px solid black;\ 56 | }\ 57 | .ace-tm .ace_invisible {\ 58 | color: rgb(191, 191, 191);\ 59 | }\ 60 | .ace-tm .ace_storage,\ 61 | .ace-tm .ace_keyword {\ 62 | color: blue;\ 63 | }\ 64 | .ace-tm .ace_constant {\ 65 | color: rgb(197, 6, 11);\ 66 | }\ 67 | .ace-tm .ace_constant.ace_buildin {\ 68 | color: rgb(88, 72, 246);\ 69 | }\ 70 | .ace-tm .ace_constant.ace_language {\ 71 | color: rgb(88, 92, 246);\ 72 | }\ 73 | .ace-tm .ace_constant.ace_library {\ 74 | color: rgb(6, 150, 14);\ 75 | }\ 76 | .ace-tm .ace_invalid {\ 77 | background-color: rgba(255, 0, 0, 0.1);\ 78 | color: red;\ 79 | }\ 80 | .ace-tm .ace_support.ace_function {\ 81 | color: rgb(60, 76, 114);\ 82 | }\ 83 | .ace-tm .ace_support.ace_constant {\ 84 | color: rgb(6, 150, 14);\ 85 | }\ 86 | .ace-tm .ace_support.ace_type,\ 87 | .ace-tm .ace_support.ace_class {\ 88 | color: rgb(109, 121, 222);\ 89 | }\ 90 | .ace-tm .ace_keyword.ace_operator {\ 91 | color: rgb(104, 118, 135);\ 92 | }\ 93 | .ace-tm .ace_string {\ 94 | color: rgb(3, 106, 7);\ 95 | }\ 96 | .ace-tm .ace_comment {\ 97 | color: rgb(76, 136, 107);\ 98 | }\ 99 | .ace-tm .ace_comment.ace_doc {\ 100 | color: rgb(0, 102, 255);\ 101 | }\ 102 | .ace-tm .ace_comment.ace_doc.ace_tag {\ 103 | color: rgb(128, 159, 191);\ 104 | }\ 105 | .ace-tm .ace_constant.ace_numeric {\ 106 | color: rgb(0, 0, 205);\ 107 | }\ 108 | .ace-tm .ace_variable {\ 109 | color: rgb(49, 132, 149);\ 110 | }\ 111 | .ace-tm .ace_xml-pe {\ 112 | color: rgb(104, 104, 91);\ 113 | }\ 114 | .ace-tm .ace_entity.ace_name.ace_function {\ 115 | color: #0000A2;\ 116 | }\ 117 | .ace-tm .ace_markup.ace_heading {\ 118 | color: rgb(12, 7, 255);\ 119 | }\ 120 | .ace-tm .ace_markup.ace_list {\ 121 | color:rgb(185, 6, 144);\ 122 | }\ 123 | .ace-tm .ace_meta.ace_tag {\ 124 | color:rgb(0, 22, 142);\ 125 | }\ 126 | .ace-tm .ace_string.ace_regex {\ 127 | color: rgb(255, 0, 0)\ 128 | }\ 129 | .ace-tm .ace_marker-layer .ace_selection {\ 130 | background: rgb(181, 213, 255);\ 131 | }\ 132 | .ace-tm.ace_multiselect .ace_selection.ace_start {\ 133 | box-shadow: 0 0 3px 0px white;\ 134 | border-radius: 2px;\ 135 | }\ 136 | .ace-tm .ace_marker-layer .ace_step {\ 137 | background: rgb(252, 255, 0);\ 138 | }\ 139 | .ace-tm .ace_marker-layer .ace_stack {\ 140 | background: rgb(164, 229, 101);\ 141 | }\ 142 | .ace-tm .ace_marker-layer .ace_bracket {\ 143 | margin: -1px 0 0 -1px;\ 144 | border: 1px solid rgb(192, 192, 192);\ 145 | }\ 146 | .ace-tm .ace_marker-layer .ace_active-line {\ 147 | background: rgba(0, 0, 0, 0.07);\ 148 | }\ 149 | .ace-tm .ace_gutter-active-line {\ 150 | background-color : #dcdcdc;\ 151 | }\ 152 | .ace-tm .ace_marker-layer .ace_selected-word {\ 153 | background: rgb(250, 250, 255);\ 154 | border: 1px solid rgb(200, 200, 250);\ 155 | }\ 156 | .ace-tm .ace_indent-guide {\ 157 | background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\ 158 | }\ 159 | "; 160 | 161 | var dom = require("../lib/dom"); 162 | dom.importCssString(exports.cssText, exports.cssClass); 163 | }); 164 | -------------------------------------------------------------------------------- /lib/webui/public/libs/jsoneditor/lib/jsonlint/README.md: -------------------------------------------------------------------------------- 1 | JSON Lint 2 | ========= 3 | 4 | A pure [JavaScript version](http://zaach.github.com/jsonlint/) of the service provided at [jsonlint.com](http://jsonlint.com). 5 | 6 | ## Command line interface 7 | Install jsonlint with npm to use the command line interface: 8 | 9 | npm install jsonlint -g 10 | 11 | Validate a file like so: 12 | 13 | jsonlint myfile.json 14 | 15 | or pipe input into stdin: 16 | 17 | cat myfile.json | jsonlint 18 | 19 | jsonlint will either report a syntax error with details or pretty print the source if it is valid. 20 | 21 | ### Options 22 | 23 | $ jsonlint -h 24 | 25 | usage: jsonlint [options] 26 | 27 | file file to parse; otherwise uses stdin 28 | 29 | options: 30 | -v, --version print version and exit 31 | -s, --sort-keys sort object keys 32 | -i, --in-place overwrite the file 33 | -t CHAR, --indent CHAR character(s) to use for indentation 34 | -c, --compact compact error display 35 | -V, --validate a JSON schema to use for validation 36 | -e, --environment which specification of JSON Schema the validation file uses 37 | 38 | 39 | ## Module interface 40 | 41 | I'm not sure why you wouldn't use the built in `JSON.parse` but you can use jsonlint from a CommonJS module: 42 | 43 | var jsonlint = require("jsonlint"); 44 | 45 | jsonlint.parse('{"creative?": false}'); 46 | 47 | It returns the parsed object or throws an `Error`. 48 | 49 | ## Vim Plugins 50 | 51 | * [Syntastic](http://www.vim.org/scripts/script.php?script_id=2736) 52 | * [sourcebeautify](http://www.vim.org/scripts/script.php?script_id=4079) 53 | 54 | ## MIT License 55 | 56 | Copyright (C) 2012 Zachary Carter 57 | 58 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 59 | 60 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 61 | 62 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /lib/webui/public/libs/pac/livepool.pac: -------------------------------------------------------------------------------- 1 | function FindProxyForURL(url, host) { 2 | if(shExpMatch(host,"127.0.0.1") || shExpMatch(host,"localhost")) { 3 | return "DIRECT"; 4 | } 5 | else 6 | return "PROXY 127.0.0.1:8090"; 7 | } 8 | } -------------------------------------------------------------------------------- /lib/webui/public/libs/zeroclipboard/ZeroClipboard.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/lib/webui/public/libs/zeroclipboard/ZeroClipboard.swf -------------------------------------------------------------------------------- /lib/webui/readme.md: -------------------------------------------------------------------------------- 1 | ### liveapp is web gui for livepool 2 | 3 | bug to fix: liveapp must not be visited through livepool proxy port(8000), must visit directly. -------------------------------------------------------------------------------- /lib/webui/routes/other.js: -------------------------------------------------------------------------------- 1 | 2 | exports.other = function(){ 3 | 4 | } -------------------------------------------------------------------------------- /livepool.js: -------------------------------------------------------------------------------- 1 | exports = require('./lib/core'); 2 | -------------------------------------------------------------------------------- /node-webkit.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Starting LivePool... 7 | 8 | 9 | 10 |
Starting LivePool...
11 | 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /node-webkit.js: -------------------------------------------------------------------------------- 1 | var proxy = require('./lib/livepool/proxy'); 2 | var exec = require('child_process').exec, 3 | child; 4 | 5 | // background process 6 | child = exec('node livepool.js', { 7 | maxBuffer: 20000 * 1024, 8 | }, 9 | function(error, stdout, stderr) { 10 | console.log('stdout: ' + stdout); 11 | console.log('stderr: ' + stderr); 12 | if (error !== null) { 13 | console.log('exec error: ' + error); 14 | } 15 | }); 16 | 17 | // kill child when exit 18 | process.on('exit', function() { 19 | child.kill('SIGHUP'); 20 | }); 21 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "livepool", 3 | "version": "0.7.2", 4 | "description": "debugging proxy for web developers base on NodeJS", 5 | "keywords": ["proxy", "debug", "web", "develop", "reload", "fiddler"], 6 | "maintainers": [{ 7 | "name": "rehornchen@tencent.com", 8 | "web": "https://github.com/rehorn" 9 | }], 10 | "homepage": "https://github.com/rehorn/livepool", 11 | "dependencies": { 12 | "colors": "*", 13 | "mime": "*", 14 | "rimraf": "*", 15 | "underscore": "*", 16 | "iconv-lite": "*", 17 | "express.io": "*", 18 | "http-proxy": "*", 19 | "graceful-fs": "*", 20 | "request": "*", 21 | "http-proxy-agent": "*" 22 | }, 23 | "repository": { 24 | "type": "git", 25 | "url": "https://github.com/rehorn/livepool.git" 26 | }, 27 | "engines": { 28 | "node": ">= 0.8.x" 29 | }, 30 | "bugs": { 31 | "url": "https://github.com/rehorn/livepool/issues" 32 | }, 33 | "bin": { 34 | "livepool": "./bin/livepool.js" 35 | }, 36 | "preferGlobal": true, 37 | "main": "node-webkit.html", 38 | "webkit": { 39 | "plugin": true 40 | }, 41 | "window": { 42 | "title": "livepool ui", 43 | "toolbar": false, 44 | "frame": true, 45 | "width": 960, 46 | "height": 600, 47 | "min_width": 400, 48 | "min_height": 200 49 | }, 50 | "node-main": "./node-webkit.js" 51 | } 52 | -------------------------------------------------------------------------------- /rules/readme.md: -------------------------------------------------------------------------------- 1 | url pattern 2 | http://support.google.com/customsearch/bin/answer.py?hl=en&answer=71826 -------------------------------------------------------------------------------- /rules/settings.js: -------------------------------------------------------------------------------- 1 | module.exports={ 2 | "keep": false, 3 | "proxy": false, 4 | "disablePool": false, 5 | "disableCache": false, 6 | "autoScroll": false, 7 | "speedLimit": "Disabled", 8 | "showSession": "200", 9 | "layout": "Wide", 10 | "tabSetting": "Pool,Inspectors,Composer,Filter,Log", 11 | "sessionColumns": "Protocol,Method,Host,Path,Caching,ContentType,Body,Time", 12 | "platform": "darwin" 13 | } -------------------------------------------------------------------------------- /settings.js: -------------------------------------------------------------------------------- 1 | var path = require('path'); 2 | module.exports = { 3 | http: 8090, 4 | https: 8001, 5 | uiport: 8002, 6 | index: 'index.html', 7 | tempDir: path.join(process.cwd(), 'tmp/http/'), 8 | siteDir: path.join(process.cwd(), 'tmp/sites/'), 9 | // proxy: 'http://proxy.tencent.com:8080' 10 | }; 11 | -------------------------------------------------------------------------------- /test.js: -------------------------------------------------------------------------------- 1 | { 2 | "name": "project1", 3 | "type": "proj", 4 | "match": "/Users/rehorn/Documents/Code/node/livepool/test/examples/", 5 | "id": 1, 6 | "checked": true, 7 | "handler": [{ 8 | "match": "find.qq.com/index.html", 9 | "action": "./__index.html", 10 | "leaf": true, 11 | "id": 3, 12 | "checked": true 13 | }, { 14 | "match": "find.qq.com/js/find.all.js", 15 | "action": "./tools/find.all.qzmin", 16 | "leaf": true, 17 | "id": 4, 18 | "checked": true 19 | }, { 20 | "match": "find.qq.com/js/find.combo.js", 21 | "action": "./js/jquery.js|./js/main.js", 22 | "leaf": true, 23 | "id": 5, 24 | "checked": true 25 | }, { 26 | "match": "find.qq.com/css/comp.css", 27 | "action": "./css/main.css|./css/sub1.css", 28 | "leaf": true, 29 | "id": 6, 30 | "checked": true 31 | }, { 32 | "match": "find.qq.com/js/catalog.js", 33 | "action": "http://pub.idqqimg.com/qqfind/js/groupcatalog.js", 34 | "leaf": true, 35 | "id": 7, 36 | "checked": true 37 | }, { 38 | "match": "find.qq.com/|*.idqqimg.com/qqfind/", 39 | "action": "./", 40 | "leaf": true, 41 | "id": 8, 42 | "checked": true 43 | }], 44 | "router": [{ 45 | "match": "find.qq.com/cgi-bin/|cgi.find.qq.com", 46 | "action": "-", 47 | "leaf": true, 48 | "id": 13, 49 | "checked": true 50 | }, { 51 | "match": "find.qq.com|idqqimg.com/qqfind/", 52 | "action": "172.23.136.84", 53 | "leaf": true, 54 | "id": 14, 55 | "checked": true 56 | }] 57 | } 58 | -------------------------------------------------------------------------------- /test/examples/__index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | LivePool Test Project 7 | 8 | 9 | 10 | 11 |

__index

12 |

__index

13 |

__index

14 |

This is a LivePool Test Project

15 |

This is a LivePool Test Project

16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /test/examples/cgi-bin/readme: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/test/examples/cgi-bin/readme -------------------------------------------------------------------------------- /test/examples/css/comp.css: -------------------------------------------------------------------------------- 1 | #test{ 2 | color: red; 3 | } 4 | #test2{ 5 | color: yellow; 6 | } 7 | 8 | #test3{ 9 | color: red; 10 | } 11 | #test{ 12 | color: red; 13 | } -------------------------------------------------------------------------------- /test/examples/css/main.css: -------------------------------------------------------------------------------- 1 | #test{ 2 | color: red; 3 | } 4 | #test2{ 5 | color: yellow; 6 | } 7 | 8 | #test3{ 9 | color: red; 10 | } -------------------------------------------------------------------------------- /test/examples/css/readme: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/test/examples/css/readme -------------------------------------------------------------------------------- /test/examples/css/sub1.css: -------------------------------------------------------------------------------- 1 | #test{ 2 | color: red; 3 | } -------------------------------------------------------------------------------- /test/examples/css/sub2.css: -------------------------------------------------------------------------------- 1 | #test2{ 2 | color: yellow; 3 | } 4 | 5 | #test3{ 6 | color: red; 7 | } -------------------------------------------------------------------------------- /test/examples/img/module/qq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/test/examples/img/module/qq.png -------------------------------------------------------------------------------- /test/examples/img/qq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/test/examples/img/qq.png -------------------------------------------------------------------------------- /test/examples/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | LivePool Test Project 6 | 7 | 8 |

This is a LivePool Test Project

9 |

This is a LivePool Test Project

10 |

This is a LivePool Test Project

11 |

This is a LivePool Test Project

12 |

This is a LivePool Test Project

13 | 14 | -------------------------------------------------------------------------------- /test/examples/js/delay.js: -------------------------------------------------------------------------------- 1 | function() { 2 | // delay test 3 | return true; 4 | } 5 | -------------------------------------------------------------------------------- /test/examples/js/find.all.js: -------------------------------------------------------------------------------- 1 | function(){ 2 | return true; 3 | } 4 | function(){ 5 | // updated 2 6 | return true; 7 | } 8 | function(){ 9 | return true; 10 | } -------------------------------------------------------------------------------- /test/examples/js/find.combo.js: -------------------------------------------------------------------------------- 1 | function(){ 2 | return true; 3 | } 4 | function(){ 5 | // updated 2 6 | return true; 7 | } -------------------------------------------------------------------------------- /test/examples/js/jquery.js: -------------------------------------------------------------------------------- 1 | function(){ 2 | return true; 3 | } -------------------------------------------------------------------------------- /test/examples/js/main.js: -------------------------------------------------------------------------------- 1 | function(){ 2 | // updated 2 3 | return true; 4 | } -------------------------------------------------------------------------------- /test/examples/js/readme: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/test/examples/js/readme -------------------------------------------------------------------------------- /test/examples/js/sub.js: -------------------------------------------------------------------------------- 1 | function(){ 2 | return true; 3 | } -------------------------------------------------------------------------------- /test/examples/static/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | LivePool Test Project 6 | 7 | 8 |

Static / Index

9 |

This is a LivePool Test Project

10 |

This is a LivePool Test Project

11 |

This is a LivePool Test Project

12 |

This is a LivePool Test Project

13 | 14 | -------------------------------------------------------------------------------- /test/examples/static/site/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | LivePool Test Project 6 | 7 | 8 |

Static / Site / Index

9 |

This is a LivePool Test Project

10 |

This is a LivePool Test Project

11 |

This is a LivePool Test Project

12 |

This is a LivePool Test Project

13 | 14 | -------------------------------------------------------------------------------- /test/examples/tools/find.all.js: -------------------------------------------------------------------------------- 1 | function(){ 2 | return true; 3 | } 4 | function(){ 5 | // updated 2 6 | return true; 7 | } 8 | function(){ 9 | return true; 10 | } -------------------------------------------------------------------------------- /test/examples/tools/find.all.qzmin: -------------------------------------------------------------------------------- 1 | { 2 | projects: [ 3 | { 4 | name: "Jx Custom Version for Q+ Explorer", 5 | target: "./find.all.js", 6 | include: [ 7 | '../js/jquery.js', 8 | '../js/main.js', 9 | '../js/sub.js' 10 | ] 11 | } 12 | ], 13 | level: 0, 14 | shrink: false, 15 | encode: "utf-8", 16 | comment: "Q+ Group 2010" 17 | } -------------------------------------------------------------------------------- /test/screenshot/shot1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/materliu/livepool/41051157af0a38472a112ba94244cafe770f7bd0/test/screenshot/shot1.png --------------------------------------------------------------------------------