@@ -10,6 +10,7 @@ var version = (function () {
1010var bkg = chrome . extension . getBackgroundPage ( ) ;
1111var error = false ;
1212var oldglobalstate = false ;
13+ var settingnames = [ ] ;
1314document . addEventListener ( 'DOMContentLoaded' , function ( ) {
1415 $ ( "#tabs" ) . tabs ( ) ;
1516 $ ( "#o1" ) . slider ( { min : 0 , max : 1 , step : 0.05 , slide : function ( event , ui ) { $ ( "#opacity1" ) . val ( ui . value ) ; opacitytest ( ) ; } , stop : function ( event , ui ) {
@@ -36,7 +37,7 @@ document.addEventListener('DOMContentLoaded', function () {
3637 }
3738 } ) ;
3839 $ ( "#enable, #enableToggle, #enableStickiness, #disableFavicons, #hidePageTitles, #showUnderline, #collapseimage, #removeBold, #showContext, #showIcon, #showUpdateNotifications" ) . click ( saveOptions ) ;
39- $ ( "#iconTitle" ) . blur ( saveOptions ) ;
40+ $ ( "#iconTitle, #customcss " ) . blur ( saveOptions ) ;
4041 $ ( "#s_bg, #s_text, #s_link, #s_table" ) . keyup ( updateDemo ) ;
4142 $ ( "#global" ) . click ( function ( ) {
4243 saveOptions ( ) ;
@@ -92,6 +93,9 @@ document.addEventListener('DOMContentLoaded', function () {
9293 $ ( "#s_preset" ) . change ( function ( ) {
9394 stylePreset ( $ ( this ) . val ( ) ) ;
9495 } ) ;
96+ $ ( "#settingsall" ) . click ( settingsall ) ;
97+ $ ( "#importsettings" ) . click ( settingsImport ) ;
98+ $ ( "#savetxt" ) . click ( downloadtxt ) ;
9599 $ ( ".i18_close" ) . click ( closeOptions ) ;
96100} ) ;
97101function keyhandle ( keypressed ) {
@@ -128,6 +132,12 @@ function saveElement(id) {
128132function closeOptions ( ) {
129133 window . open ( '' , '_self' , '' ) ; window . close ( ) ;
130134}
135+ function settingsall ( ) {
136+ selectAll ( 'settingsexport' ) ;
137+ }
138+ function selectAll ( id ) {
139+ $ ( "#" + id ) . select ( ) ;
140+ }
131141function i18load ( ) {
132142 $ ( "#title" ) . html ( "Decreased Productivity v" + version ) ;
133143 $ ( ".i18_default" ) . html ( chrome . i18n . getMessage ( "default" ) ) ;
@@ -209,6 +219,7 @@ function i18load() {
209219 $ ( ".i18_translators" ) . html ( chrome . i18n . getMessage ( "translators" ) ) ;
210220 $ ( ".i18_help" ) . html ( chrome . i18n . getMessage ( "help" ) ) ;
211221 $ ( ".i18_support" ) . html ( chrome . i18n . getMessage ( "support" ) ) ;
222+ $ ( "#customcssdesc" ) . html ( chrome . i18n . getMessage ( "customcss" ) ) ;
212223 $ ( ".i18_supportimg" ) . attr ( { alt : chrome . i18n . getMessage ( "support" ) , title : chrome . i18n . getMessage ( "support" ) } ) ;
213224}
214225function loadOptions ( ) {
@@ -261,6 +272,7 @@ function loadOptions() {
261272 $ ( "#customfontrow" ) . hide ( ) ;
262273 }
263274 }
275+ loadElement ( "customcss" ) ;
264276 listUpdate ( ) ;
265277 opacitytest ( ) ;
266278 updateDemo ( ) ;
@@ -325,6 +337,9 @@ function saveOptions() {
325337 } else {
326338 error = true ;
327339 }
340+ $ ( "#customcss" ) . val ( $ ( "#customcss" ) . val ( ) . replace ( / \s * < ( [ ^ > ] + ) > \s * / ig, "" ) ) ;
341+ saveElement ( "customcss" ) ;
342+ updateExport ( ) ;
328343 // Apply new settings
329344 bkg . optionsSaveTrigger ( oldglobalstate , localStorage [ "global" ] ) ;
330345 bkg . hotkeyChange ( ) ;
@@ -372,7 +387,7 @@ function fontsizeValidation() {
372387}
373388
374389function notification ( msg ) {
375- $ ( '. message' ) . html ( msg ) . stop ( ) . fadeIn ( "slow" ) . delay ( 2000 ) . fadeOut ( "slow" )
390+ $ ( '# message' ) . html ( msg ) . stop ( ) . fadeIn ( "slow" ) . delay ( 2000 ) . fadeOut ( "slow" )
376391}
377392function truncText ( str ) {
378393 if ( str . length > 16 ) return str . substr ( 0 , 16 ) + '...' ;
@@ -509,6 +524,8 @@ function listUpdate() {
509524 $ ( '#blacklist' ) . html ( blacklistCompiled ) ;
510525 $ ( ".domainRemover" ) . unbind ( 'click' ) ;
511526 $ ( ".domainRemover" ) . click ( function ( ) { domainRemover ( $ ( this ) . attr ( 'rel' ) ) ; } ) ;
527+ bkg . initLists ( ) ;
528+ updateExport ( ) ;
512529}
513530function listclear ( type ) {
514531 if ( confirm ( [ chrome . i18n . getMessage ( "removefromwhitelist" ) , chrome . i18n . getMessage ( "removefromblacklist" ) ] [ type ] + '?' ) ) {
@@ -537,4 +554,60 @@ function colorPickLoad(id) {
537554 updateDemo ( ) ;
538555 }
539556 } ) ;
557+ }
558+
559+ function downloadtxt ( ) {
560+ var textToWrite = $ ( "#settingsexport" ) . val ( ) ;
561+ var textFileAsBlob = new Blob ( [ textToWrite ] , { type :'text/plain' } ) ;
562+ var fileNameToSaveAs = "dp-settings-" + new Date ( ) . toJSON ( ) + ".txt" ;
563+ var downloadLink = document . createElement ( "a" ) ;
564+ downloadLink . download = fileNameToSaveAs ;
565+ downloadLink . innerHTML = "Download File" ;
566+ downloadLink . href = window . webkitURL . createObjectURL ( textFileAsBlob ) ;
567+ downloadLink . click ( ) ;
568+ downloadLink . remove ( ) ;
569+ }
570+ function updateExport ( ) {
571+ $ ( "#settingsexport" ) . val ( "" ) ;
572+ settingnames = [ ] ;
573+ for ( var i in localStorage ) {
574+ if ( i != "version" ) {
575+ settingnames . push ( i ) ;
576+ $ ( "#settingsexport" ) . val ( $ ( "#settingsexport" ) . val ( ) + i + "|" + localStorage [ i ] . replace ( / (?: \r \n | \r | \n ) / g, ' ' ) + "\n" ) ;
577+ }
578+ }
579+ $ ( "#settingsexport" ) . val ( $ ( "#settingsexport" ) . val ( ) . slice ( 0 , - 1 ) ) ;
580+ }
581+ function settingsImport ( ) {
582+ var error = "" ;
583+ var settings = $ ( "#settingsimport" ) . val ( ) . split ( "\n" ) ;
584+ if ( $ . trim ( $ ( "#settingsimport" ) . val ( ) ) == "" ) {
585+ notification ( chrome . i18n . getMessage ( "pastesettings" ) ) ;
586+ return false ;
587+ }
588+ if ( settings . length > 0 ) {
589+ $ . each ( settings , function ( i , v ) {
590+ if ( $ . trim ( v ) != "" ) {
591+ var settingentry = $ . trim ( v ) . split ( "|" ) ;
592+ if ( settingnames . indexOf ( $ . trim ( settingentry [ 0 ] ) ) != - 1 ) {
593+ if ( $ . trim ( settingentry [ 0 ] ) == 'whiteList' || $ . trim ( settingentry [ 0 ] ) == 'blackList' ) {
594+ var listarray = $ . trim ( settingentry [ 1 ] ) . replace ( / ( \[ | \] | " ) / g, "" ) . split ( "," ) ;
595+ if ( $ . trim ( settingentry [ 0 ] ) == 'whiteList' && listarray . toString ( ) != '' ) localStorage [ 'whiteList' ] = JSON . stringify ( listarray ) ;
596+ else if ( $ . trim ( settingentry [ 0 ] ) == 'blackList' && listarray . toString ( ) != '' ) localStorage [ 'blackList' ] = JSON . stringify ( listarray ) ;
597+ } else
598+ localStorage [ $ . trim ( settingentry [ 0 ] ) ] = $ . trim ( settingentry [ 1 ] ) ;
599+ } else {
600+ error += $ . trim ( settingentry [ 0 ] ) + ", " ;
601+ }
602+ }
603+ } ) ;
604+ }
605+ loadOptions ( ) ;
606+ listUpdate ( ) ;
607+ if ( ! error ) {
608+ notification ( chrome . i18n . getMessage ( "importsuccessoptions" ) ) ;
609+ $ ( "#settingsimport" ) . val ( "" ) ;
610+ } else {
611+ notification ( chrome . i18n . getMessage ( "importsuccesscond" ) + error . slice ( 0 , - 2 ) ) ;
612+ }
540613}
0 commit comments