Show out of sync items, rename files->items (fixes #312, fixes #352)

This commit is contained in:
Jakob Borg committed 2014-06-14 10:58:36 +02:00
1 parent fd73682806
commit 48a3fac2da
3 files changed
+86 -6

No files matched your search

+2 -2
View File
@@ -18,7 +18,7 @@ func init() {
bs, _ = ioutil.ReadAll(gr)
Assets["angular.min.js"] = bs
bs, _ = hex.DecodeString("1f8b080000096e8800ffec3c7f73dbb692fffb53a0baf4897264ca49fa7a37519c4eeaa4eff9a5493c71d2bb39d79da144c8624d910a015ad6d8feeeb70b80144000141d2779ef669ea68d2562b1d85d2c16fb03e068440ef3e5ba48cee79c048703f278ffd10fe41fd1453e213fe7c53989b298e47c4e0b32cd335e249392e7050bc98b3425a217230565b4b8a471b803d83e324af219e1f384119697c59442c79812f8799e5fd222a33199ac012d7973f4618ff1754a499a4c6906fdf83ce2640a4d138aa86679098327193ca7e4d7a3c3576f4f5e915992d2706767b4fb274b938c934991af60f8a78417251d0a2293aca4d5ef655a32fc5ffe26bb23e8799ee69328250f9e92599432008ab2f3328d0af51b8176fa257c61c0ef94f7c73b3b975141d83a9b025bd93939a87a848b3c2e531af4ebb6fe909c9e0dc6a24359a49308d01c903e8848e0a9e1422074969c07b3121e247946820773ce97c7457e99c4b41890eb1d021fe36118d35954a69c8557ac98fd9d46f0ec6db41003fccfdee1c9fb5ff63ee417348381b6f43dccf38b84567d8d9eb7832699bcc8d3941641ffa47a7ac88b1418d56867d37c0982144356b4a3089605bd7c19711c667f5c3f3da7fcdd6b788453b2798a328a0a2e052c660228118c08ec484a46c5800c00ae6fc78d4610a7fd7cb13e7a893cf68da719682422393d732039ca9051833cd5be2c729e4ff3f4700ef30f7a5c93a9c1d0a280f561e3669466afb0cda6069488a636e9055de60e4ef171c141a891afed18849ed055438ab0a04e409fb37306cb6b9617944cf23c6524055d80279cd3c2a49773010c9c88e7d749fc94f47f4d18a7192082f907194e61d108bd20c74a3644429017710c13ca280340be5ec282ec737ac5fbb7430ddb9be8ea8466f1ebc99269f8de95fc3c4735788f9af36bb248c034bd4e7e1eb1c10659562e26b430d1bd0704517694012b97517aa2a1942da46a22c176544adddcd854e31d101e474504cb287d4f3f95a0e83abf2005023c83f667b1607b03d282107a493d6c480fb1fd024692c85629c416f1e9939b4fa3f445961d83126918c563f23201c50003be26aab985b60ad1ab2c9aa434f6e3daa041653491fc4d98692716d9d40dcd091a959fe52ea12b2d3e269be7defe1f8fb3639b02f98460636be7f776d717599ead1779c960af8c7082c4a2957b8703d1996905cfcbe4c4bd34d58ad3c5f4f168db721c5666576e9026f1a6c410db8b12f662d861a79130fc1f0dd96d45781c31b6ca8bb81da906a5102f374f5aa9fdf0abbe4ad113f9fb870fc727e0481404066ac8b70dd98be3a3d774ad4fdaf111914f148a68995cc0efc624d55b226c7127e5744a694ce3a0da11f193cc48f09dd800f5a7da042759c283c1d86c0afaff91510e32b8107b487f809b469406fd396ceefd06b4bdbde2e7d62061b3d9de918c4dc776221096cd4b1ee7abac1dd2b5ef9b44dfdac2fd250213674bd6cf56417959643e71b827c427f5eb4934bd888b7c097a00e381e6825e80364cf2a888951779eb99943606eb5d7c067ccc11b8f6b074da84971502c2a0f2301f92fe88ad61a12f8046867ac798e65ac6e02c3499331574ec52018911c8c0fe1ac903e9e4046eea14f26a82f47e9befef267fc2f61982cc58a0bb3b8310d6eaab683ad79027b135314e010837ea274473d0870734c3b8e3e3fba3c37cb1cc33303088a9ab78343108bca7497c6649a2c995fedd4da3e6c3769e29f48db31cdd39f4a4c1775d0583a101c1d1150d1066aff6b80764441eedefef9b9049ac0c55f5d11c74e86fb2866613648611984f44c29a6163388fd8bb55065ee092167c2d44ed80c74f15a28dadd65beb090777c38d0507c549014305fe0f90ff26e2f370115d05fb43f25f6457ca52401c653faf39651f720e3ec39e239cb0a050783c1ed8141a23e725df3634b8755dc636c0bc83df426ccca77312509f682da1ec7765c10168cec6adcb42982159d34c6c5b0c3254eabc0e9a01967bb8dbf14e332202578f97cc30a7f8b8b977e0c69ecfcc558f70b0ee0f20662b3308a1930c5c39f7d6020e477691e16ea75b7763041b354c14440fb0c6bec321bc984f78be5cc2c84ecc2237c1e51aeea3e5730c23da37bd2b70f1f774ff2ce4f94718a03884a90163fe5036c0bc4c182f824783b1c987ea7e407a18fac166db23373764f3f4284e69afc98b6c7e08cd24e86da8c454c3312da6609fc1195613f390f4be1ff49cdc2a91680c3966fc30058ff1eb4f7892cdf2af30db31c66dc5179b6c63c6fa09cc8d7764b510fb3e37698386c989f7625a16c92282c0cc85c921bec61c9a4af1d52712f6491fc70ef1caf4a1b0d702ff7e37acc6142ea71cb80208d82d9c7a820b4b0e31720168348c9b7215bbd12ccdc1438361dc661113600eb3888f0f6786ef8cd4a2990738c7e6a53a846fe1efd1cb3353e910b0299bea79885e594ac5b0284410856b53ab4deb92f05cf83ffd86fb4528a66cfd3d958522012e96e6c8b00b7d3f68626cb13a7d917110ecd7d6d821d9a32972f5ff41aef9c55de5a98293bb086d01de1ef34bcb36d6ffb2e2b2ed632799d9c670abccfcb61179c56cce379698224c084d2593da6cfb4f2df3ad89fc9fc642c308b4ee537e567ea35ba701893129158aa695273c642a884b5a30c0eda2ef6b8a274d60effdcd3ff6967986ed36c6812de998ec22070b8c694435462fce008694533dc780f456c3661b511289756cc41bc8a2c21ba6343be77370b9c8230fc7b57fd0c2a8c206beb2571954396dab36286f45b57674517a3d9f8752cf330cefe9ac83b4f0686a4ce5fd434cfba3db89c01aef5b17e3cd29cea42634ba058d09d3e4d255284129432ed169d02aa26df2e9229cce92a171c2b52cbd5b32a311b86a17944404338ce8a340df75dd6cd4244305f26e5905db55051afb0426ac02d2e36f172e4cbdb7e201001d072674154f5d33a122afee16118b2e61275045db4a4096e64c7181907f9cbc7b1b3251bc4c660d2a350ab143bee4a2663a17d571f6945cf761140ec66cef03e8575f64ee97a9aa358cfe6479d6bfbd6d662a9639b3f2763016f006040dc520aeac45b73ca5c435c218a773eec39ac4ba482d926ffab3ede949c74c7456565616f04fbea0f224c45456c2cd39ababe3dfd5da453f9551cadc7a3a6c55f501b9b9b144213f5bd083fa7a509b8a9dcc0245f2c0143af0cc28450b5215fec92a49539251e00ec29109ad790571a9d243c3cdb4690a65a14ae4007cd42998815709ec930866b1474cf34e939b17a0f96b207f45eaea7e8af5d874bde355b4b093c969ccd9b805df56b3e39c242f5da12c702a979434656a429df02264b0fa79d01fa20d8b96dababbd21c8cab10accd027628b1685c546cec9751e3d869b7973d2c80f57ca94aa140de2568d4c9cce9f614e6ee5aa7f2183f85b9efdb501a0766749b71b24a3063bda293252672ea75046bLine truncated
bs, _ = hex.DecodeString("1f8b080000096e8800ffec3cfd73dbb692bffbaf40756945393265277dbd77519c4eeaa4eff9a5493c71d2bb39d79da14448624d912a3f626b6cffefb70b80243e493a4ef2de9b394d1b4bc062b1bb582c76171f9309394a37db2c5aae0ae21d8dc8a3fd83efc93f828b74467e4ab325099290a4c58a66649e264516cdca22cd729f3c8f63c25ae524a339cd3ed2d0df016c1f724ad2052956514ef2b4cce6141a8694c0cf65fa9166090dc96c0b68c9ebe3f77b79b18d2989a3394da05db10a0a3287aa1945548bb484cea304ca29f9e5f8e8e59bd3976411c5d4dfd999ecfe91c751529059965e42f74f48919574cc888c929256bf377199e3fffc37d99d40cb659cce82983c784216419c0350902ccb38c8c46f04da1996f025077ee7c570bab3f331c848be4de6c056b22487550b7f9d86654cbd615d371c93b3f3d1943528b37816009a43320411313c359c0f842ea2a5b728a1204a13e23d5815c5e6244b3f4621cd46e47a87c04729f443ba08cab8c8fdab3c5bfc9d0650f62658b30efe67efe8f4ddcf7befd30b9a40471d6d8fd2f422a2555ba5e5ed4827b3c8d238a699373cad4a8f8a2c064625daf379ba0141b22e2bda51049b8c7e7c1114d8cdfeb42e5dd2e2ed2b28c221694a514641567001b391004a18230c3b929250d6610e00d7b753ad12c46996afb7c72f90c7a1529a80462292b3730b92e3041955c813f59b2c2dd2791a1fad60fc418f6b3225189a65303f4cdc39a5c94bac33a90125a2b1497a4637a985532cce0a106ae0aa3b01a147f4d22ec584d2f079234556859f61b61e3e21c3171446562e0ca34c94130fbe8fe45a5413ac4479c9e5455ace5758f16113c2e08baa5b9d8ce3b983888caec15458e930ab2a22c2f43289d320b41212e405cda2fca22685fd011b730a533c59e66071166946c92c4de39cc4303da0a48036ea1016050386c165e5d75108b87f8900790288604a805acd3321117222d4857008f23c0c41c7739a0360b1dd808d1a16f4aa18de8e256caf83ab539a84af669b5cc2f7b62c9629ce8c7738997e89d61158eb57d14f937cd4204bcaf58c662aba778020488e1360e563109f4a28790da9aa88d78d4acc403b3651790784274116806589dfd13f4b98fb32bf2005023c83414842c67603d282105af1a9a9490fb1fd0ceb06e1b55c882de29307379d07f1f324398179256164c5e445048a016bda9688ea16da2a442f936016d3d08dab4183caa822f91b5bb9ac5878553f34a768677fe20ba7acb4584c9a7267fb0f27c98949012f2158d9daf89dd9f4799226db755ae6e03e043840cc8ef1e5d482e85c3569cb323ab54f4d31e364317d38ee9a8ee36a25e23e834abc2a31c4f6bc04f7049c8e79c0d6c20f8aec3a119e04797e9966613b52094a20de3425add4beff459ea5e89cfdfdfdfb9353f0ad32021d69f26d43f6fce4f815ddca8376724c788940116ca20bf8ad0d52ed25c0aa7f5acee760f869e88d24ab1f2d88f70df309e4526980a3242abcd154adf286ff91d0026470c196d5e108d7d120f6862bf077861ab4e971342b524542e37fdc918ca6613b11089bafca0257aa76489b2ba4127d6b0af7e7004c9c2959375b192dca2c7189c33e202ea95fcf82f94598a51bd003e80f3417f402b461960659281ceb5bc7a0b431583b360be06385c0b5d329d3c61c4f1f107a95d3fd900c27f91626fa1a68cc51eff25cf2b6c12f0974e654059dda5480630432b0bd44f288fb7d9e9d3a81bc1a20b95df3fdedec0f583e7d9059eec91ee0c887b9fa3298af24e451680c8c5500ccb3fc11d11c0ea18026188a7d78777c94ae376902060631f5158f240686f72c0acf0d49e85cc9dfed344a6e7def91c2702149d1c3c5e002dcf94b6f3456200af4ce3d84d9ab839011999083fdfd7d15320a85a1aa3e52cc02ed55d6d06c82cc30287589885933acf45741fef632012f7043b362cb446d81c74f15b54e8dda5ba3a40077c38e053bc541014305fe0f90ff3a2856fe3ab8f2f6c7e4af6497cb92411c273f6d0b9abf4f0bf019f62c11960185c22bc29149a1d2735a165d5d835bd7a76f05ccd9f92d811572be221e7589d610ca7e5f162c80ea68dcda2c841aa5ea66a26b32f0e8b1f73cd0634e7b77b7d31d3d480457af2873c59c62b1be76e0c29e2ed4598f7030ef0f218c2d93902ea2045c39fbd2020e477291e06a275b77a50713350c14440f30c7bec12e9c984f8b74b3819ead9859baa6e073788896cfd20dab6f5a57e0ecefd9feb95fa41fa083ec0886068cf9435e01e332cb8bcc3b184d553e44f34332c0d00f16db01b9b9214de97118d381ce0baf7e08d5c41b345462447b42b339d8677086c5c03c24836f47032bb74224124396113f8ac163fcf2031e258bf40b8c7688715bf6d9065b19b1610463e3ec594cc4a1cb4d6ad0e47ce09d983659b40e2030b361b2884f1b435529bef840c23ae9e2d8225e9e5165f69ae1dfef875519c2cdbc00ae0002560bab9ee0c4e25d4c6c00120d535dae6c355ac4297868d08ddd2c624ed06216b1f868a1f8ce482d9a7980b32c5ea281ff06fe1ebf3857950e0175d954e53e7a653165dda2104114b645ad36ad1b52a4ccff196aee17a198c576b714168a783859f49e6115fa76a4636cb13a43967160ecd7d6d82259ccf5fd7bc835bdb8ab3c45707217a1adc1dbcbddd2328df5bfacb84cfbd84b66a631ec9499db3622af98cdf9ca12138431a18964529b6dffb165bc2591ffd358d08c40eb3ae566e557da390c488c4a29533469c7c641a680f848b31c70dbe8fb92e28923587b7f75f7dd31ceb0dc86d8b1211d955de4608d310ddba092f7ab00435c5039c780f456dd268d2809c73a55e20d6451e0f5639a2c8b15b85ce4c0c171ed1fb4302ab081afec5406b1c3d8a90dc25b11b53d5d94c1c0e5a1d4e30cdd3b1acb202d3caa1a5379ff10d3fe60772270dbfb8d8d717d8813ae095a334f1b30492e7d85e2953ce4628d46ad22ea924f1fe1f4960c0da342cad2db25339980ab7641494030c3883e0ab4ddd6d5ca36ad2f40de6eaa60bbda94c7369e0a2b80e4f8db860b53efad780040c681095dc153df4c28cbabdb4594071f612510fbd895800ccd99e30421ff387dfbc6cfd9e665b4d0a89428c406e9a660bbac2b7660207f42ae87d04b01c66cef3de817db1edd6c62b1d730f9234f93e1edad9ea9d8a4b991b783be80372068cc3ab1652dfae52939ae09dbcafd8474a4b66fcf926f7259777ad23212bd95352f33f8275d537e3864ce0f07a863561f18f8a6d62efa6719c4b95d4fc7adaa3e2237378628f8a7033da8af03b5aad8d1c213248f54a103cf39a56841aab310e4328a6382dbf9188ecc68cd2b884b6c3d686ea64993cf37aa580ec0459d80193995c03c9ca16ef6b061ded1b9790e9abf05f22f49bdbb1fe37e6cbcdd712a9adfcbe46863366dc1d76976ac83e4a4cbe71b9cc22525ba4c55a8d322f37398Line truncated
gr, _ = gzip.NewReader(bytes.NewBuffer(bs))
bs, _ = ioutil.ReadAll(gr)
Assets["app.js"] = bs
@@ -63,7 +63,7 @@ func init() {
bs, _ = ioutil.ReadAll(gr)
Assets["favicon.png"] = bs
bs, _ = hex.DecodeString("1f8b080000096e8800ffec5d7b77dbb692ff3f9f02e1ed26ce5d93721e4dbb8eac5dd74e5b6f9bc78993ed767bba7b20129250930443807654c7f7b3efcc806f91922cdb896fdb3f128b0430180c0683df0c1e1cde3d7c75f0f6e7d7cfd9cc44e1e8cef0aeebde3950c93c95d399615b070fd8a39d874fd87ff2133566dfa874ca781c3065662265be8a4d2ac79951a9f6d87e18322aa5592ab4484f45e0dd79a705531366665233adb2d417502a100c1ea7ea54a4b108d8780e34d98ba3b7ae36f350b050fa22867266c60df321692cee4c5406d5ca185e0af6e3d1c1f397c7cfd94486c2bbe3bac03672cf421e4ff71c113b2c9eba3c49f61c3d8f7da83b9ed22be25785a148f79ce322e5c0a4a1c3fc906bbde760a650f11307490a1e8cee30368c84e1cc9ff1540bb3e76466e27eed540933631257bccfe4e99ef3dfeebb7df740450937721c0a872424622875f47c4f0453512b17f348ec39a7529c252a35b5ac673230b3bd409c82185c7ad886864b2379e86a9f8762efa1b7b3402810da4f6562a48a6bb416b2f1cccc54ba902394f109f45a08128364e36786491f29cd5231d97326fc141fbd040439ba83058c34a1189542641fd9f93976f24be8dc9750d3d6838b8be1c0e62a2bb0c4c64a196d529e0c7cad07e59317c9d883374ece07aa829e09612c875635cc3c814618f1c160614a616cac82393ba79f8c253c08802177ac8c51d12efb6a27f9f02c4f9b40a3dd098f6438df65cef7223c1546fa9cbd149970b659f9629beda720ed6da679ac5d506539b1242eeed09f2cfcd7d997658d114fa732768d4a76d943ef4b1135f27ac8ac1ba958e98483f69f77f1f242c4a1da662f54cc7df87ba062ad4021b79973006346c2507b29ce80c3924cab0a0eca86da1de0b809468654d7a423549dc55494577fea043aa43fb5a41c2ca5dc995a520e4a298c551a88d4ca2e5671ab5da19aaa969877d9ceb3664fd7de1019f7cbaac313a5258e885dd4291893a7ed0aa4366eacdc710646c19455d16b52381715ceb2d62a080d0bb3282ecb0452272187be9431e8ba70c7a1f24f0a3e40b5ed48067d2cf4a3541cb299a03a55c298fb27d3142d1ed6a252607f3ade7af4f8e9367bf46407ff7bf8e0595382290f64a677d9e35ae30bf93c4c3eb027d5fb42908fe0f5a3e2f545bb5da066b11770301c2d3d0fc504b8dda914bdd1bc873bd56bd27c1eca29ca1f1bf96cb5ac0a0117867851bed817ecae8cd06af2d8748c049823ca62673369844b636637566760671ac6e04c58e13fd9d9e924142cd815dbfc476055fa98f88f480492b3ad887fc8a5f2d5d3af920f0f4a52f9c880493281810e4a39b26feae3a7ccccd8e0efa0bd30551ac659692d19cc45060daff0a6de6e9997fd1dda95829d18c3d4c89219c84ac3b0603c0cd51943618f53c14f34cea4a182e2a9485205654250a28186390ee6e3336966758a56236086fffba07c5d972b74491af1b010ec45a950c3010d22984b077632bd33a416d20c024083bd5509287bca700ac777313f2d67627e8a29f60f1a88e26720263c0b61c284995c503e39e534edd9d96018c89208ce721c1a9de669388f805e37eb70c729401a673494d1b44841cbe3309dfa3811b9f8e43e7cf435cd7fcccecfcee347303b92fad8df83112ba7c3a106798405b1990cc004ba1f60be6ad66fa786cc08a8fd23080b92469df328911be5398a966461ad1d85746a3f69c8950da739b82810a42a09d4595c4b85749e4fd07f73daf940fed329e2193408f9439dcaf3409a7bf15827cf86e352f6a04b50fd7030867fbc5151c579594124e2acc10df13b2a79b2f80d90e109609820782312b5f500a8d7c5390de7c90c710a2b7fb9b3007bd60aee9e8880c3fd2060581c660695ce91b5e1006a5abb6aec99b5aa86e69f092b8256f548a2b7e25234f25406a8b997600f0c8f39b68641afc5a3afa62dfe8ae297148c5c5f2eef53f400dad5cec03e1d1dde8854f42c33a8646b71a7269305d66cf14b4a04ccbbe1a959535526907dd6aaf88da5d055ef709085b5915d4bad528603101661e70158046b607b6ca3cd8f16f95b996a03a6f56c9ba9389c337007ce6226272c16bed09aa7f3672ce78b9df134c62928b7de397990800451dc05fa13393d8ad1289606050857a6b8c14ce84601d8d8babdaaa5835044c8e87f37afb669bbda795d9c7028d770f6b899424e89332a5af15288400430433d1e9512eb278bf357db4e25a3b733746bb1bd594a73119b710d6eab001cc54fd1c505872a563083fb004239187caf9a2c5894a1c8737670b2ce3391af1b8bb326696f38489aaab0926904deb53930cf063c19e0d4ba54f6a1eca7b101afdbc4ae8ee84f3ee7b20470723eafdc8ca65b365a8cd6f524143c9dc80f4e475f355f341e6b0ff9cf058d17d32c04bc010adad2e786e616f4b060358990c3c0b610a4203c7c5051e8d4f2a7cb94dc45e09f384c0628d8bc0629f47275cf87c6f9391639c0842dfce51d1d027ea0be8247c18da589e80ffffe086c63aff58abb35941af92067cfc86a652364d1000e20879027bac0130920050c45fcadd1de028ce04b68d81712fcc80fd09845f22d54b70a06302b25ef50a6c2a7eefbc828eaf19a9bd9c5c52af2d51860356067691e1b6eb2bae89b90adaeac7c419a68819a3dd156f1bc730ad5a84ba5d91185805929e985dad6b16ced8c6dbfa5bb2faceb542fc25aa180fc191c199920f6eda08274acafd09586a9695f1226ce565b22c3dbd0a736a0118900912535040d109f63ed5cb38e0e29f815f4323fe8e7feea0db3ce9cab1211b71af82da55ca565e598b952030b8c10010e0c7fc945f6ab27e3531eca3e7d58bbfd393e70b59cb605f03c4dd5a6edef66f67376b4af22709bda0e06e28a59aa62f93bc1852bf4768735fb5c4d9d866adc7619be83773c6cf872d7d1b15322fbad0c8586898187677cae5f66d158a41717b4e2a0b7594fa16fe6860a8d65cc71887cf3f9043653515b5e3f2aff06c41522d54b4a8bcadc2261f9a1ca02177dbc50f176bce01540773521b87e3d128bc1e1b8a4c0b0c82d9217866b5b527ac135b81857d5aedefc0506cb270e12cc1b80a5afc04775463f0bdd07b47a08dc6d5178a95611f87cd2cec09e0bff44b415f3681aab54b0d7228da4d660eaf5cdcbdcd68955eacdc5de20729b254ff17097870b53ac8d93ff24cd6c4393409435453151241bcfad90d28792218916153a7c8f05b7825e773b390e46b7baa302492a2330454e4f20b26add1a710100abbe0cdb700da8d8e857978674b9471b0405ea2e3dc6306bce3c09e0dabcf91888afe7c6974b1c35bf1d4b1f4ca6e8baff522c106c3df8f5f638efb67985d78e4f2ef2b94e8cbe8e5560f28b8bb58fbccd343aaee82f57fcacf09441c07f39cb8bcef242c46eff057b676478352f43cf0135441efcb91dc0c6707da25b2d3d78fdeefa5aea2719cc7b3e8c9816f8Line truncated
bs, _ = hex.DecodeString("1f8b080000096e8800ffec3dfb7bdc368ebfe7af60667b8db367699c47bb7b8e3d778e9deefada3cbe38b9bdbd7ebdfb38126786b5242a226567ea78fff60340bd1f33f2d84ebc6d7f483c12491004011000096aeffed1ebc3777f7ff3822d4c184ceeeddd779c7b872a5e2672be306cebf0217bbcf3e829fb4f7eaaa6ecb94ae68c473e53662112e6a9c824729a1a9568971d0401a3569a25428be44cf8eebdf75a303563662135d32a4d3c01ad7cc1e071aece4412099f4d970093bd3c7ee768b30c040ba42722686716dc300f8aa6e2de4ca5d0ad8ce0a5603f1c1fbe7875f282cd6420dc7b8e036823f62ce0d17c7f24a2118be60e8fe3fd915e461ef41dcde915e1ab824024fba393bce4d024c1887901d77a7f849502c54f470852707f728fb1bd5018cebc054fb430fba3d4cc9c3f8fca828531b1233ea4f26c7ff4dfcefb03e750853137721a8811514844d0eaf8c5bef0e7a2d22ee2a1d81f9d49711eabc454aa9e4bdf2cf67d71066470e8611b062e8de481a33d1e88fd47ee4e0b902fb497c8d848155560b5aaf1d42c54d2aa11c8e814662d008a41b1f152c3a48790168998ed8f66fc0c1fdd180839b9870d8c3481981444649fd8c5054ef22b98dc57d0d3d6c3cbcbbdb1ad557460814d9532da243c1e7b5a8f8b273794910b6f46191ec80a7a2184b1185ad630cb180661c447838da984b1a9f297ec827e321673df07849ca9324685bbec4f3bf1c76759d90c06edcc782883e52e1bfd550467c2488fb3572215a36d56bcd8660709507b9b691e69075859ce2c88cb7bf4270dfe75f14dd163c893b98c1ca3e25df6c8fd4684b5ba2e22eb842a523ae6c0fd175db8bc1451a0b6d94b15710ffe1eaa482b60c86d363a049991206aafc4396058806974c181d990bb7d941b7f6288754d3241d6699722bdfa4b673021fda505647f25e4ced202b25f5061aa125f249676918a1ae30ad45c35c8bccb769ed567baf286c038df94131e2b2d51227691a74026cf9a1d486d9c4839d314948229baa2d7c4700e329c45add1100616a46154b4f1a58e030e732923e075e14c03e59de678006b5b49067eccf9a3601cd299c03a65c1947ba7f304351ef6a212407f3edd7afce4db6df6f8e90efef7e8e1b33a0513eecb54efb22795c1e7f479147f644fcbf739211fc3ebc7f9ebcbe6b880cd22d7e7a0381a7c1e881960bb53327a6d788f76cad7c4f93c9073a43f0ef2d97a5ae504ce15719bbe3817ecbe0c516bf2c8744802ac1145b3f38534c22199c1a6e7a0686adae05c58ea3fddd9e984e4b7148b1dff63502bebb0f05d1df220706a54ec45286bfc1fa1f025675b21ff98d1f44fdffe29fef8b00090c9152cb131a80960e9897d5395bea23263e33f02efc3426b186785ae65b0921954dbc29dbbbb455df647204a025a660a0b2b8b1740690d42c56010ea9ce1544d13c14f35aec38182e6898813056d0260c1b186151256f37369165588969fc03ef8e3b878dd20420264ca67e5b260c7bd318920acc463bb14dfdba311d2fa03660a7ba762109584a10180ef227e56ace3fc0c4bec1f542ff94f5fcc781ac0720b7680a07a72ce69d1b46bc99e2f0b20b8467218749295e12a045251efc3992660108d267b329ce725a8b7464c271e2e630e3e398f1eff99564f6657f7d193c7b0b612efd9dfe3092b16d33d629b1cd842faa0409d8fb0dad5fbb70b4b6a04f4fe0988054593ce5598c04db21af948d2a0328e9c3a959f24b0c5c06905cf1bf8898a7d751e554aa19c67cbfb1f46cd7a40fff91cad211484eca10ae5852fcdd7d154c7cff6a605ed8197a0fbbdf114fef15a4725e64507a188d21a3684efa4c0c95a7f60579e8205e4fb6f45acb61e02f42a39e7c1325ea095c38a5fcec2c799b584fb5a8480e181ef336c0eeb8a4a9688dade187a1adc35cecca0ae61f8e7c292a0d13d82e8edb8208d3c933e72ee15d003c5634eac62d08370f4d4bc815fdefc8a8491c3e9f22141ffa1d9ed02f4d3f1d1ad50452f52834c36083b359bb550b3cdaf481150ef86276620abcca0faa2d1f15b0ba1abdfbd711a5424bb525a96ec8d815864798f41235805dba31b6d7dd4c8dfc9441b50ade7db4c45c1928133711e31396391f084d63c593e63195eec9c27112e4199f6cec003052490e23ec09fc9f971844ab1502800b854c535640227f441c756f555a51c88220246ff3b59b775ddd5acebe08243b5f6164fea25e4d28c26f9285e09e10b1f56a827938262fd6071fd6aeaa978f26e814e318e374d682d620baec1e9156085f1337490c11d8b14ace01e98b01c14be5b2e162c4c91e4193ab8586795c8538ec4791db4bb378eebacb0166934db2b6b60560d703280a975c8ec43314f53033ebb891c1dd29f6ccd653158d9d9ba723b9c6ed168205ae59340f064263f8e3ae6aafea2f65879c87eb6385eccd300ec0d60d0063fd7383787870dcb4584dc0db685460ada960f4b089d5cfeed2a2677d06d88474cfa48d8ac0729f46a76cf44e3e2029b1c62c116fe728f8fc07ea0b98247c18d8589d61ffefd01d0c659eb257743946af5a0668f6435aa916551331c800e018f756e4fc460296020e30fb5f1e6c608be84817d25c10bfd088369836f5875ebcc0066a9e41ec94478347d9f18c54cde70b3b8bc5c07be94015631ec2ccc13c34d5a257ddd64ab322b6f511335507d269a2c9e4d4ece1a55aad4272227302b28ddea6d88666b566cfa2ddd73617da76a13d6082464cfe0c8c8186ddf0e2808c7fa0a5d65589af41561e162bd2632bc69fa54041a2d1100b2a207bf66c467b676c659c747143af37b911ff7637ffd815967ce51b1881a03fc8e4aae33b24266ae35c0dc4608c10e0c7ecc48f6932ba3331ec83e7e183cfecc3e70b49c3709f02249d4a6e3ef46f64b4eb4a742709b9a0e06da158b4445f2173217ae31db1ddaec4b0d751ea869d365f80bbce341cd97bb89899d13d8ef6420342c0c3c38e74bfd2a0da722b9bc64d240d7dbaca7d1f3a5a1465319711491e75f8e600b1536e9f583f26e815c0142bd22b5a8cd1d229617a8d477d0c70b146fc60b5e83e9ae6664ae6f44b1fefabc470f46e091588a4ed84edd9155e7e8ae1422991b491df35202193c2dd8a463565a964a650844d975a3d8df87614c76f27e77d8f33eb3a880fbc55801e3d80d0678c935784fd7159cdefa0d2a12fdde82c5fd1adcefd1e4ef42af235603c0fd068457eaee523b85a54a78a7a22973c7f3482582bd114928b586554cdf3ecd6d9fd8a5de9cec35207799f214ea7778d0b21eec16c0dfa4596cb83e10644d015a24c9c6660394f439005044fb251d6e55cb63a2d7ddfedb080377dd018f389121e8bf514f8cb51cdd809007d8e19e0c9a962840b181bd2e0ee9f2fc36887754a315189eadc42988003716a88800f8b00845b17b53094960ebc3d91ca3123fe67b1f5b0f7fba3b71093bbc3c20814f0ee23964fba16a86c18a1be5dbLine truncated
gr, _ = gzip.NewReader(bytes.NewBuffer(bs))
bs, _ = ioutil.ReadAll(gr)
Assets["index.html"] = bs
+49
View File
@@ -33,6 +33,19 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http) {
$scope.reportData = {};
$scope.reportPreview = false;
$scope.needActions = {
'rm': 'Del',
'rmdir': 'Del (dir)',
'sync': 'Sync',
'touch': 'Update',
}
$scope.needIcons = {
'rm': 'remove',
'rmdir': 'remove',
'sync': 'download',
'touch': 'asterisk',
}
// Strings before bools look better
$scope.settings = [
{id: 'ListenStr', descr: 'Sync Protocol Listen Addresses', type: 'text'},
@@ -590,6 +603,30 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http) {
$('#ur').modal('hide');
};
$scope.showNeed = function (repo) {
$scope.neededLoaded = false;
$('#needed').modal({backdrop: 'static', keyboard: true});
$http.get(urlbase + "/need?repo=" + encodeURIComponent(repo)).success(function (data) {
$scope.needed = data;
$scope.neededLoaded = true;
});
};
$scope.needAction = function (file) {
var fDelete = 4096;
var fDirectory = 16384;
if ((file.Flags & (fDelete+fDirectory)) === fDelete+fDirectory) {
return 'rmdir';
} else if ((file.Flags & fDelete) === fDelete) {
return 'rm';
} else if ((file.Flags & fDirectory) === fDirectory) {
return 'touch';
} else {
return 'sync';
}
};
$scope.init();
setInterval($scope.refresh, 10000);
});
@@ -740,6 +777,18 @@ syncthing.filter('shortPath', function () {
};
});
syncthing.filter('basename', function () {
return function (input) {
if (input === undefined)
return "";
var parts = input.split(/[\/\\]/);
if (!parts || parts.length < 1) {
return input;
}
return parts[parts.length-1];
};
});
syncthing.filter('clean', function () {
return function (input) {
return encodeURIComponent(input).replace(/%/g, '');
+35 -4
View File
@@ -65,7 +65,7 @@ found in the LICENSE file.
}
.table th {
white-space:nowrap;
white-space: nowrap;
font-weight: 400;
}
@@ -73,6 +73,10 @@ found in the LICENSE file.
padding-left: 20px !important;
}
.table td.small-data {
white-space: nowrap;
}
@media (max-width:767px) {
.table-responsive>.table>tbody>tr>td {
/* revert a bootstrap setting e.g.:
@@ -168,15 +172,18 @@ found in the LICENSE file.
</tr>
<tr>
<th><span class="glyphicon glyphicon-globe"></span>&emsp;Global Repository</th>
<td class="text-right">{{model[repo.ID].globalFiles | alwaysNumber}} files, {{model[repo.ID].globalBytes | binary}}B</td>
<td class="text-right">{{model[repo.ID].globalFiles | alwaysNumber}} items, {{model[repo.ID].globalBytes | binary}}B</td>
</tr>
<tr>
<th><span class="glyphicon glyphicon-home"></span>&emsp;Local Repository</th>
<td class="text-right">{{model[repo.ID].localFiles | alwaysNumber}} files, {{model[repo.ID].localBytes | binary}}B</td>
<td class="text-right">{{model[repo.ID].localFiles | alwaysNumber}} items, {{model[repo.ID].localBytes | binary}}B</td>
</tr>
<tr>
<th><span class="glyphicon glyphicon-cloud-download"></span>&emsp;Out of Sync</th>
<td class="text-right">{{model[repo.ID].needFiles | alwaysNumber}} files, {{model[repo.ID].needBytes | binary}}B</td>
<td class="text-right">
<a ng-if="model[repo.ID].needFiles > 0" ng-click="showNeed(repo.ID)" href="">{{model[repo.ID].needFiles | alwaysNumber}} items, {{model[repo.ID].needBytes | binary}}B</a>
<span ng-if="model[repo.ID].needFiles == 0">0 items, 0 B</span>
</td>
</tr>
<tr>
<th><span class="glyphicon glyphicon-lock"></span>&emsp;Master Repository</th>
@@ -637,6 +644,30 @@ found in the LICENSE file.
</div>
</div>
<!-- Needed files modal -->
<div id="needed" class="modal fade">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header alert alert-info">
<h4 class="modal-title">Out of Sync Items</h4>
</div>
<div class="modal-body">
<table class="table table-striped table-condensed">
<tr ng-repeat="f in needed" ng-init="a = needAction(f)">
<td class="small-data"><span class="glyphicon glyphicon-{{needIcons[a]}}"></span> {{needActions[a]}}</td>
<td title="{{f.Name}}">{{f.Name | basename}}</td>
<td class="text-right small-data"><span ng-if="f.Size > 0">{{f.Size | binary}}B</span></td>
</tr>
</table>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal"><span class="glyphicon glyphicon-remove"></span>&emsp;Close</button>
</div>
</div>
</div>
</div>
<script src="angular.min.js"></script>
<script src="jquery-2.0.3.min.js"></script>