Initial commit

This commit is contained in:
zhongjin
2020-06-15 10:58:47 +08:00
commit 4f1dfe7564
8590 changed files with 1516878 additions and 0 deletions
@@ -0,0 +1,11 @@
export function getAssetsBaseUrl () {
const data = window.CartoConfig.data;
const dataAssetsHost = data.asset_host && data.asset_host + '/assets';
const assetsBaseUrl =
window.StaticConfig.assetsBaseUrl ||
dataAssetsHost ||
data.config.app_assets_base_url;
return assetsBaseUrl + '/';
}
@@ -0,0 +1,11 @@
const countCharsArray = function countCharsArray (array, joinString = '') {
if (!array || array.length === 0) {
return 0;
}
if (!joinString) {
joinString = '';
}
return array.join(joinString).length;
};
export default countCharsArray;
@@ -0,0 +1,23 @@
// Copied from https://stackoverflow.com/questions/38345937/object-assign-vs-extend/42740894#42740894
function isObject (item) {
return (item && typeof item === 'object' && !Array.isArray(item));
}
export default function deepObjectExtend (target, ...sources) {
if (!sources.length) return target;
const source = sources.shift();
if (isObject(target) && isObject(source)) {
for (const key in source) {
if (isObject(source[key])) {
if (!target[key]) Object.assign(target, { [key]: {} });
deepObjectExtend(target[key], source[key]);
} else {
Object.assign(target, { [key]: source[key] });
}
}
}
return deepObjectExtend(target, ...sources);
}
@@ -0,0 +1,16 @@
export function importFilesFrom (folderContext, patternNameRegex) {
const components = {};
folderContext.keys().forEach(filename => {
const name = stripTokenFromString(filename, patternNameRegex);
const component = folderContext(filename);
components[name] = component.default;
});
return components;
}
function stripTokenFromString (string, patternNameRegex) {
const results = patternNameRegex.exec(string);
return results[1];
}
@@ -0,0 +1,15 @@
export function humanFileSize (size) {
if (size === 0) {
return '0 B';
}
const i = Math.floor(Math.log(size) / Math.log(1024));
return `${(size / Math.pow(1024, i)).toFixed(2) * 1} ${['B', 'kB', 'MB', 'GB', 'TB'][i]}`;
}
export function numberFormatter (size) {
if (size < 1000) {
return size;
}
const i = Math.floor(Math.log(size) / Math.log(1000));
return `${(size / Math.pow(1000, i)).toFixed(2) * 1}${['k', 'M', 'G'][i - 1]}`;
}
@@ -0,0 +1,7 @@
import replaceAll from './replace-all';
const getCSSModifier = function getCSSModifier (option) {
return replaceAll(option, ' ', '-').toLowerCase();
};
export default getCSSModifier;
@@ -0,0 +1,23 @@
export default function storageAvailable (type) {
try {
var storage = window[type];
var x = '__storage_test__';
storage.setItem(x, x);
storage.removeItem(x);
return true;
} catch (e) {
return e instanceof DOMException && (
// everything except Firefox
e.code === 22 ||
// Firefox
e.code === 1014 ||
// test name field too, because code might not be present
// everything except Firefox
e.name === 'QuotaExceededError' ||
// Firefox
e.name === 'NS_ERROR_DOM_QUOTA_REACHED') &&
// acknowledge QuotaExceededError only if there's something already stored
storage.length !== 0;
}
}
@@ -0,0 +1,3 @@
export default function removeElementsFromArray (array, elementsToRemove) {
return array.filter(item => !elementsToRemove.includes(item));
}
@@ -0,0 +1,5 @@
const replaceAll = function replaceAll (str, find, replace) {
return str.replace(new RegExp(find, 'g'), replace);
};
export default replaceAll;
@@ -0,0 +1,13 @@
import store from '../store';
export default function sendCustomEvent (eventName, params) {
const tagManagerId = store.state.config.google_tag_manager_id;
if (tagManagerId) {
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'event': eventName,
...params
});
}
}
@@ -0,0 +1,28 @@
import removeElementsFromArray from './remove-items-from-array';
export function shiftClick (items, selectedItems, currentClickedItem, singleSelectedItem) {
// Get indexes from items
const lastSelectedItemIndex = items.findIndex(item => item.id === selectedItems[selectedItems.length - 1].id);
const currentClickedItemIndex = items.indexOf(currentClickedItem);
const singleSelectedItemIndex = items.findIndex(item => item.id === singleSelectedItem.id);
// Calculate items to select
const currentSelectedRangeStart = Math.min(singleSelectedItemIndex, currentClickedItemIndex);
const itemsToSelect = Math.abs(singleSelectedItemIndex - currentClickedItemIndex) + 1;
const nextSelectedItems = items.slice(currentSelectedRangeStart, currentSelectedRangeStart + itemsToSelect);
// If the selection is upwards, reverse selected items so that the delete range is correct
if (currentClickedItemIndex < singleSelectedItemIndex) {
nextSelectedItems.reverse();
}
// Calculate items to delete
const previousSelectedRangeStart = Math.min(lastSelectedItemIndex, currentClickedItemIndex);
const itemsToDelete = Math.abs(lastSelectedItemIndex - currentClickedItemIndex) + 1;
const previousSelectedRange = items.slice(previousSelectedRangeStart, previousSelectedRangeStart + itemsToDelete);
// Delete previous items from array and add the new ones
selectedItems = removeElementsFromArray(selectedItems, previousSelectedRange);
const currentSelectedItems = selectedItems.concat(nextSelectedItems);
return Array.from(new Set(currentSelectedItems));
}
@@ -0,0 +1,8 @@
const toObject = function toObject (array, property) {
return array.reduce((finalObject, currentElement) => {
finalObject[currentElement[property]] = currentElement;
return finalObject;
}, {});
};
export default toObject;