1
0
Fork 0

No longer using deps straight from node_modules

This commit is contained in:
sharpshark28 2016-07-29 23:41:24 -05:00
parent 1f17d344fa
commit 020661d4d5
5 changed files with 400 additions and 3 deletions

7
dist/clipboard.min.js vendored Normal file

File diff suppressed because one or more lines are too long

4
dist/jquery.min.js vendored Normal file

File diff suppressed because one or more lines are too long

385
dist/monkberry.js vendored Normal file
View file

@ -0,0 +1,385 @@
/** _ _
* /\/\ ___ _ __ | | _| |__ ___ _ __ _ __ _ _
* / \ / _ \| '_ \| |/ / '_ \ / _ \ '__| '__| | | |
* / /\/\ \ (_) | | | | <| |_) | __/ | | | | |_| |
* \/ \/\___/|_| |_|_|\_\_.__/ \___|_| |_| \__, |
* |___/
*
* +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
* Enter -> | | | | | |
* + + + +---+ +---+---+ +---+---+ + + +---+ + +---+ + + +
* | | | | | | | | | | |
* +---+---+---+---+---+ +---+---+---+---+ +---+---+ +---+ + +---+---+ +
* | | | | | | | | | |
* + + + +---+---+---+ + + +---+---+ + +---+ + +---+---+ + +
* | | | | | | | | | | |
* + +---+---+ +---+ + + +---+ + +---+---+---+---+---+ + + +---+
* | | | | | | | | | | | | | |
* + +---+ +---+ +---+---+---+ + + + + + + + +---+---+ + +
* | | | | | | | | | | | | |
* +---+---+---+ +---+ + + + +---+---+---+ +---+ +---+---+ + + +
* | | | | | | | | | | |
* + + + +---+---+---+ +---+ + + + +---+ +---+---+ +---+---+ +
* | | | | | | | | | | | | |
* + + +---+---+ +---+---+---+ +---+ +---+ + + + + + +---+ +
* | | | | | | | | | |
* +---+---+ + + +---+---+---+---+ +---+ +---+ + +---+---+ + +---+
* | | | | | | -> Exit
* +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
*/
(function (document) {
/**
* Monkberry
* @class
*/
function Monkberry() {
this.parent = null;
this.nested = [];
this.nodes = [];
this.filters = null;
this.directives = null;
this.context = null;
this.unbind = null;
this.onRender = null;
this.onUpdate = null;
this.onRemove = null;
}
/**
* Render template and attach it to node.
* @param {Monkberry} template
* @param {Element} node
* @param {Object=} options
* @return {Monkberry}
*/
Monkberry.render = function (template, node, options) {
var view;
if (options && options.noCache) {
view = new template();
} else {
view = template.pool.pop() || new template();
}
if (node.nodeType == 8) {
view.insertBefore(node);
} else {
view.appendTo(node);
}
if (options) {
if (options.parent) {
view.parent = options.parent;
}
if (options.context) {
view.context = options.context;
}
if (options.filters) {
view.filters = options.filters;
}
if (options.directives) {
view.directives = options.directives;
}
}
if (view.onRender) {
view.onRender();
}
return view;
};
/**
* Prerepder template for future usage.
* @param {Monkberry} template - Template name.
* @param {Number} times - Times of prerender.
*/
Monkberry.prerender = function (template, times) {
while (times--) {
template.pool.push(new template());
}
};
/**
* Main loops processor.
*/
Monkberry.loop = function (parent, node, map, template, array, options) {
var i, j, len, keys, transform, arrayLength, childrenSize = map.length;
// Get array length, and convert object to array if needed.
if (Array.isArray(array)) {
transform = transformArray;
arrayLength = array.length;
} else {
transform = transformObject;
keys = Object.keys(array);
arrayLength = keys.length;
}
// If new array contains less items what before, remove surpluses.
len = childrenSize - arrayLength;
for (i in map.items) {
if (len-- > 0) {
map.items[i].remove();
} else {
break;
}
}
// If there is already some views, update there loop state.
j = 0;
for (i in map.items) {
map.items[i].__state__ = transform(array, keys, j, options);
j++;
}
// If new array contains more items when previous, render new views and append them.
for (j = childrenSize, len = arrayLength; j < len; j++) {
// Render new view.
var view = Monkberry.render(template, node, {parent: parent, context: parent.context, filters: parent.filters, directives: parent.directives});
// Set view hierarchy.
parent.nested.push(view);
// Remember to remove from children map on view remove.
i = map.push(view);
view.unbind = (function (i) {
return function () {
map.remove(i);
};
})(i);
// Set view state for later update in onUpdate.
view.__state__ = transform(array, keys, j, options);
}
};
/**
* Main if processor.
*/
Monkberry.cond = function (parent, node, child/*.ref*/, template, test) {
if (child.ref) { // If view was already inserted, update or remove it.
if (!test) {
child.ref.remove();
}
} else if (test) {
// Render new view.
var view = Monkberry.render(template, node, {parent: parent, context: parent.context, filters: parent.filters, directives: parent.directives});
// Set view hierarchy.
parent.nested.push(view);
// Remember to remove child ref on remove of view.
child.ref = view;
view.unbind = function () {
child.ref = null;
};
}
return test;
};
/**
* Main custom tags processor.
*/
Monkberry.insert = function (parent, node, child/*.ref*/, template, data) {
if (child.ref) { // If view was already inserted, update or remove it.
child.ref.update(data);
} else {
// Render new view.
var view = Monkberry.render(template, node, {parent: parent, context: parent.context, filters: parent.filters, directives: parent.directives});
// Set view hierarchy.
parent.nested.push(view);
// Remember to remove child ref on remove of view.
child.ref = view;
view.unbind = function () {
child.ref = null;
};
// Set view data (note what it must be after adding nodes to DOM).
view.update(data);
}
};
/**
* Remove view from DOM.
*/
Monkberry.prototype.remove = function () {
// Remove appended nodes.
var i = this.nodes.length;
while (i--) {
this.nodes[i].parentNode.removeChild(this.nodes[i]);
}
// Remove self from parent's children map or child ref.
if (this.unbind) {
this.unbind();
}
// Remove all nested views.
i = this.nested.length;
while (i--) {
this.nested[i].remove();
}
// Remove this view from parent's nested views.
if (this.parent) {
i = this.parent.nested.indexOf(this);
this.parent.nested.splice(i, 1);
this.parent = null;
}
// Call on remove callback.
if (this.onRemove) {
this.onRemove();
}
// Store view in pool for reuse in future.
this.constructor.pool.push(this);
};
/**
* @param {Element} toNode
*/
Monkberry.prototype.appendTo = function (toNode) {
for (var i = 0, len = this.nodes.length; i < len; i++) {
toNode.appendChild(this.nodes[i]);
}
};
/**
* @param {Element} toNode
*/
Monkberry.prototype.insertBefore = function (toNode) {
if (toNode.parentNode) {
for (var i = 0, len = this.nodes.length; i < len; i++) {
toNode.parentNode.insertBefore(this.nodes[i], toNode);
}
} else {
throw new Error(
"Can not insert child view into parent node. " +
"You need append your view first and then update."
);
}
};
/**
* Return rendered node, or DocumentFragment of rendered nodes if more then one root node in template.
* @returns {Element|DocumentFragment}
*/
Monkberry.prototype.createDocument = function () {
if (this.nodes.length == 1) {
return this.nodes[0];
} else {
var fragment = document.createDocumentFragment();
for (var i = 0, len = this.nodes.length; i < len; i++) {
fragment.appendChild(this.nodes[i]);
}
return fragment;
}
};
/**
* @param {string} query
* @returns {Element}
*/
Monkberry.prototype.querySelector = function (query) {
for (var i = 0; i < this.nodes.length; i++) {
if (this.nodes[i].matches && this.nodes[i].matches(query)) {
return this.nodes[i];
}
if (this.nodes[i].nodeType === 8) {
throw new Error('Can not use querySelector with non-element nodes on first level.');
}
if (this.nodes[i].querySelector) {
var element = this.nodes[i].querySelector(query);
if (element) {
return element;
}
}
}
return null;
};
/**
* Simple Map implementation with length property.
*/
function Map() {
this.items = Object.create(null);
this.length = 0;
this.next = 0;
}
Map.prototype.push = function (element) {
this.items[this.next] = element;
this.length += 1;
this.next += 1;
return this.next - 1;
};
Map.prototype.remove = function (i) {
if (i in this.items) {
delete this.items[i];
this.length -= 1;
} else {
throw new Error('You are trying to delete not existing element "' + i + '" form map.');
}
};
Map.prototype.forEach = function (callback) {
for (var i in this.items) {
callback(this.items[i]);
}
};
Monkberry.Map = Map;
//
// Helper function for working with foreach loops data.
// Will transform data for "key, value of array" constructions.
//
function transformArray(array, keys, i, options) {
if (options) {
var t = {__index__: i};
t[options.value] = array[i];
if (options.key) {
t[options.key] = i;
}
return t;
} else {
return array[i];
}
}
function transformObject(array, keys, i, options) {
if (options) {
var t = {__index__: i};
t[options.value] = array[keys[i]];
if (options.key) {
t[options.key] = keys[i];
}
return t;
} else {
return array[keys[i]];
}
}
if (typeof module !== 'undefined') {
module.exports = Monkberry;
} else {
window.Monkberry = Monkberry;
}
})(window.document);

View file

@ -72,9 +72,9 @@
</div>
<script src="https://code.getmdl.io/1.1.3/material.min.js"></script>
<script src="./node_modules/jquery/dist/jquery.min.js"></script>
<script src="./node_modules/monkberry/monkberry.js"></script>
<script src="./node_modules/clipboard/dist/clipboard.min.js"></script>
<script src="./dist/jquery.min.js"></script>
<script src="./dist/monkberry.js"></script>
<script src="./dist/clipboard.min.js"></script>
<script src="./dist/view.js"></script>
<script src="./dist/app.js"></script>
</body>

View file

@ -7,6 +7,7 @@
"views": "views/*.monk"
},
"scripts": {
"postinstall": "cp ./node_modules/clipboard/dist/clipboard.min.js ./dist && cp ./node_modules/jquery/dist/jquery.min.js ./dist && cp ./node_modules/monkberry/monkberry.js ./dist",
"views": "monkberry src/views/*.monk --source-map --output dist/view.js",
"js": "babel src/app.js --out-file dist/app.js",
"develop": "nodemon --watch src -e monk,js --exec 'npm run views && npm run js'"