diff --git a/.gitignore b/.gitignore index 791448c0..d3e70aae 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ stcli.exe *.sublime* discosrv stpidx +.jshintrc \ No newline at end of file diff --git a/auto/gui.files.go b/auto/gui.files.go index e7761310..55642db0 100644 --- a/auto/gui.files.go +++ b/auto/gui.files.go @@ -18,7 +18,7 @@ func init() { bs, _ = ioutil.ReadAll(gr) Assets["angular.min.js"] = bs - bs, _ = hex.DecodeString("1f8b080000096e8800ffec3c7f73dbb692ffe75320bab4a412997272d7de4d14a7933a69cf2fbf3c71923f9eeb37438990c598221512b4ad71f4dddf2e0092000150b49db4e9ccd34c621b58ec2f2c16bb0b40e3fb9f8a244e1999e6d94541f3c784e5251d915996b2382d69f5f72a290bfc27fe26f7c777c6f74f936c1a26e4de63320f930280c2f4b44cc25cfe8d4077bc127e29581ecf9837b973e73ccc49b14e676c11a7a764af1a112cb3a84ca8efd57dde881c9f0c277c409927d310d0ec112fa705c753c305c8689e2509cd7defa86add67790218e625fc1d6729f1ef15b36c051cde5b30b61a92ab3b043e887b95d3f3e72143e4bb93baf594b2b72fa109656d5a91789833c139171138c14e811d594929275800c0d566d2ea9cc7a766fb727df01c25f3b4d6348b2822393eb120394851508d3dd94ff33ccb2de30a4ad317d8675202cdd3c4642ba7abac9282b78fc7e408a6313d2dc894ceb39c926996250549b2ec0c5a18a3b94e91310e0cbcf0f6ab387a4cbc5771c1680a88607640c219d80a9f357298672c9b65091110e4591481ba0b5a00205bafc00e3d462f19fc25674118e266a4207f1d5e1ed1347a395d150afab7253bcd70cedee134bf8a973123fecbf8d771316c70a7e5724af34eecef005f981ea420e879981c2914440fa9ba887f6dccd272ecc865e7cdf11f8679080b2479473f9700a42a075446404130328db88e1a90fef801c9fe0256326d691e91ff162794885e3101fd55af50f89d7b9a6769fa220da7098d1422a28b3c8fc1eece69be6e10a37d76f2fd2a9b3990f29e5be13ccc72e6464864777f1d1f61fbafc247ab6b079b49d3aeb2a98dff70981e9a728a16829df6c127ba873b2de323fbc296eb559d980f07b759cc1f744111dbb3922d286c4bb3903bf50f9ac85b111e86457191e5513752054a225e352d9ddcbe7fa52e5b6820fffffefde111015f4980502f1baad45d6f5cb0111d95b319a5118dfc6adfc24f3c27fe5dbe4da9adca54c569ccfce144eff2bdff4a290369cef86ee00dd1fd8789ef2de2887a2d687313c4cf4663a1d912afc94633b09b09842d16258bb28bb41bd2b63beb4c6f4ce5fe16827f3235eb162ba7accc53973aec13e2d2fad5349c9d4579b602a3007a6083601667743dcdc23c9241d4c631295d02d65bf81ce45820701d07a9bcf1582800847e15603d20deb858c3925d028f05da5d51f8cde02864615b38dd402736131018810d1cafb03c14e18a6fe74e22af26481dd7fcfe76fa0976c6007456f86ae0320c60d5bd08670b05791c19136355000f887e41347b1e34d074060d1fde1dec67cb559682ab404c7dd5a3a881e33d8ea31343136da9d4dfed3c2a9166ef99c20836cd2e803ac6bb10615ef8c39106c122e8f41166a78e8b87644c1eeeeeeeea9071241d55f551c26818af8b860e107446e294b854c4bd1976068bb0787b914234b8a2395b73555be0f153652813a37763b430d872ed5890284e0a382a085e80fdd7215b04cbf0d2df1d91ff23f7852e39c441faeb9ad1e27dc6602bdfb104fd06142a8f454393438d7256b26da42144eb435b037312df10d8eb660be253976a0da5ecf615c102a8cfc6c6e621f4c4a9ed26b62d0691f4f45e07ed54c94e6e33b9d34e8720d66265a1b9536c6eef1db8cb67737dd5231cacfb3dc8beca34a2f3388530ccbeb540e8909ea5b8dba9de5da360a2868982c400d6d85d24e1c47cc4b2d50a285b31f3d49c8935eca1e7b390e1fdcde80a9cff3cde3d0958f60108e4fb3035e0cc1f880e989769c172ffe170a2cb2187ef9101a680b0d90ec8972fa4693d88123a68cb22ba1f4037f1070d97581038a4f90cfc73784ae5c43c20831f8603abb452258a40edcd7395ed2710fa7dfbf98ed379f60d263bc29c2bff6a73ad4d9817c3d43829cb75e8b9a2a4064d21e6dd896995c7cb10f22f1b268bfaf429d44de29bcf23ec922e812dda15b533eead39fedd7e58b5195ccd18480510b05758cd0497952031b601283c4cda6ae57bd13cc9203e033276a788452a8b53c4e6fdb9163923b7e8e401ceb275c901c11bf879f0fc44b739046ceba66a0f30264b28278b4a0455d8b6b4dab1ae08cb78f4e3b5822f42b15ee91e29fd13f171adb429c31ef4c3b08db1c3e778bc0cc0c5af7db145b3073394eaefa0d7ececbafa94a9c97594b68458af706bcbf4d5dfadba4cf7d84b67a62fdcaa33d5359a2ac3aacc9fac31c918579a2c0a75b9f65f3ae65b51f95f2642cb09746e536e513ed2add380cce89c7243538e101c6c4a88739a1780dbc6dfb7544f12c3defbd14d7bcb3cc3761b2161433bbab828c112331a7e62a21ea000868451b5c280fc5664d3469544609d68d9068a28f106094d4fd902222ef2d021711d1f74082ab141a4ec348637e1d294d7620d325a91bd3d4394c1c015a1d4f30ce41d8355900e19758ba9627fc8687fb607116c11176f6c82b7a7381596d01ae6b7264cd14b5fa5f8a548b8f8a061a78ab6e9a78f727a6b86463153aaed76cd8cc710aa9d511212ac2f628c0263d775b7766e184890b7ab2ad5ae8e5f718cafc34a2035fbb6e1c2127a271e005071603957cad4b70ecaebe3436b841f9ed3de1a2aca1cfecb96549c3dcff89954a4fb41d106a8eed622d1cf65981476e58c3af53b846cd6d8cdc5670b7ad09903b5aecd78ee4b9687d61a87ce6df73cb578b756721bf67ae112ccba11d5e7d8ad62b65382409c27c9c841dbb14ca8239607c52a8999ef8dd0d4c295b20f5c2afbc065c020b4024742dac576516f5a6585517d057260a3ff387afb2628f8a9783c6f29613822570b1a46b0fb3d2657de7e96024f6ce73df8270fec3c5c016be2cc69fca9c8526fa35580ef74af98011e800c5ca52a7e76e15c0fda39897eb6e33898b9ee3985436d12b3e77229966b0d2dd1aa83a01bc966674a395b32cb87b6931ce330eabadad9dc5c7edc11ac01512b40a8d096790e362747dc0be8259860e45f6d46d52e6db28224407d2f2e610d59d5a8811dd1642ece0c5ab1a9169a9af2368c05f5d930ac57b257870f7573f0298b5358c2c4623708fc0238c9f2e01eac91c39c33adc504386595da6eb4e1e833109b01a9a678a016479f9583d562915d78765c61b405996d16af547d01fbd13a0d97c0ffa6c74cb6dcac752aed307fbea2230a8915ddaa6c83a27134cc8f96ec2ad97eb66bd343bf24c31a2156ebe36eb340d4a5207a7b780a0ed9e643d969f9891b0634e2d44d3b19b59f86f03e7e94d342ddeae821ec2d046e0b6d4e4077e0f097ecd7ed3d0a62d24eb3ad7219f072231265291d9178725d417b997e9d1c5a746f40d5bebb9dc1810524e18cfa633206863d2057b7ec542ddab94f154e19146ad765f3f3370cd76a22a8495351e2ec991f4c92983cd117ae48eaa1e3c1035b694f853d8e4fd4c28baea28e43ff6a7023f1c400959cebfb6cf599e6343ceb51f21327e880c9b1c085c4abb258f8e6deef70744191e5ccafaa6d614e6fea8fbe877599b105cd2b3e5dd1a35a33733af7debe1d831fd39b3bea1f9dfe228688adeddf6f60d5696b8ac0302786d9a73d2b8caaf06e03b5481c2649f73c541e52b1a866f6da8e451ab5511652c094e24b618fabf12e00668d3d4d43dc1d306dc3551aa2c1fb7849c953e33af656eb982534cc5f5457153ae344f58eb7c6e7b1ceb52c65ee9087279cadaddb271f37e69c3822d9791e436291accd698545adb2da0426d7375e5ea0517733bb09173c8d80ffeb6d6a563bea51bbd28a7dc36147c10ef03892ec55d6c7602a38fd769aad9685dbf93be8bd5e6e274768b518676ea78c016b49f8f9633565576602a182cbe0cfb85467447fdb481d57eee5c4bc59da8ada2da8e45902a6333ffe68a3d50004b843701f3628623ca6316e92d858e59078675da164db9a9d635f52ba82110fba79c31bf9cb223803609bf16dc3deddffe50bf9e9a6793dda67cf440fc97e85440fb260c3ecb7dafb95665310176c6e9efffef922638ad029b3786cb4cabe468aa0f16ca408928ad5a60ca83acc3b3e31fbf455aec40de642af770171ea8629aa158b2d28b7934b2b97b22768d96315450811345c0957f45832d22effb6e318fc88ba849ddfd6f5b61ac6e254cc4041c06a6ec794c1abc25e81d31b9910c2b5008c399af7a3cf410c789345e7109d8789b0757d53d7505b1b16497b0c78a9bb41db4588d6381b7a338911b58b6a8cb044f9972b9141bb2fd017c4dcd05ddbf77795d9140b48cd8a9643a9accf88ab21ea712d61e7268fe7a2ed5402f168a1771d53b54eef7de5d073387414c2053a9e6f5a0277dec9ebc08311711c7b080be9de4a7ab9c4af53309406ab59a265dbd6ee54dcd214ff2e15327c12a45aeaf63729f2faca75af78cb61d63bde5b285ef3154cb512ed2f5d1408f9da973f7530cb035b9892b3744da6ea87c74ea65cc7a75b0e5865e94e3ba071969e0c5c6f9a6cdc066fab3dd980ab77caf8f375b8f2dd6bc889805f456cbf30ea351563bc627cb3f9a817283705b56d6b4d407d5207016bf52cd8d7051af1673bbb00c7c5a9595354ea872332adb8542ecf84fc1a8bb85ede5c9fc18c4b024cad00ed2b4a12cd13093eb45546761e1ade5e0e7b2a8755b9b28255448d1caf517f6de115e31acc62e8d37a286847d10ddf081dba0983e7710eb15e96af39e9faaffed41b044f5504260f68c889fa2d054b25434f2c3bb45664591ee755b023d990c652dd423309f28d65a9524c9418a1759cb4548925220658e211d150113a110b58d1a8ce44a23311d159bcc48b3060c82392961a2f517c1ab302dfd6ceaa181b67049fc21b57e725fa5dadc42210542facc4ad76fe6b929d8a5fc229273dc4475375cfc3dd2a5c41caad075ac023d9919875d1049b1bf54b2a64a5d04b438008f5afa6a8b897a395078be9aa6423c2df7a5844e4dd01cb7e8b2f69e4d70ad446350e843b0193a1699c86fc7d7b5f7eda8b9c37f269a81d81eb31c72e71be0811589e82cb7af43fe4befac3c80139e478cf023ab151edd6d2a3213e12f2c8eff17558ebc3d32d9879dd8f994e2e6e41fea59dbcfa2e24cf60b22b7bc031de363b5b52fc0a98efc8cef8a319e5478736dba0b7b1b3eb70d687a5db98592f5e3a99b805f5b36f6064c5427cabc64d6c4c63de7a35d741344c2ec275f1a6fa068f6f6fdfd657662afbdb389e2dcaf4ece0f95766d6c6aa7adf9c3f580b73be0d0b2df3dbf0fe38b87a38fa79333e6da7e01c782b5ad9c4816526b2539f52751aca2118d95fae0371e3617cfcc7f88f3f4ec65615603d5f88274fee9eec91ff76d88632ff56fb18044130c657b3026101093bf555e43b8f86b2d0321e6cd3229e08a6b75b6eb62f57e0a0cd1d931fe41d130733118fa2e373ea7b19cf4e4529bf8b2d950bf1cd648f89b7afd452256df9d5677533cbc3b498256564f4f0c4ab5d7195977601f79efc5521b151d0d2259063f8cd304f84516196b537c02fb41990f474873fd9dc1be839f8b1c41940dc3d78fa64cc473e9514ccb5afa8a94ce3cf252f94294aead2d1e71206e3b7149dbe464e142992383d7bdce0e06a18119a2c4724642c87907dc6f2a46dabd816dc03ab2b685e04655a2ce239ab9319ff3ca6171fc3c45ec4e7cf87fb94e6aacf784c2e2881055f2651ea31111783b6adc08233d0ec47848ad9baa52d7eb4303186ca8a75c39b28f7d5829c7430c716a2aa4d280a529030c96918ad6fc41eaff5b9f9dbce435c1081f0ab6ac768913656eb471fb331cee33bcd994f2826f371f41f7bde3e63bababa0ddace01bf8781ae9f3f94a9a5fb0af704db8a9154aa40e15fc7cf76fef968e77f4fae7e7ab4b937767e31cc6d24df2a7d2fe4ae85c8b17fbb05f26f000000ffff010000ffffd55009eccc530000") + bs, _ = hex.DecodeString("1f8b080000096e8800ffec3c6b73db3892dffd2b30bacc924a64cac9ddee5d4571b6324966cf9749e28a93f9701e5f15254216c714a99060149547fffdba0190c293a21f9999ad5a5525b68146bfd0687437008d1ffe5a6569cec8b42cd6152d9f1256d674446645ced2bca6cddfabacaef09ff89b3c1c1f8c1f5e66c534cec883a7641e671500c5f9659dc5a5fc1b810e82baa287152bd3190b2607075fe292549b7cc616697e498e9b11d1b248ea8c8641db178cc8f9c570c207d465368d01df31094a5a713c2d5c848c964596d1320cce9ad697accc00c3bc86bfd32227e1836a56ac80c3070bc65643727d40e083b85725fdf22a6688fc68d2b65e52f6fe0d34a1acbb56241e974c70ce45044eb05360475672ca09560070bd9d189df3f4d26e5f6e4e5ea16481d69a17094524e7170e2427390aaab127fb5765c18a5991bd5c806269b2635381a16559940edc15a5f96becb3b981d9a199cd7a49574523296f1f8fc9194c757e5991299d172525d3a2c82a9215c515b430464b9d22631c1878e1edd769f294043fa515a339208219042dccc09ef8cc9253291d1110e44592c09454b40240b65981ad068c7e65f0979c2961acdb9182fc6dfcf58ce6c99be9aa52d0bfafd96581f3fa014de1a774993212be497f1857c31deebc5e4e69d989fd03e08bf3931c04fd1267670a05d1439a2e12de18b3b42e3772d9797bfca77119c322ca3ed0cf3500a9ca01951150108ccc13aea31d487ffc804418a5a17944fe639a51227ac504f457bd42e11fdc1bbdc8f3d7793ccd68a210115de4550a76f785969b1d62b4cf4ebe7f2a661ea4bce74e384f8b92f91112d9dd5fc767d8fe83f0e3eadac166b26b57d9d4c67f3acd4f6d39450bc14ef7e00bdd0b5ed6e9997b61cbf5aa4ecca793bb2ce64fbaa088ed45cd1614b6ae59cc1dff274de4bd084fe3aa5a1765d28d5481928857bb964e6e3ffea42e5b6820fffdf1e3e919015f4980502f1b6ad4dd6e6eb0599dd5b319a5094dc2666fc34f3a27e1777c2b535b95a94af39485c389de1506ff965306d25cf1dd2018a2fb8fb33058a4090d0c687ba3c4cf566361b76dde908dddc06e2610b65ad42c29d67937a46b07d799dedacafd3106ff646bd62f5649595de63e75b827c4a7f5eb693cbb4aca62054601f4c006c12caee8665ac4652203adad6752ba046cb7f039c8b140e036565279e3f1520408c326087b448271b58125bb041e2bb4bbaa0a77839398c5a670ba814e5c262030021b385e617928c295d0cd9d44de4c903a6ef7fbfbe9afb03346a0b32a5403976104abee753c5b28c8d3c49a18a7027840f47744731c4003cd67d0f0e9c3c9cb62b92a72701588a9af7a143570bce769726169c2944afdddcda3128df69e298c72f3620dd431268628741d0e471a04c3a0324498c336761e9231797c7474a443a6897454cd4709b561bc2e1a3a40d0194973e25311f766d8192de2eafd3a876870454bb6e1aa76c0e3a7c9622656efd66a61b0e5bab120519c14705410bc00fb6f63b68896f1d7f06844fe8b3c14bae41027f90f1b46ab8f0583adfcd091185850a83c960c6d0e35ca45cdf6918610ad0f6d0dcc4b7c4b60af9b2d48487daab59472d4570407a03e1b5b9787d0932bd34dec5b0c22e9e9bd0ecc54c94d6e3b3930d32188b5585d69ee149bcdbd0377f962aeaf7a8483757f0cd9579d27749ee61086b9b716081df2ab1c773bd5bb6b146cd430519018c01afb0e4978319fb162b502ca4ecc3c7d67620d07e8f91c6478ff6e7403ce7f9e1f5d44acf80404ca973035e0cc1f890e989769c5caf0f170a2cb21871f9301a680b0d90ec86fbf915deb4992d181298be87e04dd241cecb8c4a2c1292d67e09fe34b2a27e611197c3f1c38a5952a510472ccf8cb0c62bf6f3fe1693e2fbec16c27987495f736d9da8c0529cc8d97b25c88812f4cdaa1a9c4c47b31adca74194302e6c2e4509f3187ba517cf389847dd227b143bda2c2c6fd35c77fd40fab3685ab1903a90002760ba79de0c21224c62e00858789a957be1bcdb302223420e3768b58ca72b8456c7e39d76267e416dd3cc039362f39207a073f4f5e5de8468780a66e9af608a3b28c72b2a84450856b536b5deb8ab082c73f81117e118a554dff48e9a148888bc5a40cbbd0f743136387d7097821808bdf7a6387664f6628d53f835e8bab9bea5326273751da12a2bdcaaf2ddb59ff69d565fbc75e3ab39de15e9df97d23ca8a7599df59639231ae345916eaf2ed7fef986f45e57f98088613e8dca7fca2fc4cf74e0332a373ca0d4d3968f0b02921bed0b202dc2efebea57ab214f6de9ffdb4f7cc336cb70912b6b4a38b8b122c31a7e1e72aea310b60c818556b0cc86f4336dfa99208ac132ddf401125de28a3f9255b40c8451e7b246ee3830e4125368895bdc6f02e5edaf23aac41462bb2b767883218f82294769e81bc67b00ad221a36e314df40f39eddfdc41045ba4d53b97e0e614e7c2128c61a131618a5efa2a25ac45cac5070d3b55b44f3f7d94d35b33344999526f776b663c8650ed8a9298608511631418bb69bbb5d3c54882bc5f35c97673488b63421d5602a9f9b70b1716d13bf100808a030bba52a6be95505e2177aba88abfd0de2aaaea12fe2b96541c51cfc449aaee08dbd3d5ef5a99e8e73ace2ab776469d0a1e42426b6de7e2b3073d28cd835a57673a0f25cb43dd2641e68a52b4dbe6e098acd32c233905e920089ed2565650972c781bc18dcd53240e3a78e6e9e34ec20cbd9550fb245b3f62100bc794e6c56a956d80fd3569cf96333c55cb36070e1afa2c751ba83167ce22f64e05bd708949f2236a8ff98d3abe5782481ca5c9908998dad7a1ce581955ab2c656130c23516af940df0abb2017e8d18c494e0418979ce204a6daba2b20acf400e16e7ff9cbd7f1755fc42403a3794301c91eb058d13d8f69f92ebe06591034fecf02338e60016780c13298fdbc6bf56451e6cb5e2f741b7ab18e0d9cfc057a5e356ecf503da11916e739e33a99b1ed178d42631073e5f6adcfa501dd7d93ac562ed9a4e5758c36817332cec9c9fbaa8aec0bdc086f641408b06f6476439308cb563eddbebda446625363a6e98d28fe99216356bad3274388b35c47ec53ac2358e209142a5f9d52033e227159e75d7797d4670c9ff37b61779f4782b9372db82729a6917ac5d6787d6f1e74d8d72dbd3ec1cf26304e20cc08d80b4415b97252c7539e24144bfc2ca4fc26b989a6690c50a9200f5bdfe0aaecba9460dec8c6673714a65e4425a2a64cbbb632c6a6f23809b24c76db8da3647bf16690e9e9338962b02bf064e8a327a00767c5a72a6b51814a7ac51db3d0438a99d00698a076a69f25939caaf16c53a70e38a933dc85cb378adea0bd84f3679bc04feb73d66d25862cea974c3fcfe8a4e2824f274afb22d8ad665047e98e956c9fedb042e3df44b6a9d1949b33ed4784d590aa2b787a7e090261f8aa3e567bcb8b188735eed2cde7dfec6fbf8e1a181dae8e821ec1d043685b627a03b5efb43c224470ad469b64dee0c5e6e449222a723924e6e2a682fd36f8b110edd5b50adef362b066001593ca3e1988c81e100c8b52d874d8b76d2d844b11685d675b9fcfc2da3e496086ad25694b8edc08fc2494a9ee90b571491a0e3d123572959853d4f2fd4429faea28e6b26cde09dc4130b54726e675df8999634beea5162167736009367810b895775b508edbddfe3e8a2aa2859d85477e392ded61ffd19d665c116b46cf8f4458f6a8dd6ebdc7bfb760c7e6c6feea9b775fa8b142236d3bfdfc2aa73638ac0302796d9e73d2bdaaaf07e0375481c6759f73c341e52b1a8ddec998e451ab5558654c094625fe58eabf1f60926eb3d4d43dc56b16dc3578aa411a658e4b9f50060af75cc321a97af9bcb319d71a2faaa40e3f35ce75a96ce0fc9e30bced6deed938f1b734e3c91ecbc4c21b1c836f6b4c2a25659dd052637375e5e0f547733b709573c8d80ffdb6d6ad63aea9159d9c7bee1b0a3400c783cb58d55d1c7601a38fd3ea437b9fb00dd374beee408ad06e64dee9431602e193ff06ee6ecdace20547019fd59f738adf06f1fa9f3c6bf5cd897998db0dd814a1e5e613ef397bfb868ed0022dc22b8131b54299e0b5a97975cac72487c26a15072edcddeb16f285dc18847ddbce1239065155d01b0cbfaf661efeeffed37f2d7db26f668a03d333d247b0f991ea4c196d9efb5f76bcda62030d8de3e01fefd45c61ca15366f1066e55dc478ea0f16ce508928ad3a62ca836ce3bbfb0fbf455ae040ef6426fb70171cc8b39aa138b2b2a7793cb1b97722c68b98315450811355c0b57f454326296ddcd40063fa230e1e6d7b851d9c2389c8a1d290858cdedd832044ddc2b7006231b42b81680b147f37ef4398801af4ee91ca2f3b0111a3786750d99da7048da63c01bdd0dba6ede18e35ce8ed2c46142f9a31c212e55fbe4c06edbe425f907243f7eddf7faad4a65a406e56190ea5b13e2bb086b0c7b784bd9b3c1ec49bb904e2d162ef36a832ae8b84ca29fb70e8a9840b743ce17444eebc9317820723e2396e1216d2bd95f47289f753319406ab59a263dbd62ef1dcd114ff594a64f80a4db5d4fdcfa0e47da99bbe2a90c39ccf0af650bce1c3ab6625ba1f572910f2113a7f5d63d707f6302567e9864cb5efe1bd4cf98eadf71c6ccbda9d7642e3ad3d59b8deedd27117bcabf8e4026e9ec6e3cfb7f12af4af212f027ef7d57cd4d66b2ac678a7fd76f3d12e506e0a6adbdea280fa8a1302d6e6257aa80b24ce5ff100968bd3b2a6a8348c4764da70a9dcd68af9bd29f1a061775f0b332e093075029877e2249a67127ce82a8d1c3eb6bcbd1cf65c0e932a3850b08aa891e3b50ab0065e316e87590c7dde0e05ed28bae11ba1473771f42a2d21d62bca0d27ddfed59ffa0ec1731581cd031a72a67e79c652c9d033c70ead555996e76513ec4836a4b134d71e6d827c6359aa1433254630ce93962ab14cc4004b3c231aaa526762052b2ad5b9c8742e123a4b9778f30a2c7944f25a6326492f5356e17bee591364e394e0d72f588f3524faa38617fe4320685ef5897714fcd7acb814bfc4534e7a880ff5da9ec7474dbc82948d4781c02339949875d1049b5bf5cb5364ad30c8638088f5af4c69b897a39547b2f9aa6623c29f173944e4dd112b7e4cbfd2246c15a88dda7910ee056c86a6691ef3ef54e8cb8fb9ca79239f86d613f8de0f1d11ef232481e539f8ac27ff411eaa3fac2490438e8f1da01317d56e2d3d19e2c3b480fc23bd096b7d78ba03336ffb31d3c9c51dc8bf7193575f2295054c76630f3826d867674b8a5f4df427b233fe4c4bf9d1a14d13f42e767613cefab0741733ebc54b271377a07ef50d8cac5a886f72b98d8d69cc3b2f837b88c6d93ade54ef9a6f8df9f6f6ed7cd7a8b2bf8fe3d9a2ceaf4e5edd33b32e56d5170efca6635cf26d586899bfbf08c7d1f5e3d1dfb6e34b3307e7c07bd1ca260e2c5391c360efa4714b39052bfbc395202e3d8ccf7f19fff2cbc5d8a903ace80bf9e4e1ddb363f2ef1ee3500cc0692083288ac6f8545b20ac2065a7a18afcf0c950965ac683bd6ac453c1fc6e0bcef5951e1c7477cfe47b79cfc4c74dc223e9f40b0d838267a8a29cdfc597ca86f8d2bca72478a9d4532571f9ad7c6d332be3bc9a657562f5f0e4cbacbaca0bd380fb58feaa90d82a68e912c831fc42a267c2ac30d33a1ee0f7280d487e79c8df091f0ff43cfc5ce28c20f61e3c7f36e6239f4b0a9d6aaaf3f473cd8b658a92ba74f4b986c1f8e558976f9113458a2ccdaf9eee7070358c08cd962312335642d43e6365665a2bb6450fc0ee2a5a56519d578b74aedc40fe92d2f5cf71e62ee4f347eb7dca73cd673c266b4a60c9d75992074c84c6a06d27b0e00c34fb3342a56c63688b1f2f4caca1b26abde34d94fc5a412e3a98630b51d9261405a9489c95344e36b7628fd7fbfcfcede721ad884078afdab15aa48db5fad1c76cad43f94e73e6138a097d9afccb9ef7cf98aeae6e837673c02f63a0efe777f75be9eee1b2a0a91849a58915feeffcc5e1ff3e39fccf8bebbf3ed93e187bbf8fe82e92ef95be1772df42e4d8bfdd02f97f000000ffff010000ffffe8d3c5eb67560000") gr, _ = gzip.NewReader(bytes.NewBuffer(bs)) bs, _ = ioutil.ReadAll(gr) Assets["app.js"] = bs diff --git a/gui/app.js b/gui/app.js index 8029f30b..369ef59a 100644 --- a/gui/app.js +++ b/gui/app.js @@ -16,6 +16,7 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http) { $scope.myID = ''; $scope.nodes = []; $scope.configInSync = true; + $scope.protocolChanged = false; $scope.errors = []; $scope.seenError = ''; $scope.model = {}; @@ -122,7 +123,7 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http) { } return state; - } + }; $scope.repoClass = function (repo) { if (typeof $scope.model[repo] === 'undefined') { @@ -141,7 +142,7 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http) { return 'primary'; } return 'info'; - } + }; $scope.syncPercentage = function (repo) { if (typeof $scope.model[repo] === 'undefined') { @@ -255,13 +256,19 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http) { $scope.config.workingOptions = angular.copy($scope.config.Options); $scope.config.workingGUI = angular.copy($scope.config.GUI); $('#settings').modal({backdrop: 'static', keyboard: true}); - } + }; $scope.saveSettings = function () { // Make sure something changed var changed = ! angular.equals($scope.config.Options, $scope.config.workingOptions) || ! angular.equals($scope.config.GUI, $scope.config.workingGUI); if(changed){ + // see if protocol will need to be changed on restart + if($scope.config.GUI.UseTLS !== $scope.config.workingGUI.UseTLS){ + $scope.protocolChanged = true; + } + + // Apply new settings locally $scope.config.Options = angular.copy($scope.config.workingOptions); $scope.config.GUI = angular.copy($scope.config.workingGUI); @@ -278,6 +285,21 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http) { $('#restarting').modal({backdrop: 'static', keyboard: false}); $http.post(urlbase + '/restart'); $scope.configInSync = true; + + // Switch webpage protocol if needed + if($scope.protocolChanged){ + var protocol = 'http'; + + if($scope.config.GUI.UseTLS){ + protocol = 'https'; + } + + setTimeout(function(){ + window.location.protocol = protocol; + }, 1000); + + $scope.protocolChanged = false; + } }; $scope.shutdown = function () { @@ -402,7 +424,7 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http) { $scope.repoList = function () { return repoList($scope.repos); - } + }; $scope.editRepo = function (nodeCfg) { $scope.currentRepo = angular.copy(nodeCfg); @@ -544,7 +566,7 @@ function repoMap(l) { function repoList(m) { var l = []; for (var id in m) { - l.push(m[id]) + l.push(m[id]); } l.sort(repoCompare); return l; @@ -633,7 +655,7 @@ syncthing.filter('chunkID', function () { if (!parts) return ""; return parts.join('-'); - } + }; }); syncthing.filter('shortPath', function () { @@ -645,13 +667,13 @@ syncthing.filter('shortPath', function () { return input; } return ".../" + parts.slice(parts.length-2).join("/"); - } + }; }); syncthing.filter('clean', function () { return function (input) { return encodeURIComponent(input).replace(/%/g, ''); - } + }; }); syncthing.directive('optionEditor', function () {