diff --git a/.gitignore b/.gitignore index 855c269..f3a30ae 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,4 @@ timeline.xctimeline playground.xcworkspace .vscode/ +.DS_Store diff --git a/README.md b/README.md index 4090806..56607bc 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,5 @@ # Vimari - Keyboard Shortcuts extension for Safari -[![Actions Status](https://github.com/danielcompton/vimari/workflows/Node%20CI/badge.svg)](https://github.com/danielcompton/vimari/actions) - [![Download on the Mac App Store](assets/Download_on_the_Mac_App_Store_Badge_US.svg)](https://apps.apple.com/us/app/vimari/id1480933944?ls=1&mt=12) Vimari is a Safari extension that provides keyboard based navigation. diff --git a/Vimari Extension/Info.plist b/Vimari Extension/Info.plist index 99ef6fb..6abd427 100644 --- a/Vimari Extension/Info.plist +++ b/Vimari Extension/Info.plist @@ -30,6 +30,10 @@ $(PRODUCT_MODULE_NAME).SafariExtensionHandler SFSafariContentScript + + Script + vnotify.js + Script svim-scripts.js @@ -61,6 +65,10 @@ SFSafariStyleSheet + + Style Sheet + vnotify.css + Style Sheet injected.css diff --git a/Vimari Extension/css/injected.css b/Vimari Extension/css/injected.css index 3d20791..001d275 100644 --- a/Vimari Extension/css/injected.css +++ b/Vimari Extension/css/injected.css @@ -1,3 +1,4 @@ +/* vimium */ .vimiumReset { background: none; border: none; @@ -7,7 +8,7 @@ cursor: auto; display: inline; float: none; - font-family : "Helvetica Neue", "Helvetica", "Arial", sans-serif; + font-family: "Helvetica Neue", "Helvetica", "Arial", sans-serif; font-size: inherit; font-style: normal; font-variant: normal; @@ -81,7 +82,7 @@ div.internalVimiumHintMarker > .matchingCharacter { border: 1px solid #b3b3b3; border-bottom: none; border-radius: 4px 4px 0 0; - font-family: Lucida Grande, Arial, Sans; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif !important; /* One less than vimium's hint markers, so link hints can be shown e.g. for the panel's close button. */ z-index: 99999998; text-shadow: 0px 1px 2px #FFF; @@ -89,26 +90,25 @@ div.internalVimiumHintMarker > .matchingCharacter { opacity: 0; } -.vimiumHUD a, .vimiumHUD a:hover { +.vimiumHUD a, .vimiumHUD a: hover { background: transparent; color: blue; text-decoration: underline; } .vimiumHUD a.close-button { - float:right; - font-family:courier new; - font-weight:bold; - color:#9C9A9A; - text-decoration:none; - padding-left:10px; - margin-top:-1px; - font-size:14px; + float: right; + font-family: courier new; + font-weight: bold; + color: #9C9A9A; + text-decoration: none; + padding-left: 10px; + margin-top: -1px; + font-size: 14px; } -.vimiumHUD a.close-button:hover { - color:#333333; - cursor:default; - -webkit-user-select:none; +.vimiumHUD a.close-button: hover { + color: #333333; + cursor: default; + -webkit-user-select: none; } - diff --git a/Vimari Extension/css/vnotify.css b/Vimari Extension/css/vnotify.css new file mode 100644 index 0000000..aa6c29d --- /dev/null +++ b/Vimari Extension/css/vnotify.css @@ -0,0 +1,90 @@ +/* vNotify */ +.vnotify-container { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif !important; + font-size: 12px !important; + line-height: 1.5 !important; + position: fixed !important; } +/* + .vnotify-container.vn-top-right { + right: 10px !important; + top: 10px !important; } + .vnotify-container.vn-top-left { + top: 10px !important; + left: 10px !important; } +*/ + .vnotify-container.vn-bottom-right { + bottom: 10px !important; + right: 10px !important; } +/* + .vnotify-container.vn-bottom-left { + bottom: 10px !important; + left: 10px !important; } + .vnotify-container.vn-center { + top: 50% !important; + left: 50% !important; + transform: translate(-50%, -50%) !important; } + */ + .vnotify-container .vn-close { + position: absolute !important; + top: 5px !important; + right: 10px !important; + width: 15px !important; + height: 15px !important; + padding: 2px !important; + cursor: pointer !important; } + .vnotify-container .vn-close: before, .vnotify-container .vn-close: after { + content: '' !important; + position: absolute !important; + width: 100% !important; + top: 50% !important; + height: 2px !important; + background: #fff !important; } + .vnotify-container .vn-close: before { + -webkit-transform: rotate(45deg) !important; +/* -moz-transform: rotate(45deg) !important;*/ + transform: rotate(45deg) !important; } + .vnotify-container .vn-close: after { + -webkit-transform: rotate(-45deg) !important; +/* -moz-transform: rotate(-45deg) !important;*/ + transform: rotate(-45deg) !important; } + +.vnotify-item { + width: 8em !important; + padding: 7.5px !important; + position: relative !important; + -webkit-border-radius: 5px !important; +/* -moz-border-radius: 5px !important;*/ +/* -ms-border-radius: 5px !important;*/ + border-radius: 5px !important; + margin-bottom: 7.5px !important; + opacity: 0.5 !important; +/* -ms-filter: "progid: DXImageTransform.Microsoft.Alpha(Opacity=75)" !important;*/ + filter: alpha(opacity=50) !important; } + .vnotify-item: hover { + opacity: 1 !important; } + +.vnotify-title { + font-weight: bold !important; } + +.vnotify-notify { +background: #333 !important; +color: #fff !important; } + +/* +.vnotify-success { + background: #2ecc71 !important; + color: #fff !important; } + +.vnotify-error { + background: #e74c3c !important; + color: #fff !important; } + +.vnotify-warning { + background: #f39c12 !important; + color: #fff !important; } + + .vnotify-info { + background: #3498db !important; + color: #fff !important; } + +*/ diff --git a/Vimari Extension/js/injected.js b/Vimari Extension/js/injected.js index 79bb66e..bbb413e 100644 --- a/Vimari Extension/js/injected.js +++ b/Vimari Extension/js/injected.js @@ -19,71 +19,73 @@ */ var topWindow = (window.top === window), - settings = {}, - currentZoomLevel = 100, - linkHintCss = {}, - extensionActive = true, - insertMode = false, - shiftKeyToggle = false, - hudDuration = 5000, + settings = {}, + currentZoomLevel = 100, + linkHintCss = {}, + extensionActive = true, + insertMode = false, + shiftKeyToggle = false, +// hudDuration = 5000, extensionCommunicator = SafariExtensionCommunicator(messageHandler); var actionMap = { - 'hintToggle' : function() { - HUD.showForDuration('Open link in current tab', hudDuration); - activateLinkHintsMode(false, false); }, + 'hintToggle' : function() { + vNotify.notify({text: 'Current Tab', title:'Vimari', visibleDuration: 2000, showClose: false}); +// HUD.showForDuration('Open link in current tab', hudDuration); + activateLinkHintsMode(false, false); }, - 'newTabHintToggle' : function() { - HUD.showForDuration('Open link in new tab', hudDuration); - activateLinkHintsMode(true, false); }, + 'newTabHintToggle' : function() { + vNotify.notify({text: 'New Tab', title:'Vimari', visibleDuration: 2000, showClose: false}); +// HUD.showForDuration('Open link in new tab', hudDuration); + activateLinkHintsMode(true, false); }, - 'tabForward': + 'tabForward': function() { extensionCommunicator.requestTabForward(); }, - 'tabBack': + 'tabBack': function() { extensionCommunicator.requestTabBackward() }, - 'scrollDown': - function() { customScrollBy(0, settings.scrollSize); }, + 'scrollDown': + function() { customScrollBy(0, settings.scrollSize); }, - 'scrollUp': - function() { customScrollBy(0, -settings.scrollSize); }, + 'scrollUp': + function() { customScrollBy(0, -settings.scrollSize); }, - 'scrollLeft': - function() { customScrollBy(-settings.scrollSize, 0); }, + 'scrollLeft': + function() { customScrollBy(-settings.scrollSize, 0); }, - 'scrollRight': - function() { customScrollBy(settings.scrollSize, 0); }, + 'scrollRight': + function() { customScrollBy(settings.scrollSize, 0); }, - 'goBack': - function() { window.history.back(); }, + 'goBack': + function() { window.history.back(); }, - 'goForward': - function() { window.history.forward(); }, + 'goForward': + function() { window.history.forward(); }, - 'reload': - function() { window.location.reload(); }, + 'reload': + function() { window.location.reload(); }, - 'openTab': - function() { extensionCommunicator.requestNewTab(); }, + 'openTab': + function() { extensionCommunicator.requestNewTab(); }, - 'closeTab': - function() { extensionCommunicator.requestCloseTab(); }, + 'closeTab': + function() { extensionCommunicator.requestCloseTab(); }, - 'scrollDownHalfPage': - function() { customScrollBy(0, window.innerHeight / 2); }, + 'scrollDownHalfPage': + function() { customScrollBy(0, window.innerHeight / 2); }, - 'scrollUpHalfPage': - function() { customScrollBy(0, window.innerHeight / -2); }, + 'scrollUpHalfPage': + function() { customScrollBy(0, window.innerHeight / -2); }, - 'goToPageBottom': - function() { customScrollBy(0, document.body.scrollHeight); }, + 'goToPageBottom': + function() { customScrollBy(0, document.body.scrollHeight); }, - 'goToPageTop': - function() { customScrollBy(0, -document.body.scrollHeight); }, + 'goToPageTop': + function() { customScrollBy(0, -document.body.scrollHeight); }, - 'goToFirstInput': - function() { goToFirstInput(); } + 'goToFirstInput': + function() { goToFirstInput(); } }; // Inspiration and general algorithm taken from sVim. @@ -138,16 +140,16 @@ function goToFirstInput() { // Meant to be overridden, but still has to be copy/pasted from the original... Mousetrap.prototype.stopCallback = function(e, element, combo) { - // Escape key is special, no need to stop. Vimari-specific. - if (combo === 'esc' || combo === 'ctrl+[') { return false; } + // Escape key is special, no need to stop. Vimari-specific. + if (combo === 'esc' || combo === 'ctrl+[') { return false; } // Preserve the behavior of allowing ex. ctrl-j in an input if (settings.modifier) { return false; } - // if the element has the class "mousetrap" then no need to stop - if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) { - return false; - } + // if the element has the class "mousetrap" then no need to stop + if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) { + return false; + } var tagName = element.tagName; var contentIsEditable = (element.contentEditable && element.contentEditable === 'true'); @@ -162,67 +164,67 @@ function bindKeyCodesToActions(settings) { if (typeof settings != "undefined") { excludedUrl = isExcludedUrl(settings.excludedUrls, document.URL) } - // Only add if topWindow... not iframe + // Only add if topWindow... not iframe Mousetrap.reset(); - if (topWindow && !excludedUrl) { - Mousetrap.bind('esc', enterNormalMode); - Mousetrap.bind('ctrl+[', enterNormalMode); - Mousetrap.bind('i', enterInsertMode); - for (var actionName in actionMap) { - if (actionMap.hasOwnProperty(actionName)) { - var keyCode = getKeyCode(actionName); - Mousetrap.bind(keyCode, executeAction(actionName), 'keydown'); - } - } - } + if (topWindow && !excludedUrl) { + Mousetrap.bind('esc', enterNormalMode); + Mousetrap.bind('ctrl+[', enterNormalMode); + Mousetrap.bind('i', enterInsertMode); + for (var actionName in actionMap) { + if (actionMap.hasOwnProperty(actionName)) { + var keyCode = getKeyCode(actionName); + Mousetrap.bind(keyCode, executeAction(actionName), 'keydown'); + } + } + } } function enterNormalMode() { - // Clear input focus - document.activeElement.blur(); - - // Clear link hints (if any) - deactivateLinkHintsMode(); + // Clear input focus + document.activeElement.blur(); + // Clear link hints (if any) + deactivateLinkHintsMode(); if (insertMode === false) { return // We are already in normal mode. } - // Re-enable if in insert mode - insertMode = false; - HUD.showForDuration('Normal Mode', hudDuration); - - Mousetrap.bind('i', enterInsertMode); + // Re-enable if in insert mode + insertMode = false; + Mousetrap.bind('i', enterInsertMode); + var container = document.querySelectorAll('.vnotify-container'); + for (var i=0; i< container.length; i++) { + container[i].outerHTML = ''; + container[i] = null; + } + vNotify.notify({text: 'Normal Mode', title:'Vimari', visibleDuration: 500, showClose: false}); } // Calling it 'insert mode', but it's really just a user-triggered // off switch for the actions. function enterInsertMode() { - if (insertMode === true) { - return // We are already in insert mode. - } insertMode = true; - HUD.showForDuration('Insert Mode', hudDuration); - Mousetrap.unbind('i'); + Mousetrap.unbind('i'); + vNotify.notify({text: 'Insert Mode', title:'Vimari', visibleDuration: 500, showClose: false, sticky: true}); } function executeAction(actionName) { - return function() { - // don't do anything if we're not supposed to - if (linkHintsModeActivated || !extensionActive || insertMode) - return; + return function() { + // don't do anything if we're not supposed to + if (linkHintsModeActivated || !extensionActive || insertMode) + return; - //Call the action function - actionMap[actionName](); + //Call the action function + actionMap[actionName](); - // Tell mousetrap to stop propagation - return false; - } + // Tell mousetrap to stop propagation + return false; + } } function unbindKeyCodes() { - Mousetrap.reset(); + Mousetrap.reset(); document.removeEventListener("keydown", stopSitePropagation); } @@ -246,14 +248,14 @@ function isActiveElementEditable() { // Adds an optional modifier to the configured key code for the action function getKeyCode(actionName) { - var keyCode = ''; + var keyCode = ''; if (typeof settings != 'undefined') { if(settings.modifier) { keyCode += settings.modifier + '+'; } return keyCode + settings["bindings"][actionName]; } - return keyCode; + return keyCode; } @@ -263,7 +265,7 @@ function getKeyCode(actionName) { * css is pre loaded into the page. */ function addCssToPage(css) { - return; + return; } @@ -275,10 +277,10 @@ function addCssToPage(css) { * can be controlled via the keyboard, particularly SELECT combo boxes. */ function isEditable(target) { - if (target.getAttribute("contentEditable") === "true") - return true; - var focusableInputs = ["input", "textarea", "select", "button"]; - return focusableInputs.indexOf(target.tagName.toLowerCase()) >= 0; + if (target.getAttribute("contentEditable") === "true") + return true; + var focusableInputs = ["input", "textarea", "select", "button"]; + return focusableInputs.indexOf(target.tagName.toLowerCase()) >= 0; } @@ -303,8 +305,8 @@ function messageHandler(event){ * Callback to pass settings to injected script */ function setSettings(msg) { - settings = msg; - activateExtension(settings); + settings = msg; + activateExtension(settings); } function activateExtension(settings) { @@ -314,9 +316,9 @@ function activateExtension(settings) { } function isExcludedUrl(storedExcludedUrls, currentUrl) { - if (!storedExcludedUrls.length) { - return false; - } + if (!storedExcludedUrls.length) { + return false; + } var excludedUrls, regexp, url, formattedUrl, _i, _len; excludedUrls = storedExcludedUrls.split(","); diff --git a/Vimari Extension/js/lib/mousetrap.js b/Vimari Extension/js/lib/mousetrap.js index 941372a..35c741d 100644 --- a/Vimari Extension/js/lib/mousetrap.js +++ b/Vimari Extension/js/lib/mousetrap.js @@ -1,7 +1,8 @@ // Custom behaviour for Vimari implemented at line 185. Be aware of this // when upgrading mousetrap. -/*global define:false */ +/* global define:false */ + /** * Copyright 2012-2017 Craig Campbell * @@ -23,6 +24,7 @@ * @version 1.6.5 * @url craig.is/killing/mice */ + (function(window, document, undefined) { // Check if mousetrap is used inside browser, if not, return diff --git a/Vimari Extension/js/lib/vimium-scripts.js b/Vimari Extension/js/lib/vimium-scripts.js index 698725d..109ebcb 100644 --- a/Vimari Extension/js/lib/vimium-scripts.js +++ b/Vimari Extension/js/lib/vimium-scripts.js @@ -2,11 +2,11 @@ * Code in this file is taken directly from vimium */ - /* * A heads-up-display (HUD) for showing Vimium page operations. * Note: you cannot interact with the HUD until document.body is available. */ + HUD = { _tweenId: -1, _displayElement: null, diff --git a/Vimari Extension/js/lib/vnotify.js b/Vimari Extension/js/lib/vnotify.js new file mode 100644 index 0000000..598968d --- /dev/null +++ b/Vimari Extension/js/lib/vnotify.js @@ -0,0 +1,243 @@ +/* +* Code in this file is taken directly from [Vanilla-Notify](https://github.com/MLaritz/Vanilla-Notify) +*/ + +var vNotify = (function() { + + var positionOption = { + topLeft: 'topLeft', + topRight: 'topRight', + bottomLeft: 'bottomLeft', + bottomRight: 'bottomRight', + center: 'center' + }; + + var options = { + fadeInDuration: 1000, + fadeOutDuration: 1000, + fadeInterval: 50, + visibleDuration: 5000, + postHoverVisibleDuration: 500, + position: positionOption.bottomRight, + sticky: false, + showClose: true + }; + +// var info = function(params) { +// params.notifyClass = 'vnotify-info'; +// return addNotify(params); +// }; +// var success = function(params) { +// params.notifyClass = 'vnotify-success'; +// return addNotify(params); +// }; +// +// var error = function(params) { +// params.notifyClass = 'vnotify-error'; +// return addNotify(params); +// }; +// +// var warning = function(params) { +// params.notifyClass = 'vnotify-warning'; +// return addNotify(params); +// }; + + var notify = function(params) { + params.notifyClass = 'vnotify-notify'; + return addNotify(params); + }; + +// var custom = function(params) { +// return addNotify(params); +// }; + + var addNotify = function(params) { + if (!params.title && !params.text) { + return null; + } + + var frag = document.createDocumentFragment(); + + var item = document.createElement('div'); + item.classList.add('vnotify-item'); + item.classList.add(params.notifyClass); + item.style.opacity = 0; + + item.options = getOptions(params); + + if (params.title) { + item.appendChild(addTitle(params.title)); + } + if (params.text) { + item.appendChild(addText(params.text)); + } + if (item.options.showClose) { + item.appendChild(addClose(item)); + } + + item.visibleDuration = item.options.visibleDuration; //option + + var hideNotify = function() { + item.fadeInterval = fade('out', item.options.fadeOutDuration, item); + }; + + var resetInterval = function() { + clearTimeout(item.interval); + clearTimeout(item.fadeInterval); + item.style.opacity = null; + item.visibleDuration = item.options.postHoverVisibleDuration; + }; + + var hideTimeout = function () { + item.interval = setTimeout(hideNotify, item.visibleDuration); + }; + + frag.appendChild(item); + var container = getNotifyContainer(item.options.position); + container.appendChild(frag); + + item.addEventListener("mouseover", resetInterval); + + fade('in', item.options.fadeInDuration, item); + + if (!item.options.sticky){ + item.addEventListener("mouseout", hideTimeout); + hideTimeout(); + } + + return item; + }; + + var addText = function(text) { + var item = document.createElement('div'); + item.classList.add('vnotify-text'); + item.innerHTML = text; + return item; + }; + + var addTitle = function(title) { + var item = document.createElement('div'); + item.classList.add('vnotify-title'); + item.innerHTML = title; + return item; + }; + + var addClose = function(parent) { + var item = document.createElement('span'); + item.classList.add('vn-close'); + item.addEventListener('click', function(){remove(parent);}); + return item; + }; + + var getNotifyContainer = function(position) { + var positionClass = getPositionClass(position); + var container = document.querySelector('.' + positionClass); + return container ? container : createNotifyContainer(positionClass); + }; + + var createNotifyContainer = function(positionClass) { + var frag = document.createDocumentFragment(); + container = document.createElement('div'); + container.classList.add('vnotify-container'); + container.classList.add(positionClass); + container.setAttribute('role', 'alert'); + + frag.appendChild(container); + document.body.appendChild(frag); + + return container; + }; + + var getPositionClass = function(option) { + switch (option) { + case positionOption.topLeft: + return 'vn-top-left'; + case positionOption.bottomRight: + return 'vn-bottom-right'; + case positionOption.bottomLeft: + return 'vn-bottom-left'; + case positionOption.center: + return 'vn-center'; + default: + return 'vn-top-right'; + } + }; + + var getOptions = function(opts) { + return { + fadeInDuration: opts.fadeInDuration || options.fadeInDuration, + fadeOutDuration: opts.fadeOutDuration || options.fadeOutDuration, + fadeInterval: opts.fadeInterval || options.fadeInterval, + visibleDuration: opts.visibleDuration || options.visibleDuration, + postHoverVisibleDuration: opts.postHoverVisibleDuration || options.postHoverVisibleDuration, + position: opts.position || options.position, + sticky: opts.sticky != null ? opts.sticky : options.sticky, + showClose: opts.showClose != null ? opts.showClose : options.showClose + }; + }; + + var remove = function(item) { + item.style.display = 'none'; + item.outerHTML = ''; + item = null; + }; + + // New fade - based on http://toddmotto.com/raw-javascript-jquery-style-fadein-fadeout-functions-hugo-giraudel/ + var fade = function(type, ms, el) { + var isIn = type === 'in', + opacity = isIn ? 0 : el.style.opacity || 1, + goal = isIn ? 0.8 : 0, + gap = options.fadeInterval / ms; + + if(isIn) { + el.style.display = 'block'; + el.style.opacity = opacity; + } + + function func() { + opacity = isIn ? opacity + gap : opacity - gap; + el.style.opacity = opacity; + + if(opacity <= 0) { + remove(el); + checkRemoveContainer(); + } + if((!isIn && opacity <= goal) || (isIn && opacity >= goal)) { + window.clearInterval(fading); + } + } + + var fading = window.setInterval(func, options.fadeInterval); + return fading; + }; + + var checkRemoveContainer = function() { + var item = document.querySelector('.vnotify-item'); + if (!item) { + var container = document.querySelectorAll('.vnotify-container'); + for (var i=0; i< container.length; i++) { + container[i].outerHTML = ''; + container[i] = null; + } + } + }; + + return { +// info: info, +// success: success, +// error: error, +// warning: warning, +// custom: custom, + notify: notify, + options: options, + positionOption: positionOption + }; +})(); + +// expose vNotify to the global object +window.vNotify = vNotify; + +// expose as a common js module +if (typeof module !== 'undefined' && module.exports) { + module.exports = vNotify; +}; diff --git a/Vimari Extension/json/defaultSettings.json b/Vimari Extension/json/defaultSettings.json index ef40a12..a979c90 100644 --- a/Vimari Extension/json/defaultSettings.json +++ b/Vimari Extension/json/defaultSettings.json @@ -1,5 +1,6 @@ { "excludedUrls": "", + "insertModeUrls": "", "linkHintCharacters": "asdfjklqwerzxc", "detectByCursorStyle": false, "scrollSize": 50, diff --git a/Vimari.xcodeproj/project.pbxproj b/Vimari.xcodeproj/project.pbxproj index df4b5cd..d245bdd 100644 --- a/Vimari.xcodeproj/project.pbxproj +++ b/Vimari.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + 4C15F22C24E4441C009DC451 /* vnotify.css in Resources */ = {isa = PBXBuildFile; fileRef = 4C15F22B24E4441C009DC451 /* vnotify.css */; }; + 4C9DFE0C24E37A60002B9455 /* vnotify.js in Resources */ = {isa = PBXBuildFile; fileRef = 4C9DFE0B24E37A60002B9455 /* vnotify.js */; }; 659033F124E2B77400432D0E /* svim-scripts.js in Resources */ = {isa = PBXBuildFile; fileRef = 659033F024E2B77400432D0E /* svim-scripts.js */; }; 65E444F324CC3A1B008EA1DC /* SafariExtensionCommunicator.js in Resources */ = {isa = PBXBuildFile; fileRef = 65E444F224CC3A1B008EA1DC /* SafariExtensionCommunicator.js */; }; B1E3C17023A65ED400A56807 /* ConfigurationModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1E3C16F23A65ED400A56807 /* ConfigurationModel.swift */; }; @@ -58,6 +60,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 4C15F22B24E4441C009DC451 /* vnotify.css */ = {isa = PBXFileReference; lastKnownFileType = text.css; path = vnotify.css; sourceTree = ""; }; + 4C9DFE0B24E37A60002B9455 /* vnotify.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = vnotify.js; sourceTree = ""; }; 659033F024E2B77400432D0E /* svim-scripts.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "svim-scripts.js"; sourceTree = ""; }; 65E444F224CC3A1B008EA1DC /* SafariExtensionCommunicator.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; path = SafariExtensionCommunicator.js; sourceTree = ""; }; B1E3C16F23A65ED400A56807 /* ConfigurationModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConfigurationModel.swift; sourceTree = ""; }; @@ -193,6 +197,7 @@ 659033F024E2B77400432D0E /* svim-scripts.js */, E380F27E233183EE00640547 /* mousetrap.js */, E380F27F233183EE00640547 /* vimium-scripts.js */, + 4C9DFE0B24E37A60002B9455 /* vnotify.js */, ); path = lib; sourceTree = ""; @@ -201,6 +206,7 @@ isa = PBXGroup; children = ( E380F282233183EE00640547 /* injected.css */, + 4C15F22B24E4441C009DC451 /* vnotify.css */, ); path = css; sourceTree = ""; @@ -298,6 +304,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 4C9DFE0C24E37A60002B9455 /* vnotify.js in Resources */, E380F26C2331806500640547 /* ToolbarItemIcon.pdf in Resources */, B1FD3B9923A588DE00677A52 /* defaultSettings.json in Resources */, 659033F124E2B77400432D0E /* svim-scripts.js in Resources */, @@ -305,6 +312,7 @@ E380F28B233183EF00640547 /* injected.css in Resources */, E380F285233183EF00640547 /* injected.js in Resources */, E380F287233183EF00640547 /* keyboard-utils.js in Resources */, + 4C15F22C24E4441C009DC451 /* vnotify.css in Resources */, E380F289233183EF00640547 /* vimium-scripts.js in Resources */, E380F2672331806500640547 /* SafariExtensionViewController.xib in Resources */, E380F286233183EF00640547 /* mocks.js in Resources */, @@ -485,7 +493,7 @@ CODE_SIGN_ENTITLEMENTS = "Vimari Extension/Vimari_Extension.entitlements"; CODE_SIGN_IDENTITY = "Mac Developer"; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = Y48UDGWSSQ; + DEVELOPMENT_TEAM = 98QL363Q8S; ENABLE_HARDENED_RUNTIME = YES; INFOPLIST_FILE = "Vimari Extension/Info.plist"; LD_RUNPATH_SEARCH_PATHS = ( @@ -508,7 +516,7 @@ CODE_SIGN_ENTITLEMENTS = "Vimari Extension/Vimari_Extension.entitlements"; CODE_SIGN_IDENTITY = "Mac Developer"; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = Y48UDGWSSQ; + DEVELOPMENT_TEAM = 98QL363Q8S; ENABLE_HARDENED_RUNTIME = YES; INFOPLIST_FILE = "Vimari Extension/Info.plist"; LD_RUNPATH_SEARCH_PATHS = (