@lemonadejs/rating 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,110 @@
1
+ ;(function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
3
+ typeof define === 'function' && define.amd ? define(factory) :
4
+ global.Rating = factory();
5
+ }(this, (function () {
6
+
7
+ // Load LemonadeJS
8
+ if (typeof(lemonade) == 'undefined') {
9
+ if (typeof(require) === 'function') {
10
+ var lemonade = require('lemonadejs');
11
+ } else if (window.lemonade) {
12
+ var lemonade = window.lemonade;
13
+ }
14
+ }
15
+
16
+ return function() {
17
+ var self = this;
18
+ if (! self.number) {
19
+ self.number = 5;
20
+ }
21
+ self.stars = [];
22
+
23
+ // Event
24
+ var change = self.onchange;
25
+
26
+ // Current self star
27
+ var current = null;
28
+
29
+ /**
30
+ * Update the number of stars
31
+ */
32
+ var len = function() {
33
+ // Remove stars
34
+ if (self.number < self.stars.length) {
35
+ self.stars.splice(self.number, self.stars.length);
36
+ if (self.value > self.number) {
37
+ self.value = self.number;
38
+ }
39
+ }
40
+ // Add missing stars
41
+ for (var i = 0; i < self.number; i++) {
42
+ if (! self.stars[i]) {
43
+ self.stars[i] = {};
44
+ }
45
+ }
46
+ // Refresh
47
+ self.refresh('stars');
48
+ }
49
+
50
+ var val = function() {
51
+ // Update value
52
+ if (self.value > 0) {
53
+ var t = null;
54
+ if (t = self.stars[self.value-1]) {
55
+ self.click(t);
56
+ }
57
+ }
58
+ }
59
+
60
+ self.onchange = function(prop) {
61
+ if (prop == 'number') {
62
+ len();
63
+ } else if (prop == 'value') {
64
+ val();
65
+ }
66
+ }
67
+
68
+ self.onload = function() {
69
+ len();
70
+ val();
71
+ }
72
+
73
+ self.click = function(s) {
74
+ if (! s.selected) {
75
+ current = null;
76
+ }
77
+ var index = self.stars.indexOf(s);
78
+ for (var i = 0; i < self.number; i++) {
79
+ if (i <= index && s !== current) {
80
+ self.stars[i].selected = 1;
81
+ self.stars[i].el.style.color = 'red';
82
+ } else {
83
+ self.stars[i].selected = 0;
84
+ self.stars[i].el.style.color = '';
85
+ }
86
+ }
87
+ current = s;
88
+ if (change) {
89
+ change(index+1, s);
90
+ }
91
+ }
92
+
93
+ var template = `<div @loop="self.stars" value="{{self.value}}" @ref="self.component" number="{{self.number}}" name="{{self.name}}" style="cursor: pointer">
94
+ <i class="material-icons" onclick="self.parent.click(self)">{{self.selected?'star':'star_outline'}}</i>
95
+ </div>`;
96
+
97
+ var root = lemonade.element(template, self);
98
+
99
+ root.val = function(v) {
100
+ if (typeof(v) === 'undefined') {
101
+ return self.value;
102
+ } else {
103
+ self.value = v;
104
+ }
105
+ }
106
+
107
+ return root;
108
+ }
109
+
110
+ })));
@@ -0,0 +1 @@
1
+ (function(g,a){"object"===typeof exports&&"undefined"!==typeof module?module.exports=a():"function"===typeof define&&define.amd?define(a):g.List=a()})(this,function(){return function(g){var a=this,f=a.result=a.data;a.onchange=function(b){if("data"===b||"input"==b)h(a.input);else if("page"==b){if((b=parseInt(a.pagination))&&f.length>b){var c=b*a.page,d=b*a.page+b;f.length<d&&(d=f.length)}else c=0,d=f.length;for(b=[];c<d;c++)b.push(f[c]);a.result=b;b=[];if(0<a.pagination&&(d=Math.ceil(f.length/a.pagination),1<d)){if(6>a.page){var e=0;c=10>d?d:10}else 5>d-a.page?(e=d-9,c=d,0>e&&(e=0)):(e=parseInt(a.page)-4,c=parseInt(a.page)+5);for(0<e&&b.push({title:0,value:"\u00c2\u00ab"});e<c;e++)b.push({title:e,value:e+1,selected:a.page==e});c<d&&b.push({title:c+e,value:"\u00c2\u00bb"});a.pages=b}}};a.onload=function(){0<a.pagination&&(a.page=0)};var h=function(b){f=a.result=a.data.filter(function(c){a:{for(var d in c)if(0<=(""+c[d]).toLowerCase().search(b)){c=!0;break a}c=!1}return c});a.page=0};return lemonade.element('\n <>\n <div class="list-header" data="{{self.data}}">\n <input type=\'text\' @bind="self.input" search="{{self.search}}"/><ul page="{{self.page}}"><Pagination @loop="self.pages"/></ul></div><div class="list-content"><Item @loop="self.result"/></div></>',a,{Item:function(){return lemonade.element(g,this)},Pagination:function(){return lemonade.element('<li onclick="self.parent.page = this.title;" title="{{self.title}}" selected="{{self.selected}}">{{self.value}}</li>',this)}})}});
package/package.json ADDED
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "@lemonadejs/rating",
3
+ "title": "LemonadeJS star rating javascript plugin",
4
+ "description": "LemonadeJS star rating plugin",
5
+ "author": {
6
+ "name": "Contact <contact@lemonadejs.net>",
7
+ "url": "https://lemonadejs.net"
8
+ },
9
+ "keywords": [
10
+ "javascript star rating",
11
+ "javascript rating",
12
+ "lemonadejs plugins",
13
+ "js",
14
+ "library",
15
+ "javascript plugins"
16
+ ],
17
+ "dependencies": {
18
+ "lemonadejs": "^2.1.12"
19
+ },
20
+ "main": "dist/index.js",
21
+ "version": "1.0.0"
22
+ }