├── .gitignore
├── .travis.yml
├── LICENSE
├── README.md
├── bower.json
├── demo
├── actions.html
├── index.html
├── store.html
└── view.html
├── funk.html
├── index.html
├── package.json
├── reflux-core.html
├── reflux-core.js
└── test
├── funk.html
├── index.html
├── some-actions.html
├── some-store.html
└── some-view.html
/.gitignore:
--------------------------------------------------------------------------------
1 | bower_components
2 | node_modules
3 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - "5"
4 | before_install:
5 | - "npm install -g bower"
6 | - "bower install"
7 | - "npm install -g web-component-tester"
8 | - "export DISPLAY=:99.0"
9 | - "sh -e /etc/init.d/xvfb start"
10 | script: "wct"
11 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2016 devin ivy
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 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # funk
2 |
3 | Polymer high-fives Reflux
4 |
5 | [](https://travis-ci.org/devinivy/funk)
6 |
7 | ## Usage
8 | Funk marries Polymer and Reflux by allowing you to use standard Polymer v1 data-binding alongside Reflux's stores and actions. It leverages the [`yarn-state-behavior`](https://github.com/yarn-co/yarn-state-behavior) to share state throughout your app.
9 | - Your **view** layer is Polymer.
10 | - Your **actions** are Reflux actions.
11 | - Your **stores** are Polymerized Reflux stores.
12 | - Views subscribe to stores via **Polymer data-binding!**
13 |
14 | ### What You'll Find
15 | #### `Funk.Reflux`
16 | An alias for [reflux-core](https://github.com/reflux/reflux-core) (identical to [RefluxJS](https://github.com/reflux/refluxjs), but without the React helpers). You'll find all the standard goodies on here like `Funk.Reflux.createActions()`.
17 |
18 | #### `Funk.StoreBehavior`
19 | The Polymer behavior used to create a Polymerized Reflux store. Enables data-binding from the store to your views.
20 |
21 | #### `Funk.ViewBehavior`
22 | The Polymer behavior used to enable data-binding to a view from your stores.
23 |
24 | #### `Funk.CollectionBehavior`
25 | The Polymer behavior used by `Funk.StoreBehavior` to provide crucial helpers for working with lists and collections.
26 |
27 | ### Example
28 | Check out the full [polymer-funky-flux](https://github.com/devinivy/polymer-funky-flux) demo or learn to use Funk by walking through this commented code! If you're unfamiliar with Reflux or the flux pattern, start reading [here](https://github.com/reflux/refluxjs) to see how it will make your life better-er.
29 |
30 | #### `view.html`
31 | ```html
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
Finger length: [[_length(state.myStore.finger)]]
40 |
41 |
ring
42 |
thumb
43 |
pinky
44 |
middle
45 |
pointer
46 |
47 |
48 |
49 |
50 |
73 | ```
74 |
75 | #### `actions.html`
76 | ```html
77 |
78 |
79 |
85 | ```
86 |
87 | #### `store.html`
88 | ```html
89 |
90 |
91 |
92 |
93 |
131 | ```
132 |
133 | ## Docs and Tests
134 | [API docs](http://devinivy.github.io/funk) | [View demo](http://devinivy.github.io/funk/components/funk/demo/) | [Run tests](http://devinivy.github.io/funk/components/funk/test/)
135 |
136 | ### Locally
137 | The relative paths used in this project assume that `funk` will be included alongside its dependencies using bower. So, to test this repo and view documentation, a small amount of massaging must be done. Also, HTML imports require CORS support, so we must use a simple web server to view the tests and API-level documentation.
138 | ```bash
139 | bower install
140 | ln -s .. bower_components/funk
141 | python -m SimpleHTTPServer 8000
142 | # Now navigate to, for example,
143 | # http://localhost:8000/bower_components/funk/
144 | ```
145 |
146 | #### Documentation
147 | To view the API-level documentation for the Polymer behaviors, follow the process above then navigate to **http://localhost:8000/bower_components/funk/**.
148 |
149 | #### Tests
150 | Tests are placed inside the `test` folder and can be accessed at **http://localhost:8000/bower_components/funk/test/**.
151 |
--------------------------------------------------------------------------------
/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "funk",
3 | "version": "1.1.0",
4 | "keywords": [
5 | "web-components",
6 | "polymer",
7 | "flux",
8 | "reflux",
9 | "state"
10 | ],
11 | "license": "MIT",
12 | "description": "Polymer high-fives Reflux",
13 | "authors": [
14 | "Devin Ivy "
15 | ],
16 | "repository": {
17 | "type": "git",
18 | "url": "git://github.com/devinivy/funk.git"
19 | },
20 | "main": "funk.html",
21 | "dependencies": {
22 | "polymer": "Polymer/polymer#^1.2.0",
23 | "yarn-state-behavior": "yarn-co/yarn-state-behavior#~0.3.0"
24 | },
25 | "devDependencies": {
26 | "iron-component-page": "polymerelements/iron-component-page#^1.0.0",
27 | "test-fixture": "polymerelements/test-fixture#^1.0.0",
28 | "web-component-tester": "*",
29 | "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/demo/actions.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
--------------------------------------------------------------------------------
/demo/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Smell My Finger
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/demo/store.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
43 |
--------------------------------------------------------------------------------
/demo/view.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
Finger length: [[_length(state.myStore.finger)]]
9 |
10 |
ring
11 |
thumb
12 |
pinky
13 |
middle
14 |
pointer
15 |
16 |
17 |
18 |
19 |
42 |
--------------------------------------------------------------------------------
/funk.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
314 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | funk documentation
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "funk",
3 | "version": "1.0.0",
4 | "description": "Polymer high-fives Reflux",
5 | "repository": {
6 | "type": "git",
7 | "url": "git+https://github.com/devinivy/funk.git"
8 | },
9 | "author": "Devin Ivy ",
10 | "license": "MIT",
11 | "bugs": {
12 | "url": "https://github.com/devinivy/funk/issues"
13 | },
14 | "homepage": "https://github.com/devinivy/funk#readme",
15 | "scripts": {
16 | "build": "browserify -d -r reflux-core -o reflux-core.js",
17 | "release": "browserify -r reflux-core -o reflux-core.js"
18 | },
19 | "devDependencies": {
20 | "reflux-core": "0.3.0",
21 | "browserify": "13.x.x"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/reflux-core.html:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/reflux-core.js:
--------------------------------------------------------------------------------
1 | require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 1) {
668 | updated.init = function () {
669 | var args = arguments;
670 | composed.init.forEach(function (init) {
671 | init.apply(this, args);
672 | }, this);
673 | };
674 | }
675 | if (composed.preEmit.length > 1) {
676 | updated.preEmit = function () {
677 | return composed.preEmit.reduce((function (args, preEmit) {
678 | var newValue = preEmit.apply(this, args);
679 | return newValue === undefined ? args : [newValue];
680 | }).bind(this), arguments);
681 | };
682 | }
683 | if (composed.shouldEmit.length > 1) {
684 | updated.shouldEmit = function () {
685 | var args = arguments;
686 | return !composed.shouldEmit.some(function (shouldEmit) {
687 | return !shouldEmit.apply(this, args);
688 | }, this);
689 | };
690 | }
691 | Object.keys(composed).forEach(function (composable) {
692 | if (composed[composable].length === 1) {
693 | updated[composable] = composed[composable][0];
694 | }
695 | });
696 |
697 | return updated;
698 | };
699 | },{"./utils":11}],11:[function(require,module,exports){
700 | "use strict";
701 |
702 | Object.defineProperty(exports, "__esModule", {
703 | value: true
704 | });
705 | exports.capitalize = capitalize;
706 | exports.callbackName = callbackName;
707 | exports.isObject = isObject;
708 | exports.extend = extend;
709 | exports.isFunction = isFunction;
710 | exports.object = object;
711 | exports.isArguments = isArguments;
712 | exports.throwIf = throwIf;
713 |
714 | function capitalize(string) {
715 | return string.charAt(0).toUpperCase() + string.slice(1);
716 | }
717 |
718 | function callbackName(string, prefix) {
719 | prefix = prefix || "on";
720 | return prefix + exports.capitalize(string);
721 | }
722 |
723 | /*
724 | * isObject, extend, isFunction, isArguments are taken from undescore/lodash in
725 | * order to remove the dependency
726 | */
727 |
728 | function isObject(obj) {
729 | var type = typeof obj;
730 | return type === "function" || type === "object" && !!obj;
731 | }
732 |
733 | function extend(obj) {
734 | if (!isObject(obj)) {
735 | return obj;
736 | }
737 | var source, prop;
738 | for (var i = 1, length = arguments.length; i < length; i++) {
739 | source = arguments[i];
740 | for (prop in source) {
741 | if (Object.getOwnPropertyDescriptor && Object.defineProperty) {
742 | var propertyDescriptor = Object.getOwnPropertyDescriptor(source, prop);
743 | Object.defineProperty(obj, prop, propertyDescriptor);
744 | } else {
745 | obj[prop] = source[prop];
746 | }
747 | }
748 | }
749 | return obj;
750 | }
751 |
752 | function isFunction(value) {
753 | return typeof value === "function";
754 | }
755 |
756 | exports.EventEmitter = require("eventemitter3");
757 |
758 | exports.nextTick = function (callback) {
759 | setTimeout(callback, 0);
760 | };
761 |
762 | function object(keys, vals) {
763 | var o = {},
764 | i = 0;
765 | for (; i < keys.length; i++) {
766 | o[keys[i]] = vals[i];
767 | }
768 | return o;
769 | }
770 |
771 | function isArguments(value) {
772 | return typeof value === "object" && "callee" in value && typeof value.length === "number";
773 | }
774 |
775 | function throwIf(val, msg) {
776 | if (val) {
777 | throw Error(msg || val);
778 | }
779 | }
780 | },{"eventemitter3":12}],12:[function(require,module,exports){
781 | 'use strict';
782 |
783 | //
784 | // We store our EE objects in a plain object whose properties are event names.
785 | // If `Object.create(null)` is not supported we prefix the event names with a
786 | // `~` to make sure that the built-in object properties are not overridden or
787 | // used as an attack vector.
788 | // We also assume that `Object.create(null)` is available when the event name
789 | // is an ES6 Symbol.
790 | //
791 | var prefix = typeof Object.create !== 'function' ? '~' : false;
792 |
793 | /**
794 | * Representation of a single EventEmitter function.
795 | *
796 | * @param {Function} fn Event handler to be called.
797 | * @param {Mixed} context Context for function execution.
798 | * @param {Boolean} once Only emit once
799 | * @api private
800 | */
801 | function EE(fn, context, once) {
802 | this.fn = fn;
803 | this.context = context;
804 | this.once = once || false;
805 | }
806 |
807 | /**
808 | * Minimal EventEmitter interface that is molded against the Node.js
809 | * EventEmitter interface.
810 | *
811 | * @constructor
812 | * @api public
813 | */
814 | function EventEmitter() { /* Nothing to set */ }
815 |
816 | /**
817 | * Holds the assigned EventEmitters by name.
818 | *
819 | * @type {Object}
820 | * @private
821 | */
822 | EventEmitter.prototype._events = undefined;
823 |
824 | /**
825 | * Return a list of assigned event listeners.
826 | *
827 | * @param {String} event The events that should be listed.
828 | * @param {Boolean} exists We only need to know if there are listeners.
829 | * @returns {Array|Boolean}
830 | * @api public
831 | */
832 | EventEmitter.prototype.listeners = function listeners(event, exists) {
833 | var evt = prefix ? prefix + event : event
834 | , available = this._events && this._events[evt];
835 |
836 | if (exists) return !!available;
837 | if (!available) return [];
838 | if (available.fn) return [available.fn];
839 |
840 | for (var i = 0, l = available.length, ee = new Array(l); i < l; i++) {
841 | ee[i] = available[i].fn;
842 | }
843 |
844 | return ee;
845 | };
846 |
847 | /**
848 | * Emit an event to all registered event listeners.
849 | *
850 | * @param {String} event The name of the event.
851 | * @returns {Boolean} Indication if we've emitted an event.
852 | * @api public
853 | */
854 | EventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {
855 | var evt = prefix ? prefix + event : event;
856 |
857 | if (!this._events || !this._events[evt]) return false;
858 |
859 | var listeners = this._events[evt]
860 | , len = arguments.length
861 | , args
862 | , i;
863 |
864 | if ('function' === typeof listeners.fn) {
865 | if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);
866 |
867 | switch (len) {
868 | case 1: return listeners.fn.call(listeners.context), true;
869 | case 2: return listeners.fn.call(listeners.context, a1), true;
870 | case 3: return listeners.fn.call(listeners.context, a1, a2), true;
871 | case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;
872 | case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;
873 | case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;
874 | }
875 |
876 | for (i = 1, args = new Array(len -1); i < len; i++) {
877 | args[i - 1] = arguments[i];
878 | }
879 |
880 | listeners.fn.apply(listeners.context, args);
881 | } else {
882 | var length = listeners.length
883 | , j;
884 |
885 | for (i = 0; i < length; i++) {
886 | if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);
887 |
888 | switch (len) {
889 | case 1: listeners[i].fn.call(listeners[i].context); break;
890 | case 2: listeners[i].fn.call(listeners[i].context, a1); break;
891 | case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;
892 | default:
893 | if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {
894 | args[j - 1] = arguments[j];
895 | }
896 |
897 | listeners[i].fn.apply(listeners[i].context, args);
898 | }
899 | }
900 | }
901 |
902 | return true;
903 | };
904 |
905 | /**
906 | * Register a new EventListener for the given event.
907 | *
908 | * @param {String} event Name of the event.
909 | * @param {Functon} fn Callback function.
910 | * @param {Mixed} context The context of the function.
911 | * @api public
912 | */
913 | EventEmitter.prototype.on = function on(event, fn, context) {
914 | var listener = new EE(fn, context || this)
915 | , evt = prefix ? prefix + event : event;
916 |
917 | if (!this._events) this._events = prefix ? {} : Object.create(null);
918 | if (!this._events[evt]) this._events[evt] = listener;
919 | else {
920 | if (!this._events[evt].fn) this._events[evt].push(listener);
921 | else this._events[evt] = [
922 | this._events[evt], listener
923 | ];
924 | }
925 |
926 | return this;
927 | };
928 |
929 | /**
930 | * Add an EventListener that's only called once.
931 | *
932 | * @param {String} event Name of the event.
933 | * @param {Function} fn Callback function.
934 | * @param {Mixed} context The context of the function.
935 | * @api public
936 | */
937 | EventEmitter.prototype.once = function once(event, fn, context) {
938 | var listener = new EE(fn, context || this, true)
939 | , evt = prefix ? prefix + event : event;
940 |
941 | if (!this._events) this._events = prefix ? {} : Object.create(null);
942 | if (!this._events[evt]) this._events[evt] = listener;
943 | else {
944 | if (!this._events[evt].fn) this._events[evt].push(listener);
945 | else this._events[evt] = [
946 | this._events[evt], listener
947 | ];
948 | }
949 |
950 | return this;
951 | };
952 |
953 | /**
954 | * Remove event listeners.
955 | *
956 | * @param {String} event The event we want to remove.
957 | * @param {Function} fn The listener that we need to find.
958 | * @param {Mixed} context Only remove listeners matching this context.
959 | * @param {Boolean} once Only remove once listeners.
960 | * @api public
961 | */
962 | EventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {
963 | var evt = prefix ? prefix + event : event;
964 |
965 | if (!this._events || !this._events[evt]) return this;
966 |
967 | var listeners = this._events[evt]
968 | , events = [];
969 |
970 | if (fn) {
971 | if (listeners.fn) {
972 | if (
973 | listeners.fn !== fn
974 | || (once && !listeners.once)
975 | || (context && listeners.context !== context)
976 | ) {
977 | events.push(listeners);
978 | }
979 | } else {
980 | for (var i = 0, length = listeners.length; i < length; i++) {
981 | if (
982 | listeners[i].fn !== fn
983 | || (once && !listeners[i].once)
984 | || (context && listeners[i].context !== context)
985 | ) {
986 | events.push(listeners[i]);
987 | }
988 | }
989 | }
990 | }
991 |
992 | //
993 | // Reset the array, or remove it completely if we have no more listeners.
994 | //
995 | if (events.length) {
996 | this._events[evt] = events.length === 1 ? events[0] : events;
997 | } else {
998 | delete this._events[evt];
999 | }
1000 |
1001 | return this;
1002 | };
1003 |
1004 | /**
1005 | * Remove all listeners or only the listeners for the specified event.
1006 | *
1007 | * @param {String} event The event want to remove all listeners for.
1008 | * @api public
1009 | */
1010 | EventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {
1011 | if (!this._events) return this;
1012 |
1013 | if (event) delete this._events[prefix ? prefix + event : event];
1014 | else this._events = prefix ? {} : Object.create(null);
1015 |
1016 | return this;
1017 | };
1018 |
1019 | //
1020 | // Alias methods names because people roll like that.
1021 | //
1022 | EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
1023 | EventEmitter.prototype.addListener = EventEmitter.prototype.on;
1024 |
1025 | //
1026 | // This function doesn't apply anymore.
1027 | //
1028 | EventEmitter.prototype.setMaxListeners = function setMaxListeners() {
1029 | return this;
1030 | };
1031 |
1032 | //
1033 | // Expose the prefix.
1034 | //
1035 | EventEmitter.prefixed = prefix;
1036 |
1037 | //
1038 | // Expose the module.
1039 | //
1040 | if ('undefined' !== typeof module) {
1041 | module.exports = EventEmitter;
1042 | }
1043 |
1044 | },{}],"reflux-core":[function(require,module,exports){
1045 | "use strict";
1046 |
1047 | Object.defineProperty(exports, "__esModule", {
1048 | value: true
1049 | });
1050 | var Reflux = {
1051 | version: {
1052 | "reflux-core": "0.3.0"
1053 | }
1054 | };
1055 |
1056 | Reflux.ActionMethods = require("./ActionMethods");
1057 |
1058 | Reflux.ListenerMethods = require("./ListenerMethods");
1059 |
1060 | Reflux.PublisherMethods = require("./PublisherMethods");
1061 |
1062 | Reflux.StoreMethods = require("./StoreMethods");
1063 |
1064 | Reflux.createAction = require("./createAction");
1065 |
1066 | Reflux.createStore = require("./createStore");
1067 |
1068 | var maker = require("./joins").staticJoinCreator;
1069 |
1070 | Reflux.joinTrailing = Reflux.all = maker("last"); // Reflux.all alias for backward compatibility
1071 |
1072 | Reflux.joinLeading = maker("first");
1073 |
1074 | Reflux.joinStrict = maker("strict");
1075 |
1076 | Reflux.joinConcat = maker("all");
1077 |
1078 | var _ = Reflux.utils = require("./utils");
1079 |
1080 | Reflux.EventEmitter = _.EventEmitter;
1081 |
1082 | Reflux.Promise = _.Promise;
1083 |
1084 | /**
1085 | * Convenience function for creating a set of actions
1086 | *
1087 | * @param definitions the definitions for the actions to be created
1088 | * @returns an object with actions of corresponding action names
1089 | */
1090 | Reflux.createActions = (function () {
1091 | var reducer = function reducer(definitions, actions) {
1092 | Object.keys(definitions).forEach(function (actionName) {
1093 | var val = definitions[actionName];
1094 | actions[actionName] = Reflux.createAction(val);
1095 | });
1096 | };
1097 |
1098 | return function (definitions) {
1099 | var actions = {};
1100 | if (definitions instanceof Array) {
1101 | definitions.forEach(function (val) {
1102 | if (_.isObject(val)) {
1103 | reducer(val, actions);
1104 | } else {
1105 | actions[val] = Reflux.createAction(val);
1106 | }
1107 | });
1108 | } else {
1109 | reducer(definitions, actions);
1110 | }
1111 | return actions;
1112 | };
1113 | })();
1114 |
1115 | /**
1116 | * Sets the eventmitter that Reflux uses
1117 | */
1118 | Reflux.setEventEmitter = function (ctx) {
1119 | Reflux.EventEmitter = _.EventEmitter = ctx;
1120 | };
1121 |
1122 | /**
1123 | * Sets the method used for deferring actions and stores
1124 | */
1125 | Reflux.nextTick = function (nextTick) {
1126 | _.nextTick = nextTick;
1127 | };
1128 |
1129 | Reflux.use = function (pluginCb) {
1130 | pluginCb(Reflux);
1131 | };
1132 |
1133 | /**
1134 | * Provides the set of created actions and stores for introspection
1135 | */
1136 | /*eslint-disable no-underscore-dangle*/
1137 | Reflux.__keep = require("./Keep");
1138 | /*eslint-enable no-underscore-dangle*/
1139 |
1140 | /**
1141 | * Warn if Function.prototype.bind not available
1142 | */
1143 | if (!Function.prototype.bind) {
1144 | console.error("Function.prototype.bind not available. " + "ES5 shim required. " + "https://github.com/spoike/refluxjs#es5");
1145 | }
1146 |
1147 | exports["default"] = Reflux;
1148 | module.exports = exports["default"];
1149 | },{"./ActionMethods":1,"./Keep":2,"./ListenerMethods":3,"./PublisherMethods":4,"./StoreMethods":5,"./createAction":7,"./createStore":8,"./joins":9,"./utils":11}]},{},[]);
1150 |
--------------------------------------------------------------------------------
/test/funk.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | funk tests
5 |
6 |
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 |
352 |
353 |
354 |
355 |
--------------------------------------------------------------------------------
/test/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | funk tests
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/test/some-actions.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
12 |
--------------------------------------------------------------------------------
/test/some-store.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
101 |
--------------------------------------------------------------------------------
/test/some-view.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
65 |
--------------------------------------------------------------------------------