├── .npmignore
├── .gitignore
├── src
├── ng-module.js
├── css
│ ├── ui-notice.css
│ ├── ui-popup.css
│ ├── ui-bubble.css
│ └── ui-dialog.css
├── directives
│ ├── popup.js
│ ├── notice.js
│ ├── bubble.js
│ ├── dialog.js
│ └── directives.js
├── popups-nocss.js
├── popups.js
├── services
│ └── popup.js
└── lib
│ └── popup.js
├── .jshintrc
├── example
├── css
│ └── show-source-code.css
├── bubble.html
├── notice.html
├── notice-modal.html
├── js
│ └── show-source-code.js
├── dialog-ng-if.html
├── dialog-modal.html
├── dialog-ng-hide.html
├── dialog-ng-show.html
├── dialog-duration.html
├── dialog-close-action.html
├── bubble-close.html
├── dialog-fixed.html
├── dialog-dialog-statusbar.html
├── dialog-dialog-title.html
├── popup.html
├── dialog-close.html
├── dialog-dialog-buttons.html
├── services.html
├── popup-contextmenu.html
├── bubble-for-align.html
├── index.html
├── dialog-for-align.html
└── dialog-for-align-ng-show.html
├── CHANGELOG.md
├── package.json
├── LICENSE
├── webpack.config.js
├── test
└── index.html
├── README.md
└── dist
├── angular-popups-nocss.js
└── angular-popups.js
/.npmignore:
--------------------------------------------------------------------------------
1 | CHANGELOG.md
2 | test
3 | example
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | *.log
--------------------------------------------------------------------------------
/src/ng-module.js:
--------------------------------------------------------------------------------
1 | module.exports = require('angular').module('angular-popups', []);
--------------------------------------------------------------------------------
/.jshintrc:
--------------------------------------------------------------------------------
1 | {
2 | "esnext": false,
3 | "moz": true,
4 | "boss": true,
5 | "node": true,
6 | "validthis": true,
7 | "browser": true,
8 | "globals": {
9 | "describe": true,
10 | "it": true
11 | }
12 | }
--------------------------------------------------------------------------------
/src/css/ui-notice.css:
--------------------------------------------------------------------------------
1 | @import url('./ui-popup.css');
2 | .ui-notice {
3 | padding: 10px;
4 | border: 1px solid rgba(0, 0, 0, 9);
5 | border-radius: 5px;
6 | background: rgba(0, 0, 0, .7);
7 | color: #FFF;
8 | }
--------------------------------------------------------------------------------
/src/directives/popup.js:
--------------------------------------------------------------------------------
1 | /* global require */
2 |
3 | 'use strict';
4 |
5 | var directives = require('./directives');
6 |
7 | directives.createPopup('popup', {
8 | template: '
'
9 | });
--------------------------------------------------------------------------------
/src/popups-nocss.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | require('./directives/popup');
3 | require('./directives/bubble');
4 | require('./directives/dialog');
5 | require('./directives/notice');
6 | require('./services/popup');
7 | module.exports = {};// webpack
--------------------------------------------------------------------------------
/src/directives/notice.js:
--------------------------------------------------------------------------------
1 | /* global require */
2 |
3 | 'use strict';
4 |
5 | var directives = require('./directives');
6 |
7 | directives.createPopup('notice', {
8 | template: ''
12 | });
--------------------------------------------------------------------------------
/src/popups.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | require('./css/ui-popup.css');
4 | require('./css/ui-bubble.css');
5 | require('./css/ui-dialog.css');
6 | require('./css/ui-notice.css');
7 |
8 | require('./directives/popup');
9 | require('./directives/bubble');
10 | require('./directives/dialog');
11 | require('./directives/notice');
12 |
13 | require('./services/popup');
14 | module.exports = {};// webpack
--------------------------------------------------------------------------------
/example/css/show-source-code.css:
--------------------------------------------------------------------------------
1 | html {
2 | height: 100%;
3 | }
4 | body {
5 | height: 300%;
6 | }
7 |
8 | pre.source-code {
9 | display: block;
10 | font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
11 | font-size: 14px;
12 | overflow: auto;
13 | line-height: 1.45;
14 | color: #666;
15 | }
16 | pre.source-code::before {
17 | content: 'Example source code:';
18 | display: block;
19 | margin-bottom: 10px;
20 | color: #CCC;
21 | }
--------------------------------------------------------------------------------
/src/directives/bubble.js:
--------------------------------------------------------------------------------
1 | /* global require */
2 |
3 | 'use strict';
4 |
5 | var directives = require('./directives');
6 |
7 | directives.createPopup('bubble', {
8 | template: '',
13 | link: function(scope, elem, attrs, controller) {
14 | if (!attrs.closeAction) {
15 | controller.closeAction = ['esc', 'timeout', 'outerchick'];
16 | }
17 | }
18 | });
--------------------------------------------------------------------------------
/example/bubble.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | example
7 |
8 |
9 |
10 |
11 |
14 |
15 |
16 |
17 |
18 |
19 | hello world
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/example/notice.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | example
7 |
8 |
9 |
10 |
11 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | hello world
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | ## 0.0.1
2 |
3 | 1. 提供无 CSS 依赖的版本
4 |
5 | ## 0.0.1-beta9
6 |
7 | 1. 修复在 safari 浏览器下使用 service 可能导致页面滚动的问题
8 |
9 | ## 0.0.1-beta8
10 |
11 | 1. 增加 `close-action` 配置
12 |
13 | ## 0.0.1-beta7
14 |
15 | 1. 使用 `focusout` 事件优化关闭 `bubble` 操作,对键盘操作更友好
16 | 2. `ng-if`、`ng-show` 如果传入的是 `$event`,则浮层会定位到事件触发位置
17 |
18 | ## 0.0.1-beta6
19 |
20 | 1. 增加 `notice` 指令
21 | 2. 提供对话框服务
22 |
23 | ## 0.0.1-beta5
24 |
25 | 1. 优化 `dialog` 指令在移动端的布局呈现
26 | 2. 优化 Retina 版 Mac 下 chrome 浏览器的模态浮层样式
27 |
28 | ## 0.0.1-beta4
29 |
30 | 1. 修复使用 `ng-show` 会导致 `for` 定位错误的问题
31 | 2. 修复可能意外关闭其他浮层的问题
32 |
33 | ## 0.0.1-beta3
34 |
35 | 1. 去掉 `jquery` 依赖
36 | 2. 移除 `drag` 指令
37 |
38 | ## 0.0.1-beta2
39 |
40 | 1. 模块名由 `popups` 改成 `angular-popupss`
41 | 2. 修复按按 ESC 关闭浮层,浮层没有恢复焦点的问题
42 | 3. 修复 `align` 无效的问题
43 | 4. 优化 `bubble` 指令样式
--------------------------------------------------------------------------------
/example/notice-modal.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | example
7 |
8 |
9 |
10 |
11 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | hello world
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/example/js/show-source-code.js:
--------------------------------------------------------------------------------
1 |
2 | (function (script) {
3 | script.parentNode.removeChild(script);
4 | var code = document.body.innerHTML;
5 |
6 | var escapeMap = {
7 | "<": "<",
8 | ">": ">",
9 | '"': """,
10 | "'": "'",
11 | "&": "&"
12 | };
13 |
14 |
15 | var escapeFn = function (s) {
16 | return escapeMap[s];
17 | };
18 |
19 | var escapeHTML = function (content) {
20 | return content.replace(/&(?![\w#]+;)|[<>"']/g, escapeFn);
21 | };
22 |
23 | // dialog-title="" >>> dialog-title
24 | code = code.replace(/(\s+[\w-]+)=""/g, '$1').trim();
25 | code = escapeHTML(code);
26 |
27 | document.write('' + code + '<\/code><\/pre>');
28 | })(document.getElementById('show-source-code'));
29 |
30 |
--------------------------------------------------------------------------------
/example/dialog-ng-if.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | example
7 |
8 |
9 |
10 |
11 |
14 |
15 |
16 |
17 |
18 |
19 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/example/dialog-modal.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | example
7 |
8 |
9 |
10 |
11 |
14 |
15 |
16 |
17 |
18 |
19 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/example/dialog-ng-hide.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | example
7 |
8 |
9 |
10 |
11 |
14 |
15 |
16 |
17 |
18 |
19 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/example/dialog-ng-show.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | example
7 |
8 |
9 |
10 |
11 |
14 |
15 |
16 |
17 |
18 |
19 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/src/css/ui-popup.css:
--------------------------------------------------------------------------------
1 |
2 | .ui-popup {
3 | position: absolute;
4 | font-family: Helvetica, arial, sans-serif;
5 | }
6 | .ui-popup:focus {
7 | outline: 0;
8 | }
9 | .ui-popup-show {
10 | display: block;
11 |
12 | }
13 | .ui-popup-modal::before {
14 | content: '';
15 | position: fixed;
16 | left: 0;
17 | right: 0;
18 | top: 0;
19 | bottom: 0;
20 | background: #000;
21 | opacity: .7;
22 | -webkit-transform: scale(3);
23 | transform: scale(3);
24 | -webkit-animation: ui-popup-opacity .15s 1 linear;
25 | animation: ui-popup-opacity .15s 1 linear;
26 |
27 | }
28 | .ui-popup-modal > * {
29 | position: relative;
30 | }
31 |
32 | @-webkit-keyframes ui-popup-opacity {
33 | 0% {opacity: 0;}
34 | 100% {opacity: .7;}
35 | }
36 | @keyframes ui-popup-opacity {
37 | 0% {opacity: 0;}
38 | 100% {opacity: .7;}
39 | }
--------------------------------------------------------------------------------
/example/dialog-duration.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | example
7 |
8 |
9 |
10 |
11 |
14 |
15 |
16 |
17 |
18 |
19 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/example/dialog-close-action.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | example
7 |
8 |
9 |
10 |
11 |
14 |
15 |
16 |
17 |
18 |
19 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/example/bubble-close.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | example
7 |
8 |
9 |
10 |
11 |
14 |
15 |
16 |
17 |
18 |
19 | hello world
20 |
21 |
22 | hello world
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "angular-popups",
3 | "version": "0.0.2",
4 | "readmeFilename": "README.md",
5 | "description": "基于 AngularJS 的浮层组件",
6 | "homepage": "https://github.com/aui/angular-popups",
7 | "keywords": [
8 | "angular",
9 | "dialog",
10 | "popup",
11 | "bubble",
12 | "notice",
13 | "artDialog"
14 | ],
15 | "author": "aui",
16 | "repository": {
17 | "type": "git",
18 | "url": "https://github.com/aui/angular-popups.git"
19 | },
20 | "main": "dist/angular-popups.js",
21 | "scripts": {
22 | "min": "webpack -p",
23 | "test": "open test/index.html"
24 | },
25 | "devDependencies": {
26 | "angular": "^1.4.8",
27 | "css-loader": "^0.23.0",
28 | "extract-text-webpack-plugin": "^0.9.1",
29 | "jshint": "^2.8.0",
30 | "jshint-loader": "^0.8.3",
31 | "style-loader": "^0.13.0",
32 | "webpack": "^1.12.15"
33 | },
34 | "license": "MIT"
35 | }
36 |
--------------------------------------------------------------------------------
/example/dialog-fixed.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | example
7 |
8 |
9 |
10 |
11 |
14 |
15 |
16 |
24 |
25 |
26 |
27 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/example/dialog-dialog-statusbar.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | example
7 |
8 |
9 |
10 |
11 |
14 |
15 |
16 |
17 |
18 |
19 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/example/dialog-dialog-title.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | example
7 |
8 |
9 |
10 |
11 |
14 |
15 |
16 |
17 |
18 |
19 |
23 |
24 |
25 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/example/popup.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | example
7 |
8 |
9 |
10 |
11 |
14 |
15 |
16 |
17 |
18 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 糖饼
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/example/dialog-close.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | example
7 |
8 |
9 |
10 |
11 |
14 |
15 |
16 |
17 |
18 |
19 |
23 |
24 |
25 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/example/dialog-dialog-buttons.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | example
7 |
8 |
9 |
10 |
11 |
14 |
15 |
16 |
17 |
18 |
19 |
24 |
25 |
26 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/webpack.config.js:
--------------------------------------------------------------------------------
1 | var webpack = require('webpack');
2 | var ExtractTextPlugin = require('extract-text-webpack-plugin');
3 | var packageJson = require('./package.json');
4 | var version = packageJson.version;
5 |
6 | module.exports = {
7 | entry: {
8 | 'angular-popups': './src/popups.js',
9 | 'angular-popups-nocss': './src/popups-nocss.js'
10 | },
11 | output: {
12 | path: 'dist',
13 | filename: '[name].js'
14 | },
15 | devtool: 'source-map',
16 | plugins: [
17 | new ExtractTextPlugin('[name].css'),
18 | new webpack.BannerPlugin(packageJson.name + '@' + packageJson.version + ' | ' + packageJson.homepage)
19 | ],
20 | externals: {
21 | angular: 'angular'
22 | },
23 | module: {
24 | preLoaders: [{
25 | test: /\.js$/,
26 | exclude: /node_modules/,
27 | loader: 'jshint-loader'
28 | }],
29 | loaders: [
30 | //{test: /\.css$/, loader: ExtractTextPlugin.extract('style-loader', 'css-loader')}, // 把 CSS 抽离成独立的文件
31 | {
32 | test: /\.css$/,
33 | loader: 'style!css?sourceMap&minimize'
34 | }
35 | ]
36 | },
37 |
38 | jshint: {
39 | camelcase: true,
40 | emitErrors: false,
41 | failOnHint: false,
42 | reporter: function(errors) {}
43 | }
44 | };
--------------------------------------------------------------------------------
/example/services.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | example
7 |
8 |
9 |
10 |
11 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
53 |
54 |
55 |
--------------------------------------------------------------------------------
/example/popup-contextmenu.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | example
7 |
8 |
9 |
10 |
11 |
50 |
51 |
52 |
53 |
54 | 点击右键
55 |
56 |
57 |
58 |
62 |
63 |
64 |
88 |
89 |
90 |
91 |
--------------------------------------------------------------------------------
/test/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | test
8 |
9 |
10 |
11 |
12 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
32 |
33 |
34 |
42 |
43 |
44 |
53 |
54 |
55 |
59 |
60 |
61 |
64 |
65 |
66 |
70 |
71 |
72 |
76 |
77 |
78 |
79 |
80 | {{message}}
81 |
82 |
83 |
84 |
85 | hello
86 |
87 |
88 |
--------------------------------------------------------------------------------
/src/directives/dialog.js:
--------------------------------------------------------------------------------
1 | /* global require */
2 |
3 | 'use strict';
4 |
5 | var angular = require('angular');
6 | var $ = angular.element;
7 | var directives = require('./directives');
8 |
9 |
10 | var dialogTpl =
11 | '' +
12 | '' +
13 | '
' +
14 | '' +
15 | '
';
16 |
17 | var titleTpl = '';
18 | var closeTpl = '';
19 | var contentTpl = '';
20 | var statusbarTpl = '';
21 | var buttonsTpl = '';
22 |
23 | directives.createPopup('dialog', {
24 | template: '',
25 | link: function(scope, elem, attrs, controller) {
26 |
27 | var node = elem[0];
28 | var dialog = createElement(dialogTpl);
29 |
30 | scope.$dialogId = 'ui-dialog' + scope.$id;
31 |
32 | function createElement(html) {
33 | var temp = document.createElement('div');
34 | temp.innerHTML = html;
35 | return temp.firstChild;
36 | }
37 |
38 | var childDirective = function(name) {
39 | var directiveName = 'dialog';
40 | var e = directiveName + '-' + name;
41 | var e2 = directiveName + '\\:' + name;
42 | var a = '[' + e + ']';
43 | var a2 = '[' + e2 + ']';
44 | var c = '.ui-dialog' + '-' + name;
45 |
46 | return node.querySelector([e, e2, a, a2, c].join(','));
47 | };
48 |
49 | var childElem = function(name) {
50 | return dialog.querySelector('.ui-dialog-' + name);
51 | };
52 |
53 | var closeNode = attrs.close ? createElement(closeTpl) : null;
54 | var titleNode = childDirective('title');
55 | var contentNode = childDirective('content');
56 | var statusbarNode = childDirective('statusbar');
57 | var buttonsNode = childDirective('buttons');
58 |
59 |
60 | var headerNode = childElem('header');
61 | var bodyNode = childElem('body');
62 | var footerNode = childElem('footer');
63 |
64 | appendChild(headerNode, closeNode);
65 | appendChild(headerNode, titleNode);
66 | appendChild(bodyNode, contentNode);
67 | appendChild(footerNode, statusbarNode);
68 | appendChild(footerNode, buttonsNode);
69 |
70 |
71 | if (!titleNode) {
72 | $(headerNode).remove();
73 | }
74 |
75 | if (!statusbarNode && !buttonsNode) {
76 | $(footerNode).remove();
77 | }
78 |
79 |
80 | if (closeNode) {
81 | closeNode.addEventListener('click', controller.close, false);
82 | }
83 |
84 |
85 | appendChild(node, dialog);
86 |
87 |
88 | function appendChild(parent, child) {
89 | if (child) {
90 | parent.appendChild(child);
91 | }
92 | }
93 |
94 | }
95 | });
96 |
97 |
98 | childDirective('dialogTitle', {
99 | template: titleTpl
100 | });
101 |
102 | childDirective('dialogContent', {
103 | template: contentTpl
104 | });
105 |
106 | childDirective('dialogStatusbar', {
107 | template: statusbarTpl
108 | });
109 |
110 | childDirective('dialogButtons', {
111 | template: buttonsTpl
112 | });
113 |
114 |
115 | function childDirective(subName, subOptions) {
116 | directives.directive(subName, function() {
117 | return angular.extend({
118 | require: '^dialog',
119 | restrict: 'AE',
120 | transclude: true,
121 | link: function (scope, elem, attrs, controller) {
122 | scope.$dialogId = 'ui-dialog' + scope.$parent.$id;
123 | scope.$close = controller.close;
124 | },
125 | replace: true
126 | }, subOptions);
127 | });
128 | }
--------------------------------------------------------------------------------
/src/services/popup.js:
--------------------------------------------------------------------------------
1 | /* global require */
2 | // TODO Popup.prompt
3 |
4 | 'use strict';
5 |
6 | var angular = require('angular');
7 | var ngModule = require('../ng-module');
8 |
9 | ngModule.provider('Popup', function() {
10 |
11 | var that = this;
12 | var compiled = false;
13 | var noop = function() {};
14 | var defaults = {
15 | title: 'Message',
16 | okValue: 'Ok',
17 | cancelValue: 'Cancel'
18 | };
19 |
20 | var model = {
21 | open: true,
22 | title: null,
23 | content: null,
24 | duration: null,
25 | okValue: null,
26 | cancelValue: null,
27 | ok: null,
28 | cancel: null,
29 | notice: false,
30 | $destroy: noop,
31 | $ok: function() {
32 | if (this.ok && this.ok() !== false) {
33 | this.open = false;
34 | this.$destroy();
35 | }
36 | },
37 | $cancel: function() {
38 | if (this.cancel && this.cancel() !== false) {
39 | this.open = false;
40 | this.$destroy();
41 | }
42 | },
43 | $close: function() {
44 | if (this.cancel) {
45 | this.$cancel();
46 | } else {
47 | this.$ok();
48 | }
49 | }
50 | };
51 |
52 | var sub = {
53 | close: function() {
54 | model.$close();
55 | }
56 | };
57 |
58 | var baseDialogTpl =
59 | '