billy_cms 0.0.17 → 0.0.18
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/views/layouts/billy_cms/backend.html.erb +201 -0
- data/lib/billy_cms/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f987c96e0d13b400d49fa9f5056d5e15d899d940
|
4
|
+
data.tar.gz: a6b1e0b07f002d25b0a1398b3fb40a2a1d587cd5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 310fb4a40b442164c1a895d5d27a5a345a82765a93a6e6478d55e72683254d5b1472c1eb5707507a140497a81b1d77e8340f8e6994e91b556f3a3029ed85370e
|
7
|
+
data.tar.gz: ac975b4e9087836bfc0c34fe1c22c3f8cca38a1481d97776bffdf296c19079dcdbf73f8a4cb95dccfc763dbcc6bad2d7c2290c739fdafbe6020ce8e68bfcd4dd
|
@@ -0,0 +1,201 @@
|
|
1
|
+
<html ng-app="BillyCmsBackend" id="billycms-backend-application">
|
2
|
+
<head>
|
3
|
+
<title>BillyCms:: Backend</title>
|
4
|
+
<script src="//cdn.tinymce.com/4/tinymce.min.js"></script>
|
5
|
+
<%= stylesheet_link_tag 'https://ajax.googleapis.com/ajax/libs/angular_material/1.0.0-rc1/angular-material.min.css' %>
|
6
|
+
<%= stylesheet_link_tag 'application' %>
|
7
|
+
<style>
|
8
|
+
body {
|
9
|
+
background-color: #fff;
|
10
|
+
}
|
11
|
+
</style>
|
12
|
+
|
13
|
+
<%= javascript_include_tag 'https://code.jquery.com/jquery-2.1.4.min.js' %>
|
14
|
+
<%= javascript_include_tag 'https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js' %>
|
15
|
+
<%= javascript_include_tag 'https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-animate.min.js' %>
|
16
|
+
<%= javascript_include_tag 'https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-aria.min.js' %>
|
17
|
+
<%= javascript_include_tag 'https://ajax.googleapis.com/ajax/libs/angular_material/1.0.0-rc1/angular-material.min.js' %>
|
18
|
+
<script>
|
19
|
+
/**
|
20
|
+
* Binds a TinyMCE widget to <textarea> elements.
|
21
|
+
*/
|
22
|
+
angular.module('ui.tinymce', [])
|
23
|
+
.value('uiTinymceConfig', {})
|
24
|
+
.directive('uiTinymce', ['$rootScope', '$compile', '$timeout', '$window', '$sce', 'uiTinymceConfig', function($rootScope, $compile, $timeout, $window, $sce, uiTinymceConfig) {
|
25
|
+
uiTinymceConfig = uiTinymceConfig || {};
|
26
|
+
var generatedIds = 0;
|
27
|
+
var ID_ATTR = 'ui-tinymce';
|
28
|
+
if (uiTinymceConfig.baseUrl) {
|
29
|
+
tinymce.baseURL = uiTinymceConfig.baseUrl;
|
30
|
+
}
|
31
|
+
|
32
|
+
return {
|
33
|
+
require: ['ngModel', '^?form'],
|
34
|
+
link: function(scope, element, attrs, ctrls) {
|
35
|
+
if (!$window.tinymce) {
|
36
|
+
return;
|
37
|
+
}
|
38
|
+
|
39
|
+
var ngModel = ctrls[0],
|
40
|
+
form = ctrls[1] || null;
|
41
|
+
|
42
|
+
var expression, options = {}, tinyInstance,
|
43
|
+
updateView = function(editor) {
|
44
|
+
var content = editor.getContent({format: options.format}).trim();
|
45
|
+
content = $sce.trustAsHtml(content);
|
46
|
+
|
47
|
+
ngModel.$setViewValue(content);
|
48
|
+
if (!$rootScope.$$phase) {
|
49
|
+
scope.$apply();
|
50
|
+
}
|
51
|
+
};
|
52
|
+
|
53
|
+
function toggleDisable(disabled) {
|
54
|
+
if (disabled) {
|
55
|
+
ensureInstance();
|
56
|
+
|
57
|
+
if (tinyInstance) {
|
58
|
+
tinyInstance.getBody().setAttribute('contenteditable', false);
|
59
|
+
}
|
60
|
+
} else {
|
61
|
+
ensureInstance();
|
62
|
+
|
63
|
+
if (tinyInstance && !tinyInstance.settings.readonly) {
|
64
|
+
tinyInstance.getBody().setAttribute('contenteditable', true);
|
65
|
+
}
|
66
|
+
}
|
67
|
+
}
|
68
|
+
|
69
|
+
// generate an ID
|
70
|
+
attrs.$set('id', ID_ATTR + '-' + generatedIds++);
|
71
|
+
|
72
|
+
expression = {};
|
73
|
+
|
74
|
+
angular.extend(expression, scope.$eval(attrs.uiTinymce));
|
75
|
+
|
76
|
+
var setupOptions = {
|
77
|
+
// Update model when calling setContent
|
78
|
+
// (such as from the source editor popup)
|
79
|
+
setup: function(ed) {
|
80
|
+
ed.on('init', function() {
|
81
|
+
ngModel.$render();
|
82
|
+
ngModel.$setPristine();
|
83
|
+
if (form) {
|
84
|
+
form.$setPristine();
|
85
|
+
}
|
86
|
+
});
|
87
|
+
|
88
|
+
// Update model on button click
|
89
|
+
ed.on('ExecCommand', function() {
|
90
|
+
ed.save();
|
91
|
+
updateView(ed);
|
92
|
+
});
|
93
|
+
|
94
|
+
// Update model on change
|
95
|
+
ed.on('change', function() {
|
96
|
+
ed.save();
|
97
|
+
updateView(ed);
|
98
|
+
});
|
99
|
+
|
100
|
+
ed.on('blur', function() {
|
101
|
+
element[0].blur();
|
102
|
+
});
|
103
|
+
|
104
|
+
// Update model when an object has been resized (table, image)
|
105
|
+
ed.on('ObjectResized', function() {
|
106
|
+
ed.save();
|
107
|
+
updateView(ed);
|
108
|
+
});
|
109
|
+
|
110
|
+
ed.on('remove', function() {
|
111
|
+
element.remove();
|
112
|
+
});
|
113
|
+
|
114
|
+
if (expression.setup) {
|
115
|
+
expression.setup(ed, {
|
116
|
+
updateView: updateView
|
117
|
+
});
|
118
|
+
}
|
119
|
+
},
|
120
|
+
format: expression.format || 'html',
|
121
|
+
selector: '#' + attrs.id
|
122
|
+
};
|
123
|
+
// extend options with initial uiTinymceConfig and
|
124
|
+
// options from directive attribute value
|
125
|
+
angular.extend(options, uiTinymceConfig, expression, setupOptions);
|
126
|
+
// Wrapped in $timeout due to $tinymce:refresh implementation, requires
|
127
|
+
// element to be present in DOM before instantiating editor when
|
128
|
+
// re-rendering directive
|
129
|
+
$timeout(function() {
|
130
|
+
tinymce.init(options);
|
131
|
+
toggleDisable(scope.$eval(attrs.ngDisabled));
|
132
|
+
});
|
133
|
+
|
134
|
+
ngModel.$formatters.unshift(function(modelValue) {
|
135
|
+
return modelValue ? $sce.trustAsHtml(modelValue) : '';
|
136
|
+
});
|
137
|
+
|
138
|
+
ngModel.$parsers.unshift(function(viewValue) {
|
139
|
+
return viewValue ? $sce.getTrustedHtml(viewValue) : '';
|
140
|
+
});
|
141
|
+
|
142
|
+
ngModel.$render = function() {
|
143
|
+
ensureInstance();
|
144
|
+
|
145
|
+
var viewValue = ngModel.$viewValue ?
|
146
|
+
$sce.getTrustedHtml(ngModel.$viewValue) : '';
|
147
|
+
|
148
|
+
// instance.getDoc() check is a guard against null value
|
149
|
+
// when destruction & recreation of instances happen
|
150
|
+
if (tinyInstance &&
|
151
|
+
tinyInstance.getDoc()
|
152
|
+
) {
|
153
|
+
tinyInstance.setContent(viewValue);
|
154
|
+
// Triggering change event due to TinyMCE not firing event &
|
155
|
+
// becoming out of sync for change callbacks
|
156
|
+
tinyInstance.fire('change');
|
157
|
+
}
|
158
|
+
};
|
159
|
+
|
160
|
+
attrs.$observe('disabled', toggleDisable);
|
161
|
+
|
162
|
+
// This block is because of TinyMCE not playing well with removal and
|
163
|
+
// recreation of instances, requiring instances to have different
|
164
|
+
// selectors in order to render new instances properly
|
165
|
+
scope.$on('$tinymce:refresh', function(e, id) {
|
166
|
+
var eid = attrs.id;
|
167
|
+
if (angular.isUndefined(id) || id === eid) {
|
168
|
+
var parentElement = element.parent();
|
169
|
+
var clonedElement = element.clone();
|
170
|
+
clonedElement.removeAttr('id');
|
171
|
+
clonedElement.removeAttr('style');
|
172
|
+
clonedElement.removeAttr('aria-hidden');
|
173
|
+
tinymce.execCommand('mceRemoveEditor', false, eid);
|
174
|
+
parentElement.append($compile(clonedElement)(scope));
|
175
|
+
}
|
176
|
+
});
|
177
|
+
|
178
|
+
scope.$on('$destroy', function() {
|
179
|
+
ensureInstance();
|
180
|
+
|
181
|
+
if (tinyInstance) {
|
182
|
+
tinyInstance.remove();
|
183
|
+
tinyInstance = null;
|
184
|
+
}
|
185
|
+
});
|
186
|
+
|
187
|
+
function ensureInstance() {
|
188
|
+
if (!tinyInstance) {
|
189
|
+
tinyInstance = tinymce.get(attrs.id);
|
190
|
+
}
|
191
|
+
}
|
192
|
+
}
|
193
|
+
};
|
194
|
+
}]);
|
195
|
+
</script>
|
196
|
+
<%= javascript_include_tag 'billy_cms/backend' %>
|
197
|
+
</head>
|
198
|
+
<body>
|
199
|
+
<%= yield %>
|
200
|
+
</body>
|
201
|
+
</html>
|
data/lib/billy_cms/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: billy_cms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.18
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- unsdrei GbR
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-12-
|
11
|
+
date: 2016-12-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -174,6 +174,7 @@ files:
|
|
174
174
|
- app/views/billy_cms/backend/_page_types.html.erb
|
175
175
|
- app/views/billy_cms/backend/_tree.html.erb
|
176
176
|
- app/views/billy_cms/backend/index.html.erb
|
177
|
+
- app/views/layouts/billy_cms/backend.html.erb
|
177
178
|
- billy_cms.gemspec
|
178
179
|
- bin/console
|
179
180
|
- bin/setup
|