Skip to content

Instantly share code, notes, and snippets.

View smolinari's full-sized avatar
😜
What the heck do you think my status is?

Scott smolinari

😜
What the heck do you think my status is?
View GitHub Profile
@smolinari
smolinari / db.js
Created April 29, 2020 11:34
The services/db.js file for the Quasar todo browser extension demo
export default {
/**
* This will ask for ALL items from chrome storage and return only the ones we're interested in.
* @param type
*/
getAll (type) {
return this.get(null).then(allItems => {
return allItems.filter(f => f && f.type && f.type === type)
})
@smolinari
smolinari / content-hooks.js
Created April 28, 2020 12:11
The Quasar Todo example browser extension content hook file.
const
iFrame = document.createElement('iframe'),
defaultFrameHeight = '0px',
defaultFrameWidth = '0px'
/**
* Set the height of our iFrame housing our BEX
* @param height
*/
const setIFrameDimensions = (height, width) => {
@smolinari
smolinari / background-hooks.js
Created April 28, 2020 11:52
The Quasar Todo example browser extension background hook file.
export default function attachBackgroundHooks (bridge, allActiveConnections) {
bridge.on('storage.get', event => {
const payload = event.data
if (payload.key === null) {
chrome.storage.local.get(null, r => {
const result = []
// Group the items up into an array to take advantage of the bridge's chunk splitting.
for (const itemKey in r) {
result.push(r[itemKey])
@smolinari
smolinari / manifest.json
Created April 27, 2020 08:27
Quasar to-do app browser extension example
{
"name": "quasar-todo-extension",
"description": "A Quasar web browser extension for bookmarking and adding todos.",
"version": "1.0.0",
"manifest_version": 2,
"icons": {
"16": "icons/icon16x16.png",
"48": "icons/icon48x48.png",
"128": "icons/icon128x128.png"
},
<template>
...
</template>
<script>
...
methods: {
updateCache (store, { data: { toggleTodo } }) {
const id = `TodoItem:${this.id}`
const fragment = queries.toggleTodoFragment
<template>
<ApolloMutation
:mutation="mutation"
:update="updateCache"
>
<template v-slot="{ mutate, loading, error }">
<q-checkbox
v-model="todoToggle"
@input="mutate"
/>
<template>
<div>
<q-checkbox
v-model="todoToggle"
@input="setToggle"
/>
<p v-if="error">There has been an error<br>{{error}}</p>
</div>
</template>
<script>
<template>
<ApolloQuery
:query="gql => gql`
query GetTodos {
todos @client {
id
text
completed
}
}
<template>
<div style="width: 300px">
<q-list bordered separator v-if="todos.length">
<q-item v-for="todo in visibleTodos" :key="todo.id">
<Todo :todo="todo" />
</q-item>
</q-list>
<p v-else class="text-center"> Add some tasks and let's get some work done! </p>
</div>
</template>
<template>
<div class="q-pa-sm text-center">
<q-btn
color="primary"
v-for="(filter, index) in filters"
:flat="!filter.active"
:key="index"
@click="setFilter(filter.name)"
>
{{ filter.label }}