
Security News
/Research
Wallet-Draining npm Package Impersonates Nodemailer to Hijack Crypto Transactions
Malicious npm package impersonates Nodemailer and drains wallets by hijacking crypto transactions across multiple blockchains.
scaife-skeleton
Advanced tools
front-end layout library for Scaife readers
This repository is part of the Scaife Viewer project, an open-source ecosystem for building rich online reading environments.
This is the foundation for any Scaife reader. It consists of two main skeleton types, FixedSkeleton
and EditableSkeleton
.
FixedSkeleton
case, you the site developer, pre-determine and decide what widgets will belong to the
layout.EditableSkeleton
, you, as the site developer, only provide the options of possible widgets and the user of the reader selects the layout at runtime.yarn add scaife-skeleton
or
npm install scaife-skeleton
Your project must be using Vuex even if your reader doesn't require a store directly since the skeleton uses it.
After installation, you'll first want to hook up the store:
In your store.js
(or wherever you are setting up your store):
import Vue from 'vue';
import Vuex from 'vuex';
import createStore from 'scaife-skeleton';
Vue.use(Vuex);
const skeletonStore = createStore();
export default new Vuex.Store({
modules: {
[skeletonStore.namespace]: skeletonStore.store,
},
});
FixedSkeleton
The use of the skeleton components is intended to be within components that are full screen, perhaps in one that has a navbar at top. Often this means a top level App.vue
component.
<template>
<div id="app">
<FixedSkeleton
:main-widget="mainWidget"
:left-widgets="leftWidgets"
:right-widgets="rightWidgets"
/>
</div>
</template>
<script>
// import widgets that you want in your project
import TextSelectionWidget from './morphgnt/widgets/TextSelectionWidget.vue';
import AnalysisWidget from './morphgnt/widgets/AnalysisWidget.vue';
import ReaderWidget from './morphgnt/widgets/ReaderWidget.vue';
import TocWidget from './morphgnt/widgets/TocWidget.vue';
import TextSizeWidget from './reader/widgets/TextSizeWidget.vue';
import TextWidthWidget from './reader/widgets/TextWidthWidget.vue';
export default {
name: 'app',
components: {
FixedSkeleton,
},
computed: {
mainWidget() {
return ReaderWidget;
},
leftWidgets() {
return [
TextSelectionWidget,
TocWidget,
];
},
rightWidgets() {
return [
TextSizeWidget,
TextWidthWidget,
AnalysisWidget,
];
},
}
</script>
EditableSkeleton
For editable skeletons, the process is a bit different. Your top level component is really simple:
<template>
<EditableSkeleton />
</template>
To tell scaife-skeleton
about the available widgets, you pass in a list at Vue startup time in your main.js
file:
import Vue from 'vue';
import SkeletonPlugin from 'scaife-skeleton';
import App from './App.vue';
import store from './store';
import router from './router';
import widgets from './widgets';
Vue.config.productionTip = false;
Vue.use(SkeletonPlugin, { widgets });
new Vue({
store,
router,
render: h => h(App),
}).$mount('#app');
Where your widgets.js
file looks like something like:
import ReaderWidget from './reader/ReaderWidget.vue';
import TextSizeWidget from './text-size/TextSizeWidget.vue';
import TextWidthWidget from './text-width/TextWidthWidget.vue';
import BookInfoWidget from './morphgnt/BookInfoWidget.vue';
import BookSelectWidget from './morphgnt/BookSelectWidget.vue';
import InterlinearWidget from './morphgnt/InterlinearWidget.vue';
import PassageWidget from './morphgnt/PassageWidget.vue';
import SelectablePassageWidget from './morphgnt/SelectablePassageWidget.vue';
const widgets = [
ReaderWidget,
TextSizeWidget,
TextWidthWidget,
BookInfoWidget,
BookSelectWidget,
InterlinearWidget,
PassageWidget,
SelectablePassageWidget,
];
export default widgets;
You can provide your own icons by passing in an iconMap
option when adding the plugin:
import { faAddressBook } from '@fortawesome/free-solid-svg-icons/faAddressBook';
const iconMap = [ faAddressBook ].reduce((map, obj) => {
map[obj.iconName] = obj;
return map;
}, {});
Vue.use(SkeletonPlugin, { widgets, iconMap });
Then you can use the globally installed <Icon>
component in your widget:
<Icon name="address-book" />
This repo has a series of demos to facilitate the development of scaife-skeleton
.
yarn run serve
or
npm run serve
yarn run lint
yarn run test
or
npm run lint
npm run test
yarn run prettier:check
yarn run prettier:fix
or
npm run prettier:check
npm run prettier:fix
yarn run package
or
npm run package
FAQs
Quickly build Scaife reading environments
The npm package scaife-skeleton receives a total of 0 weekly downloads. As such, scaife-skeleton popularity was classified as not popular.
We found that scaife-skeleton demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
/Research
Malicious npm package impersonates Nodemailer and drains wallets by hijacking crypto transactions across multiple blockchains.
Security News
This episode explores the hard problem of reachability analysis, from static analysis limits to handling dynamic languages and massive dependency trees.
Security News
/Research
Malicious Nx npm versions stole secrets and wallet info using AI CLI tools; Socket’s AI scanner detected the supply chain attack and flagged the malware.