oxymoron 1.0.3 → 1.0.4
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ba2cfcac8057d43bfb870dd02aaa0924f6488d8c
|
4
|
+
data.tar.gz: b3b9d2905e004ac1814eedc8d9ecfebc65493001
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a7a46692f762bb48385842735922fa99b93ca67d7b1e4e9660328413471edc299587223d0376967bb2e72b3138c3520ea1fa8ab588f7c8f07a737880511c3b24
|
7
|
+
data.tar.gz: 1040515932287e6d02810f0a5e903b485d10fce8183d584369a4a082660113dfe577235c52e88ad9008abbd911c64e155870be020f37a3e5b585c8ba7f5100fb
|
data/README.md
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
[Example application](https://github.com/storuky/oxymoron_app)
|
4
4
|
|
5
|
+
[Basic forum based on Oxymoron](https://github.com/storuky/forum)
|
5
6
|
##Setup
|
6
7
|
|
7
8
|
Add it to your Gemfile:
|
@@ -79,7 +80,7 @@ class ApplicationController < ActionController::Base
|
|
79
80
|
false
|
80
81
|
else
|
81
82
|
index
|
82
|
-
'application' #
|
83
|
+
'application' # or other layout
|
83
84
|
end
|
84
85
|
}
|
85
86
|
|
@@ -1,6 +1,5 @@
|
|
1
1
|
<%= render_oxymoron_assets "directives/content_for.js"%>
|
2
2
|
<%= render_oxymoron_assets "directives/fileupload.js"%>
|
3
|
-
<%= render_oxymoron_assets "directives/checklist_model.js"%>
|
4
3
|
<%= render_oxymoron_assets "directives/click_outside.js"%>
|
5
4
|
|
6
5
|
angular.module("oxymoron.directives", ['oxymoron.directives.fileupload', 'oxymoron.directives.contentFor', 'oxymoron.directives.checklistModel', 'oxymoron.directives.clickOutside'])
|
@@ -2,24 +2,33 @@ angular.module("oxymoron.services.sign", [])
|
|
2
2
|
.service('Sign', ['$http', function ($http) {
|
3
3
|
var Sign = this;
|
4
4
|
|
5
|
-
Sign.out = function () {
|
5
|
+
Sign.out = function (callback) {
|
6
6
|
$http.delete(Routes.destroy_user_session_path())
|
7
7
|
.success(function () {
|
8
|
-
|
8
|
+
if (callback)
|
9
|
+
callback()
|
10
|
+
else
|
11
|
+
window.location = "/";
|
9
12
|
})
|
10
13
|
}
|
11
14
|
|
12
|
-
Sign.in = function (
|
13
|
-
$http.post(Routes.user_session_path(), {user:
|
15
|
+
Sign.in = function (user, callback) {
|
16
|
+
$http.post(Routes.user_session_path(), {user: user})
|
14
17
|
.success(function () {
|
15
|
-
|
18
|
+
if (callback)
|
19
|
+
callback();
|
20
|
+
else
|
21
|
+
window.location.reload();
|
16
22
|
})
|
17
23
|
}
|
18
24
|
|
19
|
-
Sign.up = function (
|
20
|
-
$http.post(Routes.user_registration_path(), {user:
|
25
|
+
Sign.up = function (user, callback) {
|
26
|
+
$http.post(Routes.user_registration_path(), {user: user})
|
21
27
|
.success(function () {
|
22
|
-
|
28
|
+
if (callback)
|
29
|
+
callback();
|
30
|
+
else
|
31
|
+
window.location.reload();
|
23
32
|
})
|
24
33
|
}
|
25
34
|
}])
|
data/lib/oxymoron/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oxymoron
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kononenko Paul
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-09-
|
11
|
+
date: 2016-09-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: awesome_print
|
@@ -104,7 +104,6 @@ files:
|
|
104
104
|
- app/assets/javascripts/oxymoron/config/http.js
|
105
105
|
- app/assets/javascripts/oxymoron/config/states.js.erb
|
106
106
|
- app/assets/javascripts/oxymoron/directives.js.erb
|
107
|
-
- app/assets/javascripts/oxymoron/directives/checklist_model.js
|
108
107
|
- app/assets/javascripts/oxymoron/directives/click_outside.js
|
109
108
|
- app/assets/javascripts/oxymoron/directives/content_for.js
|
110
109
|
- app/assets/javascripts/oxymoron/directives/fileupload.js
|
@@ -1,141 +0,0 @@
|
|
1
|
-
angular.module("oxymoron.directives.checklistModel", [])
|
2
|
-
.directive('checklistModel', ['$parse', '$compile', function($parse, $compile) {
|
3
|
-
// contains
|
4
|
-
function contains(arr, item, comparator) {
|
5
|
-
if (angular.isArray(arr)) {
|
6
|
-
for (var i = arr.length; i--;) {
|
7
|
-
if (comparator(arr[i], item)) {
|
8
|
-
return true;
|
9
|
-
}
|
10
|
-
}
|
11
|
-
}
|
12
|
-
return false;
|
13
|
-
}
|
14
|
-
|
15
|
-
// add
|
16
|
-
function add(arr, item, comparator) {
|
17
|
-
arr = angular.isArray(arr) ? arr : [];
|
18
|
-
if(!contains(arr, item, comparator)) {
|
19
|
-
arr.push(item);
|
20
|
-
}
|
21
|
-
return arr;
|
22
|
-
}
|
23
|
-
|
24
|
-
// remove
|
25
|
-
function remove(arr, item, comparator) {
|
26
|
-
if (angular.isArray(arr)) {
|
27
|
-
for (var i = arr.length; i--;) {
|
28
|
-
if (comparator(arr[i], item)) {
|
29
|
-
arr.splice(i, 1);
|
30
|
-
break;
|
31
|
-
}
|
32
|
-
}
|
33
|
-
}
|
34
|
-
return arr;
|
35
|
-
}
|
36
|
-
|
37
|
-
// http://stackoverflow.com/a/19228302/1458162
|
38
|
-
function postLinkFn(scope, elem, attrs) {
|
39
|
-
// exclude recursion, but still keep the model
|
40
|
-
var checklistModel = attrs.checklistModel;
|
41
|
-
attrs.$set("checklistModel", null);
|
42
|
-
// compile with `ng-model` pointing to `checked`
|
43
|
-
$compile(elem)(scope);
|
44
|
-
attrs.$set("checklistModel", checklistModel);
|
45
|
-
|
46
|
-
// getter / setter for original model
|
47
|
-
var getter = $parse(checklistModel);
|
48
|
-
var setter = getter.assign;
|
49
|
-
var checklistChange = $parse(attrs.checklistChange);
|
50
|
-
var checklistBeforeChange = $parse(attrs.checklistBeforeChange);
|
51
|
-
|
52
|
-
// value added to list
|
53
|
-
var value = attrs.checklistValue ? $parse(attrs.checklistValue)(scope.$parent) : attrs.value;
|
54
|
-
|
55
|
-
|
56
|
-
var comparator = angular.equals;
|
57
|
-
|
58
|
-
if (attrs.hasOwnProperty('checklistComparator')){
|
59
|
-
if (attrs.checklistComparator[0] == '.') {
|
60
|
-
var comparatorExpression = attrs.checklistComparator.substring(1);
|
61
|
-
comparator = function (a, b) {
|
62
|
-
return a[comparatorExpression] === b[comparatorExpression];
|
63
|
-
};
|
64
|
-
|
65
|
-
} else {
|
66
|
-
comparator = $parse(attrs.checklistComparator)(scope.$parent);
|
67
|
-
}
|
68
|
-
}
|
69
|
-
|
70
|
-
// watch UI checked change
|
71
|
-
scope.$watch(attrs.ngModel, function(newValue, oldValue) {
|
72
|
-
if (newValue === oldValue) {
|
73
|
-
return;
|
74
|
-
}
|
75
|
-
|
76
|
-
if (checklistBeforeChange && (checklistBeforeChange(scope) === false)) {
|
77
|
-
scope[attrs.ngModel] = contains(getter(scope.$parent), value, comparator);
|
78
|
-
return;
|
79
|
-
}
|
80
|
-
|
81
|
-
setValueInChecklistModel(value, newValue);
|
82
|
-
|
83
|
-
if (checklistChange) {
|
84
|
-
checklistChange(scope);
|
85
|
-
}
|
86
|
-
});
|
87
|
-
|
88
|
-
function setValueInChecklistModel(value, checked) {
|
89
|
-
var current = getter(scope.$parent);
|
90
|
-
if (angular.isFunction(setter)) {
|
91
|
-
if (checked === true) {
|
92
|
-
setter(scope.$parent, add(current, value, comparator));
|
93
|
-
} else {
|
94
|
-
setter(scope.$parent, remove(current, value, comparator));
|
95
|
-
}
|
96
|
-
}
|
97
|
-
|
98
|
-
}
|
99
|
-
|
100
|
-
// declare one function to be used for both $watch functions
|
101
|
-
function setChecked(newArr, oldArr) {
|
102
|
-
if (checklistBeforeChange && (checklistBeforeChange(scope) === false)) {
|
103
|
-
setValueInChecklistModel(value, scope[attrs.ngModel]);
|
104
|
-
return;
|
105
|
-
}
|
106
|
-
scope[attrs.ngModel] = contains(newArr, value, comparator);
|
107
|
-
}
|
108
|
-
|
109
|
-
// watch original model change
|
110
|
-
// use the faster $watchCollection method if it's available
|
111
|
-
if (angular.isFunction(scope.$parent.$watchCollection)) {
|
112
|
-
scope.$parent.$watchCollection(checklistModel, setChecked);
|
113
|
-
} else {
|
114
|
-
scope.$parent.$watch(checklistModel, setChecked, true);
|
115
|
-
}
|
116
|
-
}
|
117
|
-
|
118
|
-
return {
|
119
|
-
restrict: 'A',
|
120
|
-
priority: 1000,
|
121
|
-
terminal: true,
|
122
|
-
scope: true,
|
123
|
-
compile: function(tElement, tAttrs) {
|
124
|
-
if ((tElement[0].tagName !== 'INPUT' || tAttrs.type !== 'checkbox') && (tElement[0].tagName !== 'MD-CHECKBOX') && (!tAttrs.btnCheckbox)) {
|
125
|
-
throw 'checklist-model should be applied to `input[type="checkbox"]` or `md-checkbox`.';
|
126
|
-
}
|
127
|
-
|
128
|
-
if (!tAttrs.checklistValue && !tAttrs.value) {
|
129
|
-
throw 'You should provide `value` or `checklist-value`.';
|
130
|
-
}
|
131
|
-
|
132
|
-
// by default ngModel is 'checked', so we set it if not specified
|
133
|
-
if (!tAttrs.ngModel) {
|
134
|
-
// local scope var storing individual checkbox model
|
135
|
-
tAttrs.$set("ngModel", "checked");
|
136
|
-
}
|
137
|
-
|
138
|
-
return postLinkFn;
|
139
|
-
}
|
140
|
-
};
|
141
|
-
}]);
|